Документация nn.CrossEntropyLoss говорит,
Этот критерий объединяет nn.LogSoftmax () и nn.NLLLoss () в одном классе.
Я предлагаю вам использовать CrossEntropyLoss
в качестве критерия потерь.Однако вы можете преобразовать выходные данные вашей модели в значения вероятности с помощью функции softmax .
Обратите внимание, , вы всегда можете поиграть с выходными значениями вашей модели, вам не нужно менять для этого критерий потерь.
Но если вы все еще хотитедля использования Softmax()
в вашей сети, тогда вы можете использовать NLLLoss()
в качестве критерия потерь, применять только log () до подачи вывода модели в функцию критерия.Аналогично, если вы используете LogSoftmax
вместо этого в своей сети, вы можете применить exp () для получения значений вероятности.
Обновление :
Чтобы использовать log()
на выходе Softmax
, выполните:
torch.log(prob_scores + 1e-20)
Добавляя очень маленькое число (1e-20) к prob_scores
, мы можем избежать проблемы log(0)
.