torch.nn.init¶
- torch.nn.init 的calculate_gain(非线性,param=None)[来源]¶
返回给定非线性函数的推荐增益值。
值如下所示:
非线性
获得
线性 / 恒等
Conv{1,2,3}D
乙状结肠
谭
ReLU 系列
Leaky Relu
色鲁
警告
为了实现自归一化神经网络 , 您应该使用 ,而不是 . 这为初始权重提供了 , 这对于在正向传递中诱导稳定的固定点是必要的。 相反,的默认增益牺牲了归一化 效果,以便在矩形层中实现更稳定的梯度流。
nonlinearity='linear'
nonlinearity='selu'
1 / N
SELU
- 参数
nonlinearity – 非线性函数 (nn.函数名称)
param – 非线性函数的可选参数
例子
>>> gain = nn.init.calculate_gain('leaky_relu', 0.2) # leaky_relu with negative_slope=0.2
- torch.nn.init 的uniform_(张量,a=0.0,b=1.0,生成器=无)[来源]¶
使用从均匀分布中提取的值填充输入 Tensor。
.
- 参数
- 返回类型
例子
>>> w = torch.empty(3, 5) >>> nn.init.uniform_(w)
- torch.nn.init 的normal_(张量,平均值=0.0,标准=1.0,生成器=无)[来源]¶
使用从正态分布中提取的值填充输入 Tensor。
.
- 参数
- 返回类型
例子
>>> w = torch.empty(3, 5) >>> nn.init.normal_(w)
- torch.nn.init 的constant_(tensor, val)[来源]¶
用值填充输入 Tensor.
例子
>>> w = torch.empty(3, 5) >>> nn.init.constant_(w, 0.3)
- torch.nn.init 的zeros_(张量)[来源]¶
用标量值 0 填充输入 Tensor。
例子
>>> w = torch.empty(3, 5) >>> nn.init.zeros_(w)
- torch.nn.init 的eye_(Tensor)[来源]¶
用单位矩阵填充二维输入 Tensor。
保留线性层中输入的标识,其中 尽可能保留许多输入。
- 参数
tensor – 一个 2 维火torch.Tensor
例子
>>> w = torch.empty(3, 5) >>> nn.init.eye_(w)
- torch.nn.init 的dirac_(tensor, groups=1)[来源]¶
用 Dirac delta 函数填充 {3, 4, 5} 维输入 Tensor。
保留卷积层中 inputs 的标识,其中保留了尽可能多的 input 通道。倘 of groups>1,每组通道都保留身份
- 参数
tensor – 一个 {3, 4, 5} 维火torch.Tensor
groups (int, optional) – conv 层中的组数 (默认值:1)
例子
>>> w = torch.empty(3, 16, 5, 5) >>> nn.init.dirac_(w) >>> w = torch.empty(3, 24, 5, 5) >>> nn.init.dirac_(w, 3)
- torch.nn.init 的xavier_uniform_(张量,增益=1.0,生成器=无)[来源]¶
使用 Xavier 均匀分布用值填充输入 Tensor。
该方法在 了解训练的难度 中进行了描述 深度前馈神经网络 - Glorot, X. & Bengio, Y. (2010). 生成的张量将具有从哪里
也称为 Glorot 初始化。
- 参数
- 返回类型
例子
>>> w = torch.empty(3, 5) >>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))
注意
请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .
fan_in
fan_out
x @ w.T
Linear
w.shape = [fan_out, fan_in]
x @ w
w.shape = [fan_in, fan_out]
nn.init.xavier_uniform_(w.T, ...)
- torch.nn.init 的xavier_normal_(张量,增益=1.0,生成器=无)[来源]¶
使用 Xavier 正态分布用值填充输入 Tensor。
该方法在 了解训练深度前馈的难度 中进行了描述 神经网络 - Glorot, X. & Bengio, Y. (2010)。生成的张量 将具有从哪里
也称为 Glorot 初始化。
- 参数
- 返回类型
例子
>>> w = torch.empty(3, 5) >>> nn.init.xavier_normal_(w)
注意
请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .
fan_in
fan_out
x @ w.T
Linear
w.shape = [fan_out, fan_in]
x @ w
w.shape = [fan_in, fan_out]
nn.init.xavier_normal_(w.T, ...)
- torch.nn.init 的kaiming_uniform_(张量, a=0, mode='fan_in', 非线性='leaky_relu', generator=None)[来源]¶
使用 Kaiming 均匀分布用值填充输入 Tensor。
该方法在 深入研究整流器:超越 中进行了描述 ImageNet 分类的人类水平性能 - He, K. et al. (2015)。 生成的张量将具有从哪里
也称为 He 初始化。
- 参数
例子
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')
注意
请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .
fan_in
fan_out
x @ w.T
Linear
w.shape = [fan_out, fan_in]
x @ w
w.shape = [fan_in, fan_out]
nn.init.kaiming_uniform_(w.T, ...)
- torch.nn.init 的kaiming_normal_(张量, a=0, mode ='fan_in', 非线性='leaky_relu', generator=None)[来源]¶
使用 Kaiming 正态分布用值填充输入 Tensor。
该方法在 深入研究整流器:超越 中进行了描述 ImageNet 分类的人类水平性能 - He, K. et al. (2015)。 生成的张量将具有从哪里
也称为 He 初始化。
- 参数
例子
>>> w = torch.empty(3, 5) >>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')
注意
请注意,和 的计算假设为 权重矩阵以转置方式使用, (即,在图层中,其中 )。 这对于正确初始化非常重要。 如果您计划使用 , 其中 , 传入转置的权重矩阵,即 .
fan_in
fan_out
x @ w.T
Linear
w.shape = [fan_out, fan_in]
x @ w
w.shape = [fan_in, fan_out]
nn.init.kaiming_normal_(w.T, ...)
- torch.nn.init 的trunc_normal_(张量,平均值=0.0,标准差=1.0,a=-2.0,b=2.0,生成器=无)[来源]¶
使用从截断的正态分布中提取的值填充输入 Tensor。
这些值实际上是从 正态分布值在重新绘制,直到它们位于 边界。用于生成随机值的方法有效 最佳时间.
- 参数
- 返回类型
例子
>>> w = torch.empty(3, 5) >>> nn.init.trunc_normal_(w)
- torch.nn.init 的orthogonal_(张量,增益=1,生成器=无)[来源]¶
用(半)正交矩阵填充输入 Tensor。
在 Exact solutions to the nonlinear dynamics of learning in deep 中进行了描述 线性神经网络 - Saxe, A. et al. (2013)。输入张量必须具有 至少 2 个维度,对于维度超过 2 个的张量, 尾随维度被展平。
- 参数
例子
>>> w = torch.empty(3, 5) >>> nn.init.orthogonal_(w)