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

实现加减运算的神经网络运行不稳定及负数输出异常求助

问题分析与修复方案

问题1:运行结果不稳定

核心原因

  1. 训练数据仅覆盖0-1的浮点数范围,但实际测试输入的是整数,输入分布完全超出模型的训练范围,模型无法泛化到陌生数据
  2. 神经网络的参数初始化是随机的,部分初始状态会导致模型陷入局部最优(比如全0输出的死区)
  3. 训练轮次和数据量的搭配可能不足,导致部分训练过程中模型未充分收敛

修复措施

  • 给TensorFlow和NumPy设置固定随机种子,消除初始化随机性带来的结果波动
  • 统一训练与测试的输入分布:要么把测试输入归一化到0-1区间,要么扩展训练数据的范围
  • 适当增加训练轮次,确保模型充分收敛

问题2:减法结果异常(负数输出正数)

核心原因

减法模型的输出层使用了relu激活函数,ReLU会将所有小于0的数值直接截断为0,所以当两数相减结果为负时,模型只能输出0或极小的正数,完全不符合预期。

修复措施

将减法模型的输出层激活函数改为线性激活(Dense层默认就是线性激活,直接去掉activation='relu'即可)


修改后的完整代码

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

# 固定随机种子,消除初始化随机性
np.random.seed(42)
tf.random.set_seed(42)

num_train = 2000
# 扩展训练数据范围,覆盖常见整数输入(比如0-10)
X_train = np.random.uniform(0, 10, (num_train, 2))
y_train_add = X_train[:, 0] + X_train[:, 1]
y_train_subtract = X_train[:, 0] - X_train[:, 1]

model_add = Sequential(
    [
        Dense(16, activation='relu'),
        Dense(1, activation='relu')  # 加法结果非负,ReLU没问题
    ]
)

model_subtract = Sequential(
    [
        Dense(16, activation='relu'),
        Dense(1)  # 去掉ReLU,用默认线性激活,支持负数输出
    ]
)

batch_size = 32
epochs = 150

model_add.compile(loss='mse', optimizer='adam')
model_add.fit(X_train, y_train_add, batch_size=batch_size, epochs=epochs, verbose=1)

model_subtract.compile(loss='mse', optimizer='adam')
model_subtract.fit(X_train, y_train_subtract, batch_size=batch_size, epochs=epochs, verbose=1)

while True:
    print("enter first num:")
    x = input()
    if x == "end":
        break

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

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

    X = float(x)
    Y = float(y)

    # 这里因为训练数据是0-10,所以不需要归一化,如果训练数据是0-1,这里要做X/10, Y/10
    if op == "+":
        predicted_sum = model_add.predict(np.array([[X, Y]]), verbose=0)
        print(f"预测结果: {predicted_sum[0][0]:.2f}")
    elif op == "-":
        predicted_diff = model_subtract.predict(np.array([[X, Y]]), verbose=0)
        print(f"预测结果: {predicted_diff[0][0]:.2f}")

内容的提问来源于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:34:59