在训练模型时会在前面加上:
model.train()
在测试模型时在前面使用:
model.eval()
同时发现,如果不写这两个程序也可以运行,这是因为这两个方法是针对在网络训练和测试时采用不同方式的情况,比如Batch Normalization
和Dropout
。
使用PyTorch
进行训练和测试时一定注意要把实例化的model
指定train/eval
,eval()
时,框架会自动把BN
和DropOut
固定住,不会取平均,而是用训练好的值,不然的话,一旦test
的batch_size
过小,很容易就会被BN
层导致生成图片颜色失真极大!
eg:
Class Inpaint_Network()
......
Model = Inpaint_Nerwoek()
#train:
Model.train(mode=True)
.....
#test:
Model.eval()
训练时是针对每个min-batch
的,但是在测试中往往是针对单张图片,即不存在min-batch
的概念。由于网络训练完毕后参数都是固定的,因此每个批次的均值和方差都是不变的,因此直接结算所有batch
的均值和方差。
所有Batch Normalization
的训练和测试时的操作不同。
https://blog.csdn.net/Z_lbj/article/details/79672888
https://blog.csdn.net/jinxin521125/article/details/78435899
https://zhuanlan.zhihu.com/p/26893755