PyTorch简单线性回归模型训练失败,请求原因排查
问题排查与修复
核心问题:学习率设置过高
你的代码中优化器的学习率设为lr=1e2(即100),这对于线性回归这类简单任务来说过大。当学习率过高时,参数更新的步长会远超合理范围,直接导致模型参数跳到损失极大的区域,后续梯度计算出现异常(如无穷大或NaN),最终使得优化器无法继续更新参数——这就是参数始终保持初始值、损失值固定不变的原因。
修复方法
将学习率调低至合理范围,比如lr=1e-2(0.01)或lr=5e-3(0.005),可根据训练情况微调。修改后的优化器初始化代码如下:
optimiser = optim.SGD(params=model.parameters(), lr=1e-2)
验证效果
修改后重新运行代码,你会看到损失值逐步下降,模型参数也会向真实的weight=0.7、bias=0.3逼近。例如训练到200epoch时,参数会接近目标值,损失也会降到较低水平。
额外调试建议
- 训练过程中可打印参数实时变化,确认更新是否正常:
if epoch == 1 or epoch % 10 == 0: print(f"Epoch: {epoch:3} | Loss: {loss:.2f} | Test loss {test_loss:.2f}") print(f"Current params: {model.state_dict()}") - 检查损失值是否出现
NaN或无穷大,这通常是学习率过高的典型信号。
内容的提问来源于stack exchange,提问作者Celdor
相关产品推荐
相关产品推荐

