nn.CrossEntropyLoss, F.softmax, F.log_softmax, F.nll_loss()
from fastai.vision.all import *
batch_size = 5
n_classes = 3
W = torch.randn(9, n_classes)
b = torch.randn(1)
X = torch.randn(batch_size, 9)
y = F.relu(X@W + b)
y.shape, y
target {0,1,2}
t = torch.empty(batch_size, dtype=torch.long).random_(n_classes)
t
loss = nn.CrossEntropyLoss()(y, t)
loss
F.nll_loss(F.log_softmax(y, dim=1), t)
y.softmax(dim=1)
y.softmax(dim=1).sum(dim=1)
y.log_softmax(dim=1).sum(dim=1)
y.softmax(dim=1).log().sum(dim=1)
F.nll_loss(y.softmax(dim=1).log(), t)
y0 = y.softmax(dim=1)
y0 = y0.log()
y0 = y0[range(batch_size), t.tolist()]
y0 = -y0.mean()
y0
nn.CrossEntropyLoss()(y, t)