Выбор ответа Middle Активации и функции потерь спрашивают часто обновлено

CrossEntropyLoss в PyTorch

Вопрос

Что подавать в nn.CrossEntropyLoss в PyTorch?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сырые логиты (без softmax) и индексы классов: softmax и логарифм уже внутри. CrossEntropyLoss = logsoftmax + NLLLoss.

Варианты ответа

  1. Сырые логиты (без softmax) и индексы классов: softmax и логарифм уже внутриправильный ответ
  2. Вероятности после softmax, чтобы лосс сравнивал их с метками напрямую
  3. Логарифмы вероятностей после log_softmax и one-hot метки классов в виде float
  4. Логиты, пропущенные через сигмоиду, и индексы классов в виде float

Разбор

CrossEntropyLoss = log_softmax + NLLLoss. Если подать вероятности после softmax, softmax применится дважды: обучение будет идти, но хуже и со слабыми градиентами. Это частый баг. Метки это индексы классов (или вероятности классов для soft labels).

  • Двойной softmax портит обучение.
  • log_softmax надо подавать в NLLLoss, а не в CrossEntropyLoss.
  • Сигмоида тут вообще из другой задачи.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.