Shortcuts

torch.nn.modules.dropout 的源代码

from .module import Module
from .. import functional as F

from torch import Tensor

__all__ = ['Dropout', 'Dropout1d', 'Dropout2d', 'Dropout3d', 'AlphaDropout', 'FeatureAlphaDropout']

class _DropoutNd(Module):
    __constants__ = ['p', 'inplace']
    p: float
    inplace: bool

    def __init__(self, p: float = 0.5, inplace: bool = False) -> None:
        super().__init__()
        if p < 0 or p > 1:
            raise ValueError(f"dropout probability has to be between 0 and 1, but got {p}")
        self.p = p
        self.inplace = inplace

    def extra_repr(self) -> str:
        return f'p={self.p}, inplace={self.inplace}'


[docs]class Dropout(_DropoutNd): r"""在训练期间,随机将输入张量的一些元素归零,概率为 :attr:`p`。 被归零的元素是独立选择的,每个前向调用都会从伯努利分布中采样。 每个通道将在每次前向调用时独立归零。 这种方法已被证明是一种有效的正则化技术, 并防止神经元的共适应,如论文 `通过防止特征检测器的共适应来改进神经网络`_ 中所述。 此外,训练期间的输出会按因子 :math:`\frac{1}{1-p}` 进行缩放。这意味着在评估期间,模块仅计算一个恒等函数。 参数: p: 元素被归零的概率。默认值: 0.5 inplace: 如果设置为 ``True``,将就地执行此操作。默认值: ``False`` 形状: - 输入: :math:`(*)`。输入可以是任意形状 - 输出: :math:`(*)`。输出与输入形状相同 示例:: >>> m = nn.Dropout(p=0.2) >>> input = torch.randn(20, 16) >>> output = m(input) .. _通过防止特征检测器的共适应来改进神经网络: https://arxiv.org/abs/1207.0580 """ def forward(self, input: Tensor) -> Tensor: return F.dropout(input, self.p, self.training, self.inplace)
[docs]class Dropout1d(_DropoutNd): r"""随机将整个通道归零。 一个通道是一个1D特征图, 例如,批量输入中第 :math:`i` 个样本的第 :math:`j` 个通道是一个1D张量 :math:`\text{input}[i, j]`。 每个通道将在每次前向调用时独立归零, 概率为 :attr:`p`,使用从伯努利分布中采样的样本。 通常输入来自 :class:`nn.Conv1d` 模块。 如论文 `使用卷积网络进行高效目标定位`_ 中所述, 如果特征图中的相邻像素强烈相关 (通常在早期卷积层中是这种情况),则独立同分布的dropout 将不会正则化激活,否则只会导致有效的学习率下降。 在这种情况下,:func:`nn.Dropout1d` 将有助于促进特征图之间的独立性, 应该使用它。 参数: p (float, optional): 元素被归零的概率。 inplace (bool, optional): 如果设置为 ``True``,将就地执行此操作 形状: - 输入: :math:`(N, C, L)` 或 :math:`(C, L)`。 - 输出: :math:`(N, C, L)` 或 :math:`(C, L)`(与输入形状相同)。 示例:: >>> m = nn.Dropout1d(p=0.2) >>> input = torch.randn(20, 16, 32) >>> output = m(input) .. _使用卷积网络进行高效目标定位: https://arxiv.org/abs/1411.4280 """ def forward(self, input: Tensor) -> Tensor: return F.dropout1d(input, self.p, self.training, self.inplace)
[docs]class Dropout2d(_DropoutNd): r"""随机将整个通道归零。 一个通道是一个2D特征图, 例如,批量输入中第 :math:`i` 个样本的第 :math:`j` 个通道是一个2D张量 :math:`\text{input}[i, j]`。 每个通道将在每次前向调用时独立归零, 概率为 :attr:`p`,使用从伯努利分布中采样的样本。 通常输入来自 :class:`nn.Conv2d` 模块。 如论文 `使用卷积网络进行高效目标定位`_ 中所述, 如果特征图中的相邻像素强烈相关 (通常在早期卷积层中是这种情况),则独立同分布的dropout 将不会正则化激活,否则只会导致有效的学习率下降。 在这种情况下,:func:`nn.Dropout2d` 将有助于促进特征图之间的独立性, 应该使用它。 参数: p (float, optional): 元素被归零的概率。 inplace (bool, optional): 如果设置为 ``True``,将就地执行此操作 .. 警告 :: 由于历史原因,此类将对3D输入执行1D通道方向的dropout (如 :class:`nn.Dropout1d` 所做的那样)。因此,它目前不支持形状为 :math:`(C, H, W)` 的无批次维度输入。此行为将在未来的版本中更改,以解释3D输入为无批次维度输入。要维护旧行为,请切换到 :class:`nn.Dropout1d`。 形状: - 输入: :math:`(N, C, H, W)` 或 :math:`(N, C, L)`。 - 输出: :math:`(N, C, H, W)` 或 :math:`(N, C, L)`(与输入形状相同)。 示例:: >>> m = nn.Dropout2d(p=0.2) >>> input = torch.randn(20, 16, 32, 32) >>> output = m(input) .. _使用卷积网络进行高效目标定位: https://arxiv.org/abs/1411.4280 """ <span class
优云智算