python - 无法在有状态 LSTM keras 上提供价值
问题描述
代码有什么问题?
它返回ValueError: Cannot feed value of shape (2, 5, 7) for Tensor u'lstm_1_input:0', which has shape '(5, 5, 7)'
错误。
我的代码:
model = Sequential()
model.add(LSTM(128,batch_input_shape=(5,5,7),return_sequences=True,stateful=True))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(LSTM(32))
model.add(Activation('relu'))
model.add(Dense(2))
model.add(Activation('softmax'))
checkpoint = ModelCheckpoint('./model28-{epoch:02d}.h5')
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
print(model.summary())
model.fit(trainX,trainY,batch_size=5,epochs=20,validation_split=0.2,callbacks=[checkpoint],shuffle=False)
解决方案
我的trainX
形状是 34365。我删除了最后一行 5 以具有 34360 的形状(形状应除以batch_size
)。每个epoch
,reset_states()
都应该被调用,所以我将代码更改为:
epo_num= 20
model = Sequential()
model.add(LSTM(128,batch_input_shape=(2,5,7),return_sequences=False,stateful=True))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(LSTM(32))
model.add(Activation('relu'))
model.add(Dense(2))
model.add(Activation('softmax'))
#checkpoint = ModelCheckpoint('./model30-{epoch:02d}.h5')
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
print(model.summary())
for i in range(epo_num):
print('Epochs {:d}/{:d}'.format(i+1,epo_num))
model.fit(trainX,trainY,batch_size=2,epochs=1,validation_split=0.2,shuffle=False)
model.reset_states()
推荐阅读
- python - Pyopengl - 在 glUseProgram 之前和之后有 glGetUniformLocation 和 glUniformMatrix4fv 有什么区别?
- excel - (Excel)有没有办法自动突出两个之间较大的数字?
- javascript - 即使资产链接正确,TWA 也会显示地址栏
- cmake - CMake 子模块无法解决 MSVC 上的项目依赖关系“无法打开包含文件”
- sql - DENSE_RANK() 和 LEAD() 函数之间是否存在依赖关系/互连?
- java - 无法使用 .contains 方法检测船舶是否漂浮
- python - 来自数据框的嵌套字典,内部字典包含熊猫系列作为值
- r - 使用 geom_text 和 facet_grid 时在箱形图上显示紧凑字母
- google-chrome-extension - 我是否需要在 content_scripts 中为 Chrome 扩展指定匹配项?
- python-3.x - 如何将输入与.py 3中的字符串完全匹配