(Pytorch)nn.Dropout以及Dropout1d,Dropout2d,Dropout3d是什么意思

本文详细解释了PyTorch中nn.Dropout及其变种Dropout1d、Dropout2d和Dropout3d的区别。nn.Dropout适用于任意形状的数据,通过随机将部分元素设置为0来进行正则化。而Dropout2d主要应用于图像数据,它将输入视为一系列特征图,并对整个特征图进行随机关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

前言

其实nn.Dropout并不是Dropout1d,Dropout2d,Dropout3d中任何一个的特例,他们应用场景并不相同,不是相互包含的关系。

nn.Dropout

我们用得最多的应该是第一个nn.Dropout,这个也是大家一般所默认的。即把输入随机置为0。

这里的输入可能是一个数,也可能是多个数,多个数可能会被组织成向量,矩阵,图片等等。nn.Dropout是对每一个数都来一次随机置为0。例如:

[1, 2]
dropout之后:
[0, 2]

再例如

[[1 2]
 [3 4]]
dropout之后:
[[1 0]
 [3 4]]

总之:是对每一个数都随机置为0。

1/2/3d

这个就不是对每一个数都随机置为0了,nn.Dropout是将输入看成由一个个数字组成,而这里呢?以2d为例,其是将输入看成由一个个矩阵组成。

由于其应用场景常常是图片,所以,Dropout2d要求我们的输入形状是如下:

[bsize,channel,height,weight]

其可以看成是bsize*channel个矩阵组成,现在我们的dropout就是针对这么多个矩阵进行随机置为0,一个矩阵一旦被挑选,那么这个矩阵所有元素都是0。

tensor([[[[ 0.8190,  0.9685,  2.1544],
          [ 0.1041,  2.7761,  0.6758],
          [-0.8275,  2.2277,  0.3848]]],


        [[[ 1.2271, -0.8530,  0.9684],
          [-1.8995,  1.6482, -0.6844],
          [-1.8486, -1.1970,  0.8213]]]])
dropout之后
tensor([[[[ 0.0000,  0.0000,  0.0000],
          [ 0.0000,  0.0000,  0.0000],
          [-0.0000,  0.0000,  0.0000]]],


        [[[ 2.4542, -1.7059,  1.9368],
          [-3.7990,  3.2963, -1.3688],
          [-3.6971, -2.3940,  1.6426]]]])

为啥要发明这种dropout呢?

As described in the paper Efficient Object Localization Using Convolutional Networks , if adjacent pixels within feature maps are strongly correlated (as is normally the case in early convolution layers) then i.i.d. dropout will not regularize the activations and will otherwise just result in an effective learning rate decrease.

In this case, nn.Dropout2d() will help promote independence between feature maps and should be used instead.

注意一下,对于这个dropout2d,我试过pytorch里面的,其形状必须要是上面的4维好像.如果是5维的时候,其并不是对最后两维进行全0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值