Линейная регрессия с PyTorch дает значения NaN - PullRequest
0 голосов
/ 27 февраля 2020

Я изучаю регрессию (Profit против R&D) с помощью PyTorch. Я создал следующий сценарий:

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 и почему потери растут на каждой итерации.

График потерь линия с положительным наклоном:

The plot of the losses is a line with a positive slope

Ссылка на проект, которым я занимаюсь

1 Ответ

0 голосов
/ 27 февраля 2020

Я предлагаю следующие изменения:

Изменение 1: перенастройка requires_grad_(True)

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

Изменение 2: включая model.train() перед тренировкой l oop:

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

Изменение 3: использование loss.item()

losses.append(loss.item())
...