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

Keras神经网络加法预测异常:输出仅为0或1而非正确和值

解决Keras加法预测网络仅输出0/1的问题

嘿,我一眼就看出问题所在啦——你把回归任务(预测连续的和值)错误当成了分类任务来建模,导致输出被强制压缩到0-1区间,自然只能得到0或1附近的结果。下面给你一步步拆解问题和修正方案:

核心问题根源

加法预测是典型的回归任务(输出是连续数值),但你大概率在模型配置时用了分类任务的设置:

  • 输出层用了sigmoid或softmax激活函数(这类函数会把所有输出压缩到0-1区间)
  • 损失函数用了binary_crossentropy(二分类交叉熵)这类专门给分类任务用的损失

具体修正步骤

1. 调整输出层激活函数

回归任务的输出不需要做区间压缩,直接用**线性激活(linear)**就行——这也是Keras中Dense层的默认激活函数,你可以不用显式声明,或者明确写activation='linear'。

2. 更换损失函数

回归任务最适配的损失函数是均方误差(mean_squared_error),它能精准衡量预测值和真实值之间的平方差,非常适合连续值的拟合。

3. 修正后的完整代码示例

from keras.models import Sequential
from keras.layers import Dense
import numpy

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)

# load dataset(假设data.csv格式为:输入1,输入2,输出和)
dataset = numpy.loadtxt("data.csv", delimiter=",")
# 分割输入特征(X)和目标值(y)
X = dataset[:, 0:2]
y = dataset[:, 2]

# 构建回归模型
model = Sequential()
model.add(Dense(8, input_dim=2, activation='relu'))  # 隐藏层用relu没问题
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='linear'))  # 输出层用线性激活,回归任务必备

# 编译模型:用MSE损失+Adam优化器,适配回归场景
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])

# 训练模型
model.fit(X, y, epochs=1000, batch_size=10, verbose=2)

# 测试预测效果
test_inputs = numpy.array([[1,2], [3,4], [5,6]])
predictions = model.predict(test_inputs)
print("预测结果:")
for i in range(len(test_inputs)):
    print(f"{test_inputs[i][0]} + {test_inputs[i][1]} = {predictions[i][0]:.2f}")

额外优化建议

  • 数据范围适配:如果你的输入数值很大(比如几百上千),建议先把输入数据归一化到0-1区间,这样模型更容易收敛。
  • 训练参数调整:如果预测结果还是不够精准,可以增加训练轮数(比如调到2000),或者调整隐藏层的神经元数量,也可以尝试微调优化器的学习率。
  • 数据质量检查:确保你的data.csv里的标签是正确的两数之和,没有格式错误或异常值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:43:34