在训练模型时会在前面加上:
model.train()
1
在测试模型时在前面使用:
model.eval()
1
同时发现,如果不写这两个程序也可以运行,这是因为这两个方法是针对在网络训练和测试时采用不同方式的情况,比如Batch Normalization 和 Dropout。
训练时是正对每个min-batch的,但是在测试中往往是针对单张图片,即不存在min-batch的概念。由于网络训练完毕后参数都是固定的,因此每个批次的均值和方差都是不变的,因此直接结算所有batch的均值和方差。所有Batch Normalization的训练和测试时的操作不同
在训练中,每个隐层的神经元先乘概率P,然后在进行激活,在测试中,所有的神经元先进行激活,然后每个隐层神经元的输出乘P。
参考
https://blog.csdn.net/u011276025/article/details/78507950
https://blog.csdn.net/u012436149/article/details/78623576
---------------------
作者:Never-Giveup
原文:https://blog.csdn.net/qq_36653505/article/details/84728489
Pytorch 权值和网络修改后如何加载预训练的权重:
https://zhuanlan.zhihu.com/p/38056115
今天看到一个有趣的东西: