我有一份培训数据列表,我正在用它来训练。但是,当我预测时,预测将一次只用一个例子在线完成。
如果我使用以下
之类的输入声明我的模型model = Sequential()
model.add(Dense(64, batch_input_shape=(100, 5, 1), activation='tanh'))
model.add(LSTM(32, stateful=True))
model.add(Dense(1, activation='linear'))
optimizer = SGD(lr=0.0005)
model.compile(loss='mean_squared_error', optimizer=optimizer)
当我使用单个形状示例(1,5,1)进行预测时,会出现以下错误。
ValueError: Shape mismatch: x has 100 rows but z has 1 rows
我提出的解决方案是使用(1,5,1)的batch_input_shape迭代地训练我的模型,并为每个单独的示例调用fit。这非常慢。
是否没有办法训练大批量,但使用LSTM预测一个例子?
感谢您的帮助。
答案 0 :(得分:2)
尝试这样的事情:
model2 = Sequential()
model2.add(Dense(64, batch_input_shape=(1, 5, 1), activation='tanh'))
model2.add(LSTM(32, stateful=True))
model2.add(Dense(1, activation='linear'))
optimizer2 = SGD(lr=0.0005)
model2.compile(loss='mean_squared_error', optimizer=optimizer)
for nb, layer in enumerate(model.layers):
model2.layers[nb].set_weights(layer.get_weights())
您只需将权重从一个模型重写为另一个模型。
答案 1 :(得分:0)
您已在第一层中定义了input_shape
。因此,发送与预设编辑input_shape
不匹配的形状有效。
实现这一目标有两种方法:
您可以通过更改来修改模型
batch_input_shape=(100, 5, 1)
至
input_shape=(5, 1)
以避免预设的批量大小。您可以在batch_size=100
中设置model.fit()
。
编辑:方法2
您定义与model2
完全相同的模型。然后是model2.set_weights(model1.get_weights())
。
如果您想使用stateful==True
,您实际上想要使用最后一批中的隐藏图层作为下一批次的初始状态。因此应该匹配非常大的批量大小。否则,您只需删除stateful==True
。