You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

强化学习神经网络预测报错:输入形状不匹配问题求助

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:17:34