Напишите цикл обучения на словах
Вопрос
Опишите правильный цикл обучения и валидации на PyTorch: что и в каком порядке вызывается.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Модель и данные на одно устройство, оптимизатор и, если есть, scheduler
Трейн: model.train(), shuffle, zero_grad, forward, loss, backward, step
Валидация: model.eval(), torch.no_grad(), метрики по всем объектам
Логирование loss.item(), сохранение лучшего чекпоинта
Возврат в train() после валидации, сиды для воспроизводимости
Что могут спросить следом
- Где вызывать scheduler.step()?
- Что сохранить в чекпоинте, чтобы продолжить обучение?
Разбор
Сначала переношу модель на устройство и создаю оптимизатор с её параметрами, при необходимости scheduler. Каждая эпоха: model.train(), проход по обучающему DataLoader с shuffle=True. На шаге: батч на устройство, optimizer.zero_grad(), forward, loss, loss.backward(), при необходимости клиппинг, optimizer.step(), scheduler.step(), если расписание пошаговое. Для логов копирую loss.item(), а не сам тензор. Затем валидация: model.eval() и torch.no_grad(), проход по валидации без перемешивания и аугментаций, метрики считаю по всем объектам, а не усредняю по батчам с разным размером. Сохраняю лучший чекпоинт: state_dict модели, оптимизатора, scheduler, номер эпохи. Перед следующей эпохой снова model.train(). Фиксирую сиды для воспроизводимости.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.