Pytorch: model.train and model.eval


 

model.train() :启用 BatchNormalization 和 Dropout

model.eval() :不启用 BatchNormalization 和 Dropout

# Dropout能够克服Overfitting,在每个训练Batch中,通过忽略一半的特征检测器,可以减少过拟合现象

"这样说不完全对哈。对于bn,train状态会更新affine参数,还有mean, std. Val不更新,但是还是要计算的"   ---- 立夏之光

 

with torch. no_grad()  # 不保存中间状态和梯度,省显存 

 

 

https://blog.csdn.net/Z_lbj/article/details/79672888

主要是针对model 在训练时和评价时不同的 Batch Normalization  和  Dropout 方法模式。

 

https://blog.csdn.net/jinxin521125/article/details/78435899

eval()时,pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。

不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大。

 

Reference

1 Pytorch model.train model.eval

 

训练完train_datasets之后,model要来测试样本了。在model(test_datasets)之前,需要加上model.eval(). 否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有batch normalization层所带来的的性质。
在做one classification的时候,训练集和测试集的样本分布是不一样的,尤其需要注意这一点。

https://blog.csdn.net/iammelon/article/details/89928531

你可能感兴趣的:(Torch)