PyTorch的F.dropout为什么要加self.training?

简介: 以下介绍Module的training属性,F(torch.nn.functional).dropout 和 nn(torch.nn).Dropout 中相应操作的实现方式,以及Module的training属性受train()和eval()方法影响而改变的机制。

1. Module的training属性


见torch.nn.Module官方文档

是Module的属性,布尔值,返回Module是否处于训练状态。也就是说在训练时training就是True。

默认为True,也就是Module初始化时默认为训练状态。


2. torch.nn.functional.dropout的入参training


torch.nn.functional.dropout官方文档


torch.nn.functional.dropout(input, p=0.5, training=True, inplace=False)

入参training默认为True,置True时应用Dropout,置False时不用。

因此在调用F.dropout()时,直接将self.training传入函数,就可以在训练时应用dropout,评估时关闭dropout。


示例代码:

x=F.dropout(x,p,self.training)


3. torch.nn.Dropout不需要手动开关


torch.nn.Dropout官方文档


torch.nn.Dropout(p=0.5, inplace=False)


其源代码为(Dropout源码):

class Dropout(_DropoutNd):
    def forward(self, input: Tensor) -> Tensor:
        return F.dropout(input, self.p, self.training, self.inplace)


就这个类相当于将 F.dropout() 进行了包装,内置传入了self.training,就不用像在 F.dropout() 里需要手动传参,也能实现在训练时应用dropout,评估时关闭dropout。


示例代码:

m = nn.Dropout(p=0.2)
input = torch.randn(20, 16)
output = m(input)


4. Module的train()和eval()方法改变self.training


torch.nn.Module.train官方文档

train(mode=True)

如果入参为True,则将Module设置为training mode,training随之变为True;反之则设置为evaluation mode,training为False。


torch.nn.Module.eval官方文档

eval()

将Module设置为evaluation mode,相当于 self.train(False)




相关文章
|
7月前
|
机器学习/深度学习 资源调度 监控
PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample Dropout等 !!
PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample Dropout等 !!
118 0
|
2月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
514 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
4月前
|
存储 PyTorch API
Pytorch入门—Tensors张量的学习
Pytorch入门—Tensors张量的学习
40 0
|
7月前
|
机器学习/深度学习 人工智能 PyTorch
基于torch.nn.Dropout通过实例说明Dropout丢弃法(附代码)
基于torch.nn.Dropout通过实例说明Dropout丢弃法(附代码)
191 0
|
机器学习/深度学习 并行计算 PyTorch
【PyTorch】Training Model
【PyTorch】Training Model
96 0
|
机器学习/深度学习 人工智能 资源调度
深度学习入门基础CNN系列——批归一化(Batch Normalization)和丢弃法(dropout)
批归一化方法(Batch Normalization,BatchNorm)是由Ioffe和Szegedy于2015年提出的,已被广泛应用在深度学习中,其目的是对神经网络中间层的输出进行标准化处理,使得中间层的输出更加稳定。丢弃法(Dropout)是深度学习中一种常用的抑制过拟合的方法,其做法是在神经网络学习过程中,随机删除一部分神经元。训练时,随机选出一部分神经元,将其输出设置为0,这些神经元将不对外传递信号。
611 1
深度学习入门基础CNN系列——批归一化(Batch Normalization)和丢弃法(dropout)
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记-06 Normalization layers
Pytorch学习笔记-06 Normalization layers
125 0
Pytorch学习笔记-06 Normalization layers
|
存储 测试技术
测试模型时,为什么要with torch.no_grad(),为什么要model.eval(),如何使用with torch.no_grad(),model.eval(),同时使用还是只用其中之一
在测试模型时,我们通常使用with torch.no_grad()和model.eval()这两个方法来确保模型在评估过程中的正确性和效率。
1139 0
|
机器学习/深度学习 PyTorch 算法框架/工具
model是一个模型网络,model.eval() 、model.train()是什么意思?
在PyTorch中,model.eval()是一个模型对象的方法,用于将模型设置为评估模式。当模型处于评估模式时,它会在前向传递期间禁用某些操作,如丢弃(dropout)和批量归一化(batch normalization),以确保模型的输出稳定性。
1004 0
|
PyTorch 算法框架/工具 图计算
Pytorch中autograd.Variable.backward的grad_varables参数个人理解浅见
Pytorch中autograd.Variable.backward的grad_varables参数个人理解浅见
138 0
Pytorch中autograd.Variable.backward的grad_varables参数个人理解浅见