Если в вашей сети есть слои, которые действуют по-разному во время логического вывода (например, torch.nn.BatchNormNd
и torch.nn.DropoutNd
, то для второго случая будут использоваться все нейроны, но масштабированные по инвертированной вероятности удержания нейронов , смотрите здесь или здесь например) и вы хотите проверить, как ваша сеть работает в настоящее время (что обычно называется шагом validation
), тогда это обязательно использовать module.eval()
.
Это обычная (и очень хорошая!) практика всегда переключаться в режим eval
при выполнении операций, подобных выводам, независимо от того, изменит ли это вашу фактическую модель.
РЕДАКТИРОВАТЬ:
Вы также должны использовать with torch.no_grad():
блок во время вывода, см. официальный учебный код , так как градиенты не нужны на этом этапе, и это расточительно вычислять их.