Pytorch梯度下降法不断给我发送NaNs均方误差

hmtdttj4  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(152)

我试图在课程的框架内应用梯度下降法来估计线性模型。我的代码如下:

  1. model = torch.nn.Linear(1,1)
  2. myModel = model(X)
  3. ds = torch.utils.data.TensorDataset(X, Y)
  4. dl = torch.utils.data.DataLoader(ds)
  5. optimiser = torch.optim.SGD(model.parameters(), lr=0.01)
  6. loss = torch.nn.functional.mse_loss
  7. for epoch in range(100):
  8. for (Xb, yb) in dl:
  9. yb_pred = model(Xb)
  10. c_loss = loss(yb_pred, yb)
  11. print(c_loss)
  12. optimiser.zero_grad()
  13. c_loss.backward()
  14. optimiser.step()

但是它一直打印NaNs,我不明白。我在实现中是否犯了错误?我有以下输出(x多次):
Tensor(nan,grad_fn=)

eqfvzcg8

eqfvzcg81#

您的代码没有问题,但是Nan值可以通过梯度爆炸来解释,梯度爆炸取决于数据XY。您可以尝试使用较低的学习率(1 e-3或1 e-4)。
例如,如果你用这个玩具线性例子进行测试:

  1. X = torch.randn(100, 1)
  2. Y = X * 2 + 3

损失将很快收敛到0。

相关问题