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

神经网络输入形状不匹配:加法模型推理报错解析

问题分析与解决

你的报错核心原因是Keras模型要求输入必须包含批量维度,哪怕是单个样本也不例外,具体拆解如下:

1. 模型输入维度的规则

Keras中,无论是训练还是推理,模型的输入都需要遵循「批量维度在前」的格式:

  • 输入形状为 (batch_size, feature_dim),其中batch_size是样本数量(可以是None表示任意大小),feature_dim是单个样本的特征数。

2. 加法模型的输入要求

你的加法模型在训练时使用的X_train形状是(1000, 2),对应1000个样本(批量维度),每个样本有2个特征。Keras会根据训练数据自动推断模型的输入规格为(None, 2)——即接受任意批量大小,每个样本必须有2个特征的二维输入。

而你推理时传入的np.array([3,4])是一维数组,形状为(2,),没有批量维度,模型无法识别这是「1个包含2个特征的样本」,因此报错提示「预期形状(None, 2),但输入形状是(2,)」。

3. 平方模型为何可以用(1,)输入?

你的平方模型在第一层显式指定了input_shape=(1,),这会让Keras自动为输入添加批量维度,即模型实际期望的输入形状是(None, 1)。当你传入np.array([3])(形状(1,))时,Keras会自动将其扩展为(1, 1)(1个样本,每个样本1个特征),因此可以正常运行。不过严格来说,为了保持一致性,最好也传入二维数组np.array([[3]])。

4. 修复后的代码

将加法模型的输入改为二维数组即可解决问题,修改后的推理代码如下:

import tensorflow as tf
import numpy as np

model_add = tf.keras.models.load_model('model_add.keras')
model_sqr = tf.keras.models.load_model('model_sqr.keras')

# 为加法模型输入添加批量维度,形状变为(1,2)
add_result = model_add.predict(np.array([[3, 4]]))
# 平方模型的输入也统一改为二维格式,更规范
predicted_product = model_sqr.predict(add_result) - model_sqr.predict(np.array([[3]])) - model_sqr.predict(np.array([[4]]))
print(predicted_product/2)

你也可以用np.expand_dims来手动添加批量维度,效果相同:

add_input = np.expand_dims(np.array([3,4]), axis=0) # 形状从(2,)变为(1,2)
add_result = model_add.predict(add_input)

内容的提问来源于stack exchange,提问作者harry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:07:03