Выбор ответа Middle Активации и функции потерь спрашивают часто обновлено
CrossEntropyLoss в PyTorch
Вопрос
Что подавать в nn.CrossEntropyLoss в PyTorch?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сырые логиты (без softmax) и индексы классов: softmax и логарифм уже внутри. CrossEntropyLoss = logsoftmax + NLLLoss.
Варианты ответа
- Сырые логиты (без softmax) и индексы классов: softmax и логарифм уже внутриправильный ответ
- Вероятности после softmax, чтобы лосс сравнивал их с метками напрямую
- Логарифмы вероятностей после log_softmax и one-hot метки классов в виде float
- Логиты, пропущенные через сигмоиду, и индексы классов в виде float
Разбор
CrossEntropyLoss = log_softmax + NLLLoss. Если подать вероятности после softmax, softmax применится дважды: обучение будет идти, но хуже и со слабыми градиентами. Это частый баг. Метки это индексы классов (или вероятности классов для soft labels).
- Двойной softmax портит обучение.
- log_softmax надо подавать в NLLLoss, а не в CrossEntropyLoss.
- Сигмоида тут вообще из другой задачи.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Активации и функции потерь»
- Эволюция активаций
- Кросс-энтропия из логитов
- Устойчивый softmax
- Посчитайте softmax
- GELU и SiLU
- Huber loss
- MSE для классификации
- Активация на выходе