模型--model 中eval函数的用法


Batch Normalization
其作用对网络中间的每层进行归一化处理,并且使用变换重构(Batch Normalization Transform)保证每层提取的特征分布不会被破坏。训练时是针对每个mini-batch的,但是测试是针对单张图片的,即不存在batch的概念。由于网络训练完成后参数是固定的,每个batch的均值和方差是不变的,因此直接结算所有batch的均值和方差。所有Batch Normalization的训练和测试时的操作不同。
Dropout
其作用克服Overfitting,在每个训练批次中,通过忽略一半的特征检测器,可以明显的减少过拟合现象。针对model 在训练时和评价时不同的 Batch Normalization 和 Dropout 方法模式

model.eval()

作用:不启用 BatchNormalization 和 Dropout,保证BN和dropout不发生变化,pytorch框架会自动把BN和Dropout固定住,不会取平均,而是用训练好的值

常见的错误:

不使用eval() 

一旦test的batch

_size过小,很容易就会被BN层影响结果。

model.eval()
h_test=torch.argmax(model(x_test), dim=1)
acc_test=(h_test==y_test).float().mean()
print('测试集最终准确率:',acc_test.item())

猜你喜欢

转载自blog.csdn.net/wanghan0526/article/details/129044453
今日推荐