Я использую потери линейной регрессии PyTorch, и моя потеря SGD не сходится.Вариант использования -
- Я использую набор данных MNIST и реализую классификацию изображений для классификации рукописных цифр 0 и 1.
- Затем с использованием модели логистической регрессии:
model = nn.Linear(input_size,num_classes)
- Создана пользовательская функция потерь.
- Обучение модели, в которой я конвертировал метки из 0,1 в -1,1.Преобразование меток от 0,1 до -1,1
- Определение потерь.
total_step = len(train_loader)
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
# Reshape images to (batch_size, input_size)
images = images.reshape(-1, 28*28)
#Convert labels from 0,1 to -1,1
labels = Variable(2*(labels.float()-0.5))
# Forward pass
outputs = model(images)
# we need maximum value of two class prediction
oneout = torch.max(outputs.data,1)[0]
loss = loss_criteria(oneout, labels)
# Backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 100 == 0:
print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'
.format(epoch+1, num_epochs, i+1, total_step, loss.item()))
Выход потерь: 0,8445,0,6883,0,7976,0,8133,0,8289,0,7195.Как вы заметили, потеря не сходится.Ожидаемый результат: 0,8445,0,8289,0,8133,0,7976,0,7195,0,6883 до нуля ....