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:“通道将独立清零”的主要内容,如果未能解决你的问题,请参考以下文章
深度学习:《PyTorch入门到项目实战》第九天:Dropout实现(含源码)
如何在 Pytorch 中实现 dropout,以及在哪里应用它
PyTorch - Dropout: A Simple Way to Prevent Neural Networks from Overfitting