Несогласованные результаты между функцией потерь PyTorch для `reduction=mean`Python

Программы на Python
Anonymous
Несогласованные результаты между функцией потерь PyTorch для `reduction=mean`

Сообщение Anonymous »

В частности, следующий блок кода сравнивает использование nn.CrossEntropyLoss(reduction='mean') с loss_fn = nn.CrossEntropyLoss(reduction='none'), за которым следует loss.mean() . Результаты на удивление разные.
import torch
import torch.nn as nn

# Generate random predictions and labels
preds = torch.randn(8, 10, 100)
labels = torch.randint(high=100, size=(8, 10))
# replace some values with -100
labels[torch.rand(labels.shape) < 0.2] = -100

preds, labels = preds.view(-1, 100), labels.view(-1)

def compare_losses(preds, labels):
# Define loss functions
loss_fn = nn.CrossEntropyLoss(reduction='none')
loss_fn_mn = nn.CrossEntropyLoss(reduction='mean')

# Compute losses
losses = loss_fn(preds, labels)
weighted_loss = losses.mean()

# Compute mean loss using built-in mean reduction
loss = loss_fn_mn(preds, labels)

# Print and check if the results are identical
return torch.isclose(loss, weighted_loss), loss.item(), weighted_loss.item()

compare_losses(preds, labels)

Возвраты
(tensor(False), 4.997840404510498, 3.748380184173584)


Подробнее здесь: https://stackoverflow.com/questions/787 ... ction-mean

Вернуться в «Python»