from keras.models import load_model
import h5py
# sq_model.save_weights('sq_model_weights.h5')
# res_model.save_weights('res_model_weights.h5')
# model.save('my_model.h5')
# dense_model.save_weights('dense_model_v3_weights.h5')
sq_model.load_weights('sq_model_weights.h5')
res_model.load_weights('res_model_weights.h5')
dense_model.load_weights('dense_model_v2_weights.h5')
models = [sq_model, res_model, dense_model]
model_input = Input((3,32,32))
def ensemble(models, model_input):
outputs = [model.outputs[0] for model in models]
y = Average()(outputs)
model = Model(inputs = model_input, outputs = y, name='ensemble')
return model
ensemble_model = ensemble(models,model_input)
运行上面的代码时出现以下错误:
RuntimeError:图表已断开连接:无法在图层" input_2&#获取张量Tensor(" input_2:0",shape =(?,3,32,32),dtype = float32)的值34 ;.访问以下先前的图层时没有问题:[]
答案 0 :(得分:1)
更改
outputs = [model.outputs[0] for model in models]
到
outputs = [model(model_input) for model in models]
为我工作
答案 1 :(得分:0)
您有三个模型,每个模型都有一个单独的输入。在致电
model = Model(inputs = model_input, outputs = y, name='ensemble')
指定新模型。它的输入应该是您的model_input
,输出应该是您的平均输出。
但是你忘了将三个模型实际连接到你的输入。所以你有一个包含松散输入层model_input
和整体的断开模型,整体中包含的三个模型中的每一个都在等待自己输入层的输入(总共4个输入层)。
更改
outputs = [model.outputs[0] for model in models]
到
outputs = [model(model_inputs) for model in models]
应该做的伎俩。它调用model_input
上的每个模型并给出相应的输出。