如何修复'ValueError:无法为Tensor Y提供形状X的值,Tensor Y在Keras上具有Z形状

问题描述 投票:0回答:1

模型架构

model = Sequential()
model.add(LSTM(50,batch_input_shape(50,10,9),return_sequences=True))
model.add(LSTM(30,return_sequences=True, activation='tanh'))
model.add(LSTM(20,return_sequences=False, activation='tanh'))
model.add(Dense(9, activation='tanh'))
model.compile(loss='mean_squared_logarithmic_error',
                   optimizer='adam',metrics=['accuracy'])

摘要如下所示

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (50, 10, 50)              12000     
_________________________________________________________________
lstm_2 (LSTM)                (50, 10, 30)              9720      
_________________________________________________________________
lstm_3 (LSTM)                (50, 20)                  4080      
_________________________________________________________________
dense_1 (Dense)              (50, 9)                   189       
=================================================================
Total params: 25,989
Trainable params: 25,989
Non-trainable params: 0

我使用fit_generator来训练模型。我打算使用predict而不是predict_generator。我使用yeild编写了一个自定义生成器。这没有任何问题因为predict_generator工作正常

model.fit_generator(generator=generator, 
                    steps_per_epoch=250, epochs=10, shuffle=True)

当我使用predict

model.predict(testX = np.zeros(50,10,9))

它让我低于错误

ValueError: Cannot feed value of shape (32, 10, 9) for Tensor
          'lstm_1_input:0', which has shape '(50, 10, 9)'

现在我不知道32来自何处,因为输入形状是(50,10,9),这正是它所期望的。

python keras lstm shapes valueerror
1个回答
0
投票

使用

model.predict(np.random.randn(50,10,9), batch_size=50)

您正在通过50将批量大小修复为batch_input_shape(50,10,9)

但是,当你使用predict时,你没有传入batch_size,默认为32.所以它试图将(32, 10, 9)传入(50, 10, 9)并且它失败了。

它没有在fit_generator失败,因为你的generator应该返回一批50号。

https://keras.io/models/model/#predict

© www.soinside.com 2019 - 2024. All rights reserved.