train()/eval() переключают режимы слоёв вроде Dropout и BatchNorm: стохастика и running stats ведут себя по-разному.
Разбор
- Не отключают autograd сами по себе.
- На валидации почти всегда
eval() + no_grad().
- Забытый train после eval портит BN/Dropout.
- Рекурсивно применяется ко всем submodule.
Итог
train/eval — режим слоёв, не замена no_grad.