python - 如何修复'ValueError:无法为张量 Y 提供形状 X 的值,张量 Y 在 Keras 上具有形状 Z
问题描述
模型架构
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),这正是它所期望的。
解决方案
利用
model.predict(np.random.randn(50,10,9), batch_size=50)
您正在将批量大小固定为50
viabatch_input_shape(50,10,9)
但是,当您使用时,predict
您没有传入batch_size
默认为 32 的值。因此它尝试(32, 10, 9)
传入(50, 10, 9)
并且失败。
它没有失败,fit_generator
因为您generator
应该返回一批 50 号。
推荐阅读
- python - 在模块末尾分配的变量
- javascript - 如何在 php 中创建干净的 url 从 mysql 获取数据?
- arrays - 致命错误:索引超出范围?但真的吗?
- entity-framework-6 - Entity Framework (v6) Eager-Loading 奇怪的行为 - 'Gotcha'
- javascript - 括号中的正则表达式匹配数(Firefox)
- java - 为什么这加起来是 11 而不是 8?
- nginx - Nginx access_log 的路径可以带变量吗?
- sql - 如何存储不带引号的是或否的布尔值?
- ruby-on-rails - 如何显示我的 Rails Web 应用程序的未捆绑的单个 javascript 和 css
- reactjs - 多张图片一张一张上传,带有预览的删除和更改选项