model.train() 与model.eval() 的区别

本文详细介绍了PyTorch中model.eval的作用及其在训练与验证过程中的应用。特别是对于包含BN层(BatchNormalization)和Dropout层的模型,如何在训练与验证阶段正确切换模型状态,以确保模型表现的一致性和准确性。

1. 背景说明

        参考: pytorch中model.eval的作用

        如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train(),在测试时添加model.eval()。

BN层:

        其作用对网络中间的每层进行归一化处理,并且使用变换重构保证每层提取的特征分布不会被破坏。训练时是针对每个mini-batch的,但是测试是针对单张图片的,即不存在batch的概念。由于网络训练完成后参数是固定的,每个batch的均值和方差是不变的,因此直接结算所有batch的均值和方差。所有Batch Normalization的训练和测试时的操作不同。

 model.train():  保证BN层用每一批数据的均值和方差;

 model.eval():  保证BN用全部训练数据的均值和方差。

Dropout层:

        其作用克服Overfitting,在每个训练批次中,通过忽略一半的特征检测器,可以明显的减少过拟合现象。

  model.train():  随机取一部分网络连接来训练更新参数;

  model.eval(): 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值