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

Keras输入输出形状异常:输入(120,3)报错、输出120个值如何解决

问题根源

  • 输入维度适配问题:Keras模型默认要求输入的第一个维度为批量维度,你定义的Input(shape=(120, 3))省略了批量维度,因此实际输入必须满足(批量大小, 120, 3)的形状,直接传入单样本的(120, 3)会因为缺维度报错。
  • 结构设计问题:Dense层仅对张量的最后一个维度做计算,不会修改前面的维度,所以当前模型的输出形状为(批量大小, 120, 1),每个样本会返回120个对应每个序列位置的输出,不符合你要单个预测值的需求。

调整方案

1. 修改模型结构,实现单样本输出单个预测值

在两个Dense层之间加一层Flatten()或者GlobalAveragePooling1D()来消去120的序列维度即可:

model = keras.Sequential([
    keras.Input(shape=(120, 3)),
    layers.Dense(20, activation='relu'),
    # 新增层消去序列维度,二选一即可
    layers.Flatten(), # 直接展平所有序列特征,保留全部信息
    # layers.GlobalAveragePooling1D(), # 对序列维度做全局平均聚合,参数更少、抗过拟合性更好
    layers.Dense(1, activation='sigmoid'),
])

修改后模型的输出形状为(批量大小, 1),单样本输入(1,120,3)就会返回单个预测值。

2. 单样本推理

调整结构后,把原始输入(120,3)加一个批量维度即可正常推理,两种写法都可以:

# 写法1:直接封装为数组
input = np.array([original_input]) # 形状变为(1,120,3)
pred = model.predict(input)[0] # 取第一个元素即为单个预测值

# 写法2:用扩展维度API
input = np.expand_dims(original_input, axis=0)

3. 批量推理

如果你有N个形状为(120,3)的样本,直接把它们堆叠成形状为(N, 120, 3)的张量输入模型即可,输出会是(N,1)的数组,每个元素对应一个样本的预测值:

# 假设samples是样本列表,每个元素都是(120,3)的数组
batch_input = np.stack(samples, axis=0) # 形状变为(N,120,3)
preds = model.predict(batch_input) # 输出形状(N,1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:05