Если вам нужна только кросс-энтропия , вы можете воспользоваться тем преимуществом, который определил PyTorch.
import torch.nn.functional as F
loss_func = F.cross_entropy
предложить более оптимизированную реализацию
PyTorch имеет F.
функций потерь, но вы можете легко написать свою собственную, используя простой Python.
PyTorch автоматически создаст быстрый графический процессор или векторизованный код процессора для вашей функции.
Итак, вы можете проверить оригинальную реализацию PyTorch, но я думаю, что это:
def log_softmax(x):
return x - x.exp().sum(-1).log().unsqueeze(-1)
И здесь - исходная реализация кросс-энтропийной потери, теперь вы можете просто изменить:
nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
К чему-то, что вам нужно, и у вас это есть.