pytorch Dropout:“通道将独立清零”

Posted

技术标签:

【中文标题】pytorch Dropout:“通道将独立清零”【英文标题】:pytorch Dropout: "channel will be zeroed out independently" 【发布时间】:2021-11-29 10:06:06 【问题描述】:

在 pytorch doc 中指出:在训练期间,使用来自伯努利分布的样本以概率 p 将输入张量的一些元素随机归零。每次前转呼叫时,每个通道都将独立归零。

“每次前向呼叫都独立归零”是什么意思?下面是我的实现的伪代码,它们是否等同于 pytorch 版本?

import numpy as np
p = 0.3
inpt = np.random.randn((2, 3, 3))  # input tensor

# forward, when training is true
mask = np.random.choice(a=[False, True], size=inpt.shape, p=[p, 1 - p])
output = inpt * mask / (1 - p)  # output tensor
return output

# forward, when training is false
return inpt # does nothing

# backward propagation
inpt.grad += incoming_gradient * mask # apply the same mask on incoming gradient

【问题讨论】:

【参考方案1】:

您不需要在梯度上应用掩码,激活已经被掩蔽,即梯度不会流过在前向传递中被掩蔽的神经元。见source

【讨论】:

以上是关于pytorch Dropout:“通道将独立清零”的主要内容,如果未能解决你的问题,请参考以下文章

Dropout 丢弃法 动手学深度学习v2 pytorch

Pytorch中nn.Dropout2d的作用

PyTorch 中带有 dropout 正则化的逻辑回归

深度学习:《PyTorch入门到项目实战》第九天:Dropout实现(含源码)

如何在 Pytorch 中实现 dropout,以及在哪里应用它

PyTorch - Dropout: A Simple Way to Prevent Neural Networks from Overfitting