由于batch_size问题,有状态LSTM无法预测

Har*_*hit 7 lstm keras tensorflow rnn

我能够使用keras成功训练我的有状态LSTM.我的批量大小为60,我在网络中发送的每个输入都可以被batch_size整除.以下是我的代码段:

model = Sequential()
model.add(LSTM(80,input_shape = trainx.shape[1:],batch_input_shape=(60, 
trainx.shape[1], trainx.shape[2]),stateful=True,return_sequences=True))
model.add(Dropout(0.15))
model.add(LSTM(40,return_sequences=False))
model.add(Dense(40))
model.add(Dropout(0.3))
model.add(Dense(output_dim=1))
model.add(Activation("linear"))
keras.optimizers.RMSprop(lr=0.005, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss="mse", optimizer="rmsprop")
Run Code Online (Sandbox Code Playgroud)

我的训练线成功运行:

  model.fit(trainx[:3000,:],trainy[:3000],validation_split=0.1,shuffle=False,nb_epoch=9,batch_size=60)
Run Code Online (Sandbox Code Playgroud)

现在我尝试预测测试集再次被60整除,但是我得到了错误:

ValueError:在有状态网络中,您应该只传递带有多个样本的输入,这些样本可以除以批量大小.发现:240个样本.批量:32.

谁能告诉我上面有什么问题?我很困惑,尝试了很多东西,但没有任何帮助.

Mir*_*ber 7

我怀疑错误的原因是你没有指定批量大小model.predict.正如您在"预测"部分的文档中所看到的,默认参数是

model.predict(self, x, batch_size=32, verbose=0)
Run Code Online (Sandbox Code Playgroud)

这就是为什么32出现在您的错误消息中.所以,你需要指定batch_size=60model.predict.