强化学习神经网络预测报错:输入形状不匹配问题求助
解决Keras模型Predict时的形状不匹配错误
这个问题我之前也碰到过,本质是输入数据的形状和模型期望的不匹配,咱们一步步来拆解解决:
问题根源分析
先看你拿到的错误信息:
ValueError: Error when checking input: expected dense_211_input to have shape (1202,) but got array with shape (1,)
你的模型定义里用了input_dim=1202,这意味着模型期望每个输入样本是1202维的向量,对应输入数据的形状应该是(batch_size, 1202)(其中batch_size是一次喂给模型的样本数量,这里你是单样本预测,所以batch_size=1)。
但你传入的old_state形状是(1202, 1),Keras会把这个结构理解成「1202个独立样本,每个样本只有1维」,完全和模型期望的输入结构反过来了,所以触发了形状不匹配的错误。
具体修复方案
你可以选以下两种方案中的任意一种:
方案一:在调用Predict前调整输入形状
在你的update函数里,执行预测前先把old_state和new_state的形状转为(1, 1202):
def update(self, old_state, new_state, action, reward): # 把形状从(1202,1)调整为(1,1202),匹配模型输入要求 old_state = np.reshape(old_state, (1, 1202)) new_state = np.reshape(new_state, (1, 1202)) print(old_state.shape) # 现在输出应该是(1,1202) target = self.q_network.predict(old_state) t = self.target_network.predict(new_state) # 后续代码保持不变...
方案二:在生成State时就设置正确形状
看你代码里的这一行:
new_state = np.reshape(new_state, [1202, -1])
把它修改为:
new_state = np.reshape(new_state, [-1, 1202])
这样生成的new_state直接就是(1,1202)的形状(当原始状态是1202个元素时),后续传入update函数时就不需要再调整了。
验证效果
调整完成后,模型接收到的输入形状是(1,1202),每个样本的维度正好是1202,和模型定义的input_dim=1202完全匹配,就能正常执行predict操作了。
内容的提问来源于stack exchange,提问作者Robin van Hoorn
相关产品推荐
相关产品推荐

