Loss не меняется

Пишу нейросеть, которая по массиву нулей и единиц производит классификацию (всего два класса). Тренировочные данные выглядят так:

входные данные

Причём каждый training-example имеет метку 1 (y = 1), негативные примеры в тренировке не участвуют. Строю нейросеть в pytorch, вот код:

import torch as torch
import components.makeDataset as datas
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import TensorDataset, DataLoader


class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(datas.countOfIngrs, 32)
        self.fc2 = nn.Linear(32, 32)
        self.fc3 = nn.Linear(32, 1)

    def forward(self, x):
        x = self.fc1(x)
        x = self.fc2(x)
        x = self.fc3(x)
        return F.log_softmax(x, dim=1)


net = Net()

trainX = torch.Tensor(datas.dataset[:10, :])
Y = torch.ones(datas.countOfPastas)
testX = torch.Tensor(datas.dataset[10:, :])

trainX = trainX.type(torch.float)
Y = Y.type(torch.float)
testX = testX.type(torch.float)

trainset = torch.utils.data.DataLoader(TensorDataset(trainX, Y[:10]), batch_size=10, shuffle=True)
testset = torch.utils.data.DataLoader(TensorDataset(testX, Y[10:]), batch_size=10, shuffle=False)

loss_function = nn.L1Loss()
optimizer = optim.Adam(net.parameters(), lr=1)

for epoch in range(30):  # три полных прохода по нашим данным
    for data in trainset:  # `data` это батч наших данных
        X, y = data  # X это батч свойств, y это батч целевых переменных.
        net.zero_grad()  # устанавливаем значение градиента в 0 перед вычислением функции потерь.
        output = net(X.view(-1, datas.countOfIngrs))  # передаем выпрямленный батч
        loss = loss_function(output, y)  # вычисляем функцию потерь
        loss.backward()  # передаем это значение назад по сети
        optimizer.step()  # пытаемся оптимизировать значение весов исходя из потерь и градиента
    print(loss)  # выводим на экран значение функции потерь

К сожалению, loss стоит в единице и никак не меняется.

вывод

Что не так?


Ответы (1 шт):

Автор решения: Марат Гизетдинов

Решением оказалось снижение LR

→ Ссылка