Pytorch может предоставить нам два способа переключения между режимами обучения и оценки (вывода): model.train() и model.eval().
Обычное использование: пишите model.trian() перед началом обучения и model.eval() при тестировании.
в использовании pytorch При построении нейронной сети в процессе обучения над программой будет добавлено предложение model.train(()). ),Функциядавать возможность batch normalization и dropout 。
Если в модели есть слой BN (Пакетный Normalization)и Dropout ,нужно быть внутриво время тренировки添加 model.train( )。
model.train( ) это гарантия BN 层能够использовать到каждый пакет данныхизиметь в видуидисперсия。对于 Dropout,model.train( ) 是Возьмите случайную частьСетевое подключение для обучения и обновления параметров。
model.eval( )из Функция不давать возможность Batch Normalization и Dropout。
Если модель имеет BN Слой (Пакет Normalization)и Dropout,существоватьво время тестирования添加 model.eval( )。
model.eval( ) это гарантия BN 层能够использоватьВсе данные о тренировкахизиметь в видуидисперсия,Прямо сейчастест Следите за тем, чтобы в процессе BN Слой среднего и дисперсии остается неизменным. для Dropout,model.eval( ) 是利использовать到了всесетевое подключение,То есть нейроны не отбрасываются случайным образом.
После тренировки train После образца сгенерированная модель model Пришло время протестировать образец. существовать model(test) Прежде вам нужно добавить model.eval( ), в противном случае с входными данными он будет менять веса, даже если он не обучен. Это model Содержит BN Слой Dropout природа устроила.
eval( ) Когда, питорч будет автоматически BN и DropOut Исправлено: среднее значение не будет взято, но будет использоваться обученное значение.
В противном случае однажды test из batch_size Если он слишком мал, это будет легко BN Слои вызывают большие искажения цвета в сгенерированном изображении. оценка( ) существовать非训练из Пришло время добавитьиз,Нет такого кода,Некоторые значения сетевого Слойза изменятся.,не будет исправлено,Каждый раз, когда ваша нейронная сеть генерирует результат, результат не фиксируется.,Качество сборки может быть хорошим, а может быть и плохим. То есть,Используйте model.eval() в процессе тестирования.,В это время нейронная сеть будетНаследовать batch normalization из значения без использования дропаута.
Если модель имеет BN Слой (Пакет Normalization)и Dropout, необходимо добавить во время обучения model.train(), добавлен во время тестирования model.eval( )。
в model.train( ) это гарантия BN Для слоякаждый пакет данныеизменительная дисперсия, в то время как model.eval( ) это гарантия BN использовать Все данные о тренировочное среднее и дисперсия;
Для Dropout model.train() случайным образом выбирает часть сетевых подключений для обучения и обновления параметров, а model.eval() использует все сетевые подключения.
Dropout часто используется для подавления переобучения.
При настройке Dropout, torch.nn.Dropout(0.5), здесь из 0.5 Относится к слою (слою) и нейронам на каждой итерации. время тренировки будут появляться случайным образом 50% из Возможность отбрасывается (деактивируется) и не участвует в обучении. То есть данные предыдущего слоя уменьшаются вдвое.
[1]
Какова функция метода train() в PyTorch: https://www.yisu.com/zixun/518049.html
[2]
【pytorch】model.train()иmodel.evel()изиспользовать法: https://blog.csdn.net/qq_37791134/article/details/108122202
[3]
net.eval() в Pytorch иnet.train()из Использование: https://www.jianshu.com/p/822d9ae0169d
[4]
Примечания к исследованию Pytorch 11 ---- model.train() и model.eval() при использовании、Dropoutпринцип、функция активации relu, sigmiod, tanh、Краткий анализ nn.Linear、Выведите весь метод тензориз: https://www.cnblogs.com/luckyplj/p/13424561.html
[5]
Хорошая статья: Pytorch: использование и разница model.train() и model.eval(), а также model.eval() и torch.no_grad() и разница: https://zhuanlan.zhihu.com/p/357075502
Источник: Кодовая сеть.
Автор: qgyh