【问题标题】:Stateful LSTM fails to predict due to batch_size issue由于 batch_size 问题,有状态 LSTM 无法预测
【发布时间】:2017-07-14 13:00:43
【问题描述】:

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

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:在有状态的网络中,您应该只传递带有 可以除以批量大小的样本数。找到:240 样品。批量大小:32。

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

【问题讨论】:

    标签: tensorflow keras lstm rnn


    【解决方案1】:

    我怀疑错误的原因是您没有在model.predict 中指定批量大小。正如您在“预测”部分的documentation 中看到的,默认参数为

    model.predict(self, x, batch_size=32, verbose=0)
    

    这就是错误消息中出现 32 的原因。所以你需要在model.predict中指定batch_size=60

    【讨论】:

    • 谢谢,我认为模型很明显会记住训练时的批量大小
    猜你喜欢
    • 2019-04-10
    • 2017-12-20
    • 2019-11-15
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多