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

Keras神经网络精度受限求助:精度停滞或仅达0.1638

回归任务用accuracy指标?这就是你精度卡在0.1638的核心原因!

兄弟,我一眼就瞅到你代码里的致命问题——你在预测连续浮点值的回归任务里,居然用了accuracy作为评估指标!这完全是用错了工具,那个奇怪的0.1638就是这个错误导致的无意义结果。

先给你掰明白为啥:accuracy是分类任务的专属指标,比如判断一张图是猫还是狗,算的是预测正确的样本比例。但你的任务是输出连续的浮点数,模型的预测值和真实标签几乎不可能完全相等,Keras在回归场景下计算accuracy时,会默认把“预测值等于真实值”才算正确,这在回归里基本不可能,所以这个指标完全没有参考价值,那个固定的0.1638就是这种错误计算出来的垃圾数值。

先解决最紧急的问题:换掉评估指标

回归任务应该用回归类的指标,比如:

  • mae(平均绝对误差):衡量预测值和真实值的平均绝对差距
  • mse(均方误差):和你的损失函数一致,能直观反映损失变化
  • 或者自定义r2_score(R平方):衡量模型对数据的拟合程度

修改你的compile代码:

# 换成Adam优化器(比SGD更容易收敛),指标用mae
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])

这时候你看到的指标就有实际意义了,不会再出现那个固定的奇怪数值。

再排查模型和数据的其他问题

解决完指标问题,再来看其他可能影响性能的点:

1. 模型结构的激活函数缺失

你的前两层Dense都没加激活函数!默认是线性激活,这相当于把多个线性层堆叠在一起,和单个线性层的表达能力没区别,模型根本学不到非线性关系。必须给中间层加上非线性激活,比如relu或者elu:

model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(feature_count,)))  # 加激活函数
model.add(Dense(32, activation='relu'))  # 加激活函数
model.add(Dropout(0.2))
# 输出层:你的标签是0-1区间,用sigmoid刚好匹配输出范围,或者用线性激活(无activation参数)
model.add(Dense(1, activation='sigmoid'))

2. 输出层激活函数的选择

你之前用了elu,它的输出范围是(-∞, +∞),但你的标签是0-1的正数,模型可能输出负数,导致误差变大。换成sigmoid(输出0-1)或者直接用线性激活(输出任意实数,适合回归)会更合理。

3. 优化器的问题

SGD虽然经典,但收敛速度慢,尤其是在没有动量的情况下。如果坚持用SGD,试试加动量:

from keras.optimizers import SGD
sgd = SGD(learning_rate=0.01, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd, metrics=['mae'])

更推荐直接用Adam优化器,它自带自适应学习率,大部分场景下比SGD更容易收敛,不用手动调学习率调得头疼。

4. 数据方面的检查

  • 归一化是否正确:确保你是用训练集的统计量(均值、方差/最大最小值)来转换测试集,不能用测试集的数据计算归一化参数,否则会导致数据泄露,模型泛化能力差。
  • 特征与标签的相关性:先做个简单的相关性分析(比如皮尔逊相关系数),看看你的输入特征和输出标签有没有关联。如果特征和标签完全无关,再怎么调模型也没用,得重新筛选特征。
  • 数据量是否足够:如果训练样本太少,模型根本学不到规律,容易过拟合或者欠拟合。如果样本量小,可以试试简化模型结构,或者用交叉验证来评估性能。

总结

先把accuracy指标换掉,这是你看到奇怪精度值的根本原因。然后按照上面的步骤调整模型结构、激活函数和优化器,再检查数据的问题,应该就能看到模型性能的正常变化了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:35:05