【问题标题】:How to fix 'ValueError: Cannot feed value of shape X for Tensor Y, which has shape Z on Keras如何修复'ValueError:无法为张量 Y 提供形状 X 的值,张量 Y 在 Keras 上具有形状 Z
【发布时间】:2019-09-10 22:05:54
【问题描述】:

模型架构

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_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】:

    使用

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

    您通过batch_input_shape(50,10,9) 将批量大小固定为50

    但是,当您使用 predict 时,您不会传入默认为 32 的 batch_size。因此它会尝试将 (32, 10, 9) 传入 (50, 10, 9) 并失败。

    fit_generator 没有失败,因为您的 generator 应该返回一批大小为 50。

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

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多