Pytorch——model.train 和 model.eval

两条语句有固定的使用场景。

在训练模型时会在前面加上:

model.train()

在测试模型时在前面使用:

model.eval()

同时发现,如果不使用这两条语句,程序也可以运行。这两个方法是针对在网络train和eval时采用不同方式的情况,比如Batch Normalization和Dropout。

下面对这Batch Normalization和Dropout做一下详细的解析:

Batch Normalization

BN的作用主要是对网络中间的每层进行归一化处理,并且使用变换重构(Batch Normalization Transform)保证每层所提取的特征分布不会被破坏。

训练时是针对每个mini-batch的,但是在测试中往往是针对单张图片,即不存在mini-batch的概念。由于网络训练完毕后参数都是固定的,因此每个batch的均值和方差都是不变的,因此直接结算所有batch的均值和方差。所有Batch Normalization的训练和测试时的操作不同。

Dropout

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




在训练中,每个隐层的神经元先乘以概率P,然后再进行激活。

在测试中,所有的神经元先进行激活,然后每个隐层神经元的输出乘P。

Reference:

Pytorch——model.train 和 model.eval

你可能感兴趣的:(Pytorch——model.train 和 model.eval)