Почему моя нейронная сеть, которая должна выполнять регрессию, всегда возвращает нули при прогнозировании, а потери остаются прежними? - PullRequest
0 голосов
/ 14 июля 2020
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df, y)
X_train = torch.from_numpy(X_train.to_numpy()).float()
X_test = torch.from_numpy(X_test.to_numpy()).float()
y_test = torch.squeeze(torch.from_numpy(y_test.to_numpy()).float())
y_train = torch.squeeze(torch.from_numpy(y_train.to_numpy()).float())

import torch.nn.functional as F
class Net(nn.Module):
  def __init__(self):
    super().__init__()
    self.linear1 = nn.Linear(51, 30)
    self.linear2 = nn.Linear(30, 30)
    self.linear3 = nn.Linear(30, 20)
    self.linear4 = nn.Linear(20, 10)
    self.linear5 = nn.Linear(10, 1)
  def forward(self, x):
    pred = F.relu(self.linear1(x))
    pred = F.relu(self.linear2(pred))
    pred = F.relu(self.linear3(pred))
    pred = F.relu(self.linear4(pred))
    pred = F.relu(self.linear5(pred))
    return pred

model = Net()
epochs = 20
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr = 0.01)
losses = []
for epoch in range(epochs):
  for (data, target) in zip(X_train, y_train):
    y_pred = model(data.view(-1,51))
    optimizer.zero_grad()
    loss = criterion(y_pred, target.view(y_pred.shape))
    loss.backward()
    optimizer.step()
  losses.append(loss)

После того, как я тренирую эту модель и пытаюсь предсказать новые результаты, модель всегда предсказывает 0. Кроме того, когда я пытаюсь построить график потерь, он показывает прямую линию с нулевым наклоном и без улучшения потерь. . Почему это происходит и как мне исправить мою модель, чтобы она предсказывала правильные результаты и потери уменьшались go, как в обычной модели глубокого обучения?

...