我试图在课程的框架内应用梯度下降法来估计线性模型。我的代码如下:
model = torch.nn.Linear(1,1)
myModel = model(X)
ds = torch.utils.data.TensorDataset(X, Y)
dl = torch.utils.data.DataLoader(ds)
optimiser = torch.optim.SGD(model.parameters(), lr=0.01)
loss = torch.nn.functional.mse_loss
for epoch in range(100):
for (Xb, yb) in dl:
yb_pred = model(Xb)
c_loss = loss(yb_pred, yb)
print(c_loss)
optimiser.zero_grad()
c_loss.backward()
optimiser.step()
但是它一直打印NaNs,我不明白。我在实现中是否犯了错误?我有以下输出(x多次):
Tensor(nan,grad_fn=)
1条答案
按热度按时间eqfvzcg81#
您的代码没有问题,但是Nan值可以通过梯度爆炸来解释,梯度爆炸取决于数据
X
和Y
。您可以尝试使用较低的学习率(1 e-3或1 e-4)。例如,如果你用这个玩具线性例子进行测试:
损失将很快收敛到0。