eval() меняет поведение Dropout и BatchNorm, но не гарантирует детерминизм. Проверьте случайные преобразования, DataLoader, CUDA-операции, состояние модели и сборку метрик.
Представь, что ты работаешь с моделью в PyTorch и после перевода её в режим оценки eval() видишь, что метрики на фиксированном тестовом наборе из 10 000 примеров меняются при каждом запуске. Ты фиксируешь начальное состояние генераторов случайных чисел для воспроизводимости: где ещё может скрываться источник изменений? Объясни роль Dropout, BatchNorm и torch.no_grad() и назови метрики с порогами, по которым проверишь стабильность результатов.
eval() меняет поведение Dropout и BatchNorm, но не гарантирует детерминизм. Проверьте случайные преобразования, DataLoader, CUDA-операции, состояние модели и сборку метрик.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
eval() меняет поведение Dropout и BatchNorm, но не гарантирует детерминизм. Проверьте случайные преобразования, DataLoader, CUDA-операции, состояние модели и сборку метрик.
Зафиксируйте версии, веса и порядок данных. no_grad() отключает запись графа, а не случайность. Сравните несколько прогонов: долю изменившихся классов, максимальное отклонение logits и метрики. Для детерминированного FP32 можно начать с allclose(rtol=1e-5, atol=1e-6) и нуля смен классов; это диагностические, не универсальные пороги. На 10 000 объектах одна смена правильности меняет accuracy на 0,0001.
Источник: docs.pytorch.org, docs.pytorch.org.