Keras多输入模型预测时输入形状不匹配报错求助
解决Keras多输入模型预测时的形状不匹配问题
嘿,这个问题我之前也踩过坑!核心原因其实很直白:Keras的predict方法要求输入必须是带批量维度的二维数组,哪怕你只预测单个样本也不能打破这个规则。
你看,你定义的aux_input形状是(162,),这指的是单个样本的特征数,但模型实际期望的输入形状是(None, 162)(None代表可变的批量大小)。而你现在的aux_dummy是(162,)的一维数组,Keras会把它错误地解析成「批量大小为162,每个样本只有1个特征」的输入,这就和模型要求的(162,)单样本特征数完全对不上了,所以才会报那个形状不匹配的错误。
解决步骤
给输入数组增加批量维度
把你的aux_dummy从一维转成二维,让它的形状变成(1, 162),有两种简单方法:# 方法1:用np.expand_dims新增维度 aux_dummy = np.expand_dims(np.zeros(shape=(AUX_FEATURE_VECTOR_SIZE,)), axis=0) # 方法2:用reshape直接调整 aux_dummy = np.zeros(shape=(AUX_FEATURE_VECTOR_SIZE,)).reshape(1, -1)检查另一个输入的形状
同样要确保encode_1_hot(next_state)的输出也是二维数组(形状为(1, 54)),如果它现在是一维的,也要用同样的方法增加维度。
修改后的完整预测代码
aux_dummy = np.zeros(shape=(AUX_FEATURE_VECTOR_SIZE,)).reshape(1, -1) print(aux_dummy.shape) # 现在输出应该是(1, 162) # 确保encode_1_hot的输出也是二维 encoded_state = encode_1_hot(next_state).reshape(1, -1) q_vals, _ = model.predict([encoded_state, aux_dummy], batch_size=1)
补充说明
Keras输入层定义的shape参数只描述单个样本的特征形状,模型在运行时会自动在前面加上批量维度。所以不管是训练还是预测,输入都得是(批量大小, 特征数)的二维数组,一维数组会被Keras误解维度含义,从而触发形状不匹配的错误。
内容的提问来源于stack exchange,提问作者ZerkTheMighty
相关产品推荐
相关产品推荐

