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

神经网络实现整数加减时predict传列表报错的原因及解决方法

整数加减神经网络的预测错误问题及解决办法

错误原因

  1. 输入格式不匹配:Keras模型的predict方法要求输入必须包含批次维度,你直接传入[X,Y]是一维列表,模型无法识别这种无批次维度的输入结构,因此抛出类型错误。
  2. 原代码还有两个隐藏问题:
    • 训练减法模型时误写为model_add.fit,导致model_subtract根本没被训练,就算输入格式正确也会输出错误结果。
    • 减法模型的输出用了relu激活函数,减法结果可能为负数,而relu会把所有负数置为0,完全丢失负数结果的信息。

解决办法

  • 给输入添加批次维度:把[X,Y]改成[[X,Y]],转换成二维数组(代表1个样本的批次),让模型能正确解析输入。
  • 修正训练代码的笔误:把训练减法模型的model_add.fit改成model_subtract.fit。
  • 替换减法模型的输出激活函数:将Dense(1, activation='relu')改成Dense(1, activation='linear'),保证负数结果能正常输出。

修正后的完整代码

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np

# 示例训练数据(可根据实际需求替换)
X_train = np.random.randint(0, 100, (1000, 2))
y_train_add = X_train[:, 0] + X_train[:, 1]
y_train_sub = X_train[:, 0] - X_train[:, 1]

model_add = Sequential(
    [
        Dense(10, activation='relu'),
        Dense(1, activation='relu')
    ]
)

model_subtract = Sequential(
    [
        Dense(10, activation='relu'),
        Dense(1, activation='linear')  # 替换为线性激活,支持负数输出
    ]
)

# 训练加法模型
model_add.compile(loss='mse', optimizer='adam')
batch_size = 32
epochs = 100
model_add.fit(X_train, y_train_add, batch_size=batch_size, epochs=epochs, verbose=0)

# 训练减法模型(修正笔误)
model_subtract.compile(loss='mse', optimizer='adam')
model_subtract.fit(X_train, y_train_sub, batch_size=batch_size, epochs=epochs, verbose=0)

print("enter first num:")
x = input()

print("Enter operation:")
op = input()

print("enter second num:")
y = input()

X = int(x)
Y = int(y)

if op == "+":
    predicted_sum = model_add.predict([[X, Y]], verbose=0)  # 添加批次维度
    print(f"预测结果:{predicted_sum[0][0]:.0f}")
elif op == "-":
    predicted_sub = model_subtract.predict([[X, Y]], verbose=0)  # 添加批次维度
    print(f"预测结果:{predicted_sub[0][0]:.0f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:27:40