试图在Keras建立一个合奏团。获取图表断开连接错误

时间:2018-03-02 01:23:26

标签: tensorflow keras ensemble-learning

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 ;.访问以下先前的图层时没有问题:[]

2 个答案:

答案 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上的每个模型并给出相应的输出。