由于 batch_size 问题,有状态 LSTM 无法预测
Stateful LSTM fails to predict due to batch_size issue
我能够使用 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")
我成功运行的训练线:
model.fit(trainx[:3000,:],trainy[:3000],validation_split=0.1,shuffle=False,nb_epoch=9,batch_size=60)
现在我尝试预测再次被 60 整除的测试集,但出现错误:
ValueError: In a stateful network, you should only pass inputs with a
number of samples that can be divided by the batch size. Found: 240
samples. Batch size: 32.
谁能告诉我上面有什么问题吗?我很困惑,尝试了很多东西,但没有任何帮助。
我怀疑错误的原因是你在model.predict
中没有指定batch size。在"predict"部分的documentation可以看到,默认参数是
model.predict(self, x, batch_size=32, verbose=0)
这就是您的错误消息中出现 32 的原因。所以需要在model.predict
.
中指定batch_size=60
我能够使用 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")
我成功运行的训练线:
model.fit(trainx[:3000,:],trainy[:3000],validation_split=0.1,shuffle=False,nb_epoch=9,batch_size=60)
现在我尝试预测再次被 60 整除的测试集,但出现错误:
ValueError: In a stateful network, you should only pass inputs with a number of samples that can be divided by the batch size. Found: 240 samples. Batch size: 32.
谁能告诉我上面有什么问题吗?我很困惑,尝试了很多东西,但没有任何帮助。
我怀疑错误的原因是你在model.predict
中没有指定batch size。在"predict"部分的documentation可以看到,默认参数是
model.predict(self, x, batch_size=32, verbose=0)
这就是您的错误消息中出现 32 的原因。所以需要在model.predict
.
batch_size=60