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

TensorFlow线性回归训练自定义数据集初始损失过高原因问询

根本原因

这是输入数据尺度不匹配+未做归一化导致的正常现象,和模型结构、训练配置本身无关:

  • 你构造的测试集数值量级极小:特征范围是-714,标签范围是324,全是十几以内的小数值。Keras全连接层默认用Glorot均匀初始化,权重初始值都是围绕0的极小随机数,模型初始输出基本落在0附近,和小范围标签的绝对误差天然就小,初始MAE自然处于低区间。
  • 薪资数据集的标签是千/万级别的大数值:薪资范围从2250到20000,特征(工作年限)范围是0~15。初始阶段模型输出还是在0附近,和几千上万的真实薪资算MAE,初始值到800完全符合预期,不是代码bug。
处理方案
  • 先不用改模型,跑20个epoch观察损失曲线:如果损失能稳定快速下降,说明只是初始值尺度问题,不影响最终收敛结果,只是前期损失数值看起来大而已。
  • 如果想压低初始损失、加快训练收敛速度,在把数据喂给模型前做标准化即可,参考代码:
from sklearn.preprocessing import StandardScaler

# 分别对特征、标签做z-score标准化
x_scaler = StandardScaler()
X_train = x_scaler.fit_transform(experience.values.reshape(-1, 1))
y_scaler = StandardScaler()
y_train = y_scaler.fit_transform(salary.values.reshape(-1, 1))

# 用缩放后的数据训练
model.fit(X_train, y_train, epochs=150)
# 推理预测后,记得用y_scaler.inverse_transform把结果转换回真实薪资量级
  • 额外提个优化点:工作年限和薪资是近似线性关系,你现在用的50神经元+ELU激活的结构对于这个任务过于复杂,单特征线性回归用1个不带激活函数的Dense层就足够拟合,复杂结构反而容易在这个17条样本的小数据集上过拟合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:39:41