Я прочитал все посты здесь о model.train()
и так и не понял, что с ним. В частности, когда я использую предварительно обученную модель, такую как DenseNet или VGG, со всеми параметрами, замороженными рядом с последним слоем, без использования исключения или пакетной нормализации, потери при обучении начинаются намного меньше при использовании model.train()
, но затем уменьшаются примерно на том же уровне. скорость как когда без него.
Почему?
Вариантов всего три: просто model(inputs)
, model.train()(inputs)
и model.eval()(inputs)
. Единственная разница в том, что при использовании .eval()
все исключения и нормализация игнорируются, потому что они используются только для обучения, а не для тестирования.
Теперь вы спросили, почему он все еще тренируется, когда вы просто используете model(inputs)
? Потому что, когда вы не используете ни train()
, ни eval()
, модель автоматически будет находиться в режиме обучения. Итак, model(inputs)
это то же самое, что и model.train()(inputs)
.