Выбор ответа Middle PyTorch на практике обновлено
Как заморозить слои
Вопрос
Как правильно заморозить бэкбон и учить только голову?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Поставить requiresgrad = False у бэкбона и передать оптимизатору только голову. requiresgrad = False не даёт считать градиенты по этим параметрам и экономит память, а передача только нужных параметров в оптимизатор исключает случайные обновления, например weight decay. eval() меняет режим слоёв, но не замораживает…
Варианты ответа
- Вызвать model.eval() у бэкбона, тогда его веса перестанут обновляться
- Поставить requires_grad = False у бэкбона и передать оптимизатору только головуправильный ответ
- Обернуть forward бэкбона в torch.no_grad() и передать оптимизатору все параметры с lr = 0.1
- Удалить бэкбон из модели и подавать на вход голове заранее посчитанные сырые картинки
Разбор
requires_grad = False не даёт считать градиенты по этим параметрам и экономит память, а передача только нужных параметров в оптимизатор исключает случайные обновления, например weight decay. eval() меняет режим слоёв, но не замораживает веса. no_grad вокруг бэкбона тоже работает для заморозки, но оптимизатор со всеми параметрами при этом создавать незачем.
- eval() не останавливает обучение весов.
- Вариант с no_grad смешивает приёмы и даёт неверный lr.
- Удаление бэкбона ломает модель.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.