错误是因为您调用了
Average
reg_pred
,
class_pred
).
平均的
这里是一个虚拟示例,其中我们拟合2个模型以产生2个输出:
X = np.random.uniform(0,1, (64,28,28,1))
y = np.random.randint(0,2, 64)
def get_model():
inp = Input((28,28,1))
reg_pred = Dense(1)(inp)
class_pred = Dense(2, activation='softmax')(Flatten()(inp))
model = Model(inp, [reg_pred, class_pred])
model.compile('adam', ['mse', 'sparse_categorical_crossentropy'])
return model
model1 = get_model()
model1.fit(X,[X,y])
model2 = get_model()
model2.fit(X,[X,y])
您的集成函数会产生错误:
def ensemble(models, model_input):
Models_output = [model(model_input) for model in models]
Avg = Average()(Models_output)
ensemble = Model(inputs=model_input, outputs=Avg, name='ensemble')
ensemble.compile('adam', ['mse', 'sparse_categorical_crossentropy'])
return ensemble
model_input = Input((28,28,1))
models = [model1, model2]
model_ensemble = ensemble(models, model_input)
def ensemble(models, model_input):
output_reg = []
output_class = []
for model in models:
out_reg, out_class = model(model_input)
output_reg.append(out_reg)
output_class.append(out_class)
avg_reg = Average()(output_reg)
avg_class = Average()(output_class)
ensemble = Model(inputs=model_input, outputs=[avg_reg, avg_class], name='ensemble')
ensemble.compile('adam', ['mse', 'sparse_categorical_crossentropy'])
return ensemble
model_input = Input((28,28,1))
models = [model1, model2]
model_ensemble = ensemble(models, model_input)