【发布时间】:2019-04-29 10:59:20
【问题描述】:
所以我正在尝试使用以下代码从 3 个顺序子模型中创建一个集成模型:
def create_ensemble(models,model_input):
# take-in all outputs fro all models
outModels = [model(model_input) for model in models]
# calculate average of all results
outAvg = layers.average(outModels)
# merge into one model
modelMerge = Model(inputs=model_input,outputs=outAvg,name='ensemble')
return modelMerge
model_input = Input(shape=models[0].input_shape[1:])
modelEns = create_ensemble(models,model_input)
我得到了这个模型:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 1, 1) 0
__________________________________________________________________________________________________
model_1 (Sequential) multiple 14 input_1[0][0]
__________________________________________________________________________________________________
model_2 (Sequential) multiple 14 input_1[0][0]
__________________________________________________________________________________________________
model_3 (Sequential) multiple 14 input_1[0][0]
__________________________________________________________________________________________________
average_1 (Average) (None, 1) 0 model_1[1][0]
model_2[1][0]
model_3[1][0]
==================================================================================================
子模型如下:
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (1, 1) 12
_________________________________________________________________
dense_1 (Dense) (1, 1) 2
=================================================================
这是我提供数据的方式:
def fit_lstm(train, batch_size, nb_epoch, nb_neurons):
X, y = train[:, 0:-1], train[:, -1]
X = X.reshape(X.shape[0], 1, X.shape[1])
model = Sequential()
model.add(LSTM(nb_neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
for i in range(nb_epoch):
model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False)
model.reset_states()
return model
我正在尝试为集成模型提供与子模型相同的数据,但标题中出现错误。我哪里错了?
【问题讨论】:
-
如何提供数据?使用
tf.Session()或model.fit()?由于问题存在,您需要展示如何提供数据。您提供的代码似乎是正确的。 -
我使用提供数据的功能编辑了帖子
-
在这个例子中,你没有提供集成模型,而只是一个常规模型。 + 进入
model.fit()的X和y的形状是什么。 + 您在运行刚刚添加的特定代码时遇到问题吗? -
我使用这个函数来提供 3 个 lstm 模型而不是 ensemble 模型。我想要的是提供集成模型 X(3 个子模型的 X 相同),然后将其提供给所有三个子模型以获得输出。当我将 X 提供给 3 个子模型时,我得到了我想要的,但是当我在集成模型上尝试 X 时,我得到了错误。 X 是形状 (28,1,1)
标签: python tensorflow keras