Выбор ответа Junior PyTorch на практике спрашивают часто обновлено
Зачем zero_grad
Вопрос
Что будет, если в цикле обучения забыть optimizer.zero_grad()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Градиенты будут складываться с предыдущими шагами, и обновления станут неверными. В PyTorch backward прибавляет градиенты к .grad.
Варианты ответа
- Градиенты будут складываться с предыдущими шагами, и обновления станут невернымиправильный ответ
- Модель не сможет вычислить forward, пока в .grad лежат старые значения
- PyTorch бросит исключение при следующем loss.backward() о повторном графе
- Ничего: градиенты обнуляются автоматически после каждого вызова optimizer.step()
Разбор
В PyTorch backward прибавляет градиенты к .grad. Это удобно для накопления, но в обычном цикле градиенты надо обнулять перед каждым backward (или после step). По умолчанию zero_grad ставит .grad в None.
- Forward от этого не зависит.
- Исключения не будет, ошибка тихая.
- step() градиенты не обнуляет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.