Выбор ответа Middle Инициализация и нормализация спрашивают часто обновлено

BatchNorm на инференсе

Вопрос

Модель с BatchNorm на валидации предсказывает по-разному один и тот же объект в зависимости от того, с какими объектами он в батче. В чём ошибка?

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

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

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

Коротко

Правильный ответ: Забыли model.eval(): BatchNorm берёт статистики батча, а не накопленные. В режиме train BatchNorm нормирует по текущему батчу, поэтому предсказание зависит от соседей. model.eval() переключает его на накопленные скользящие статистики (и выключает dropout). nograd экономит память, но режим слоёв не меняет. -…

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

  1. Не вызвали torch.no_grad(), и BatchNorm обновляет статистики по батчу
  2. Слишком маленький learning rate, и статистики BatchNorm не сошлись
  3. Нужно перемешивать валидацию, чтобы состав батчей был случайным
  4. Забыли model.eval(): BatchNorm берёт статистики батча, а не накопленныеправильный ответ

Разбор

В режиме train BatchNorm нормирует по текущему батчу, поэтому предсказание зависит от соседей. model.eval() переключает его на накопленные скользящие статистики (и выключает dropout). no_grad экономит память, но режим слоёв не меняет.

  • no_grad не влияет на поведение BatchNorm.
  • lr тут ни при чём.
  • Перемешивание не устраняет зависимость от батча.

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

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

Термины по теме