关键词短语生成的无监督方法12——Train.py

本文详细介绍了PyTorch中model.train()与model.eval()的作用,强调了它们在Batch Normalization和Dropout层的差异。在训练时,model.train()启用这两层,而在评估时,model.eval()则不启用。此外,文章还探讨了训练模型过程,包括zero_grad、forward、loss、backward和step的步骤,以及学习率调整策略。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

一、model.train()与model.eval()

由于训练模型和评估模型由model.train()和model.eval()两个函数支撑,故我首先对它们展开学习与分析。

model.train()和model.eval()的区别主要在于Batch Normalization和Dropout两层。

model.train()
在这里插入图片描述
启用Batch Normalization和Dropout。
如果模型中有BN层(Batch Normalization和Dropout,需要在训练时添加model.train()。model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。

model.eval()
在这里插入图片描述
不启用 Batch Normalization和Dropout。
如果模型中有BN层(Batch Normalization)和Dropout,在测试时添加model.eval()。model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。

训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。
在做one classification的时候,训练集和测试集的样本分布是不一样的,尤其需要注意这一点。

model.train()/modeal.eval():

    def train(self, mode=True):
        
        self.training = mode
        for module in self.children():
            module.train(mode)
        return self
       
	 def eval(self):
        return self.train(False)

需要记住当前的self.training的值是True还是False。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值