Выбор ответа Middle PyTorch на практике обновлено

Как заморозить слои

Вопрос

Как правильно заморозить бэкбон и учить только голову?

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

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

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

Коротко

Правильный ответ: Поставить requiresgrad = False у бэкбона и передать оптимизатору только голову. requiresgrad = False не даёт считать градиенты по этим параметрам и экономит память, а передача только нужных параметров в оптимизатор исключает случайные обновления, например weight decay. eval() меняет режим слоёв, но не замораживает…

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

  1. Вызвать model.eval() у бэкбона, тогда его веса перестанут обновляться
  2. Поставить requires_grad = False у бэкбона и передать оптимизатору только головуправильный ответ
  3. Обернуть forward бэкбона в torch.no_grad() и передать оптимизатору все параметры с lr = 0.1
  4. Удалить бэкбон из модели и подавать на вход голове заранее посчитанные сырые картинки

Разбор

requires_grad = False не даёт считать градиенты по этим параметрам и экономит память, а передача только нужных параметров в оптимизатор исключает случайные обновления, например weight decay. eval() меняет режим слоёв, но не замораживает веса. no_grad вокруг бэкбона тоже работает для заморозки, но оптимизатор со всеми параметрами при этом создавать незачем.

  • eval() не останавливает обучение весов.
  • Вариант с no_grad смешивает приёмы и даёт неверный lr.
  • Удаление бэкбона ломает модель.

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

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