首页 > 解决方案 > 无法在有状态 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)

标签: pythontensorflowkeraslstm

解决方案


我的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()

推荐阅读