【问题标题】:Linear Regresion with PyTorch gives NaN valuesPyTorch 的线性回归给出 NaN 值
【发布时间】:2020-06-10 20:28:12
【问题描述】:

我正在使用 PyTorch 学习回归(Profit vs R&D)。我创建了以下脚本:

url =https://raw.githubusercontent.com/LakshmiPanguluri/Linear_Multiple_Regression/master/50_Startups.csv
starup = pd.read_csv(url)

profit = np.array(starup['Profit']).reshape(-1,1)
rd = np.array(starup['R&D Spend']).reshape(-1,1)
marketing = np.array(starup['Marketing Spend']).reshape(-1,1)
administration = np.array(starup['Administration']).reshape(-1,1)

profit_torch = torch.from_numpy(profit).float()
rd_torch = torch.from_numpy(rd).float().requires_grad_(True)

model = nn.Linear(1,1)
loss_function = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.010)

losses = []
iterations = 1000
for i in range(iterations):
  pred = model(rd_torch)
  loss = loss_function(pred, profit_torch)
  losses.append(loss.data)

  optimizer.zero_grad()
  loss.backward()
  optimizer.step()

print(loss)
plt.plot(range(iterations), losses)
tensor(nan, grad_fn=<MeanBackward0>)

我的问题是为什么它给了我一个带有 NaN 值的张量,以及为什么每次迭代中损失都在增长。

损失图是一条斜率为正的线:

Link to the project I've been doing

【问题讨论】:

    标签: python pytorch linear-regression nan gradient-descent


    【解决方案1】:

    我建议进行以下更改:

    变更一:移除requires_grad_(True)

    rd_torch = torch.from_numpy(rd).float()
    

    更改2:在训练循环之前包括model.train():

    ...
    model.train()
    for i in range(iterations):
    ...
    

    变化3:使用loss.item()

    losses.append(loss.item())
    

    【讨论】:

      【解决方案2】:

      我确定您已经解决了这个问题,但其他人也遇到了同样的问题。您必须校准模型。

      尝试大量迭代示例:

      迭代次数=50000

      还有一个小的学习率:

      lr=0.0000010

      它对我有用。

      【讨论】:

      • 以后可以添加更详细的答案吗?
      猜你喜欢
      • 2017-12-16
      • 2019-08-11
      • 1970-01-01
      • 2019-04-12
      • 2017-01-24
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多