Quasi-Newton方法实现异常,训练后预测值与测试值完全不符
问题根源分析
- 输出层激活函数选择错误:当前任务为回归任务,输出层使用
Sigmoid激活函数会将输出强制限制在(0,1)区间,就算你对标签做了对数缩放,也无法保证标签范围完全匹配该区间,且Sigmoid两端饱和特性易引发梯度消失,无法拟合x2的三次方强非线性关系。建议将输出层激活函数替换为线性激活,或者不设置激活函数。 - 训练逻辑完全错误:你先后执行了三次训练操作:首先调用
train方法在训练集训练10轮,接着调用fit方法在训练集重复训练,最后又调用fit方法在验证集上训练。在验证集上调用fit方法会直接用验证集数据更新模型权重,覆盖之前从训练集学到的规律,导致模型完全无法泛化到未知数据,甚至直接打乱权重分布。 - 未执行标签逆变换:你对输出标签做了对数缩放,预测得到的结果是对数空间的数值,需要执行对应的逆变换(指数运算)还原到原始数值空间后,再和原始验证集标签做对比,否则两者数值范围完全不匹配,结果自然不符。
- 训练轮次不足:仅设置10轮训练完全不足以让模型收敛到合理的参数范围,建议先将训练轮次提升到100~500轮,观察损失下降情况再调整。
- 网络容量不足:仅使用1层3个神经元的隐藏层,拟合能力不足以覆盖x1线性项+x2三次方项的组合关系,可适当提升隐藏层神经元数量,或者新增1层隐藏层提升模型拟合能力。
内容的提问来源于stack exchange,提问作者quasi_neutron
相关产品推荐
相关产品推荐

