PyTorch - torch.nn.init 初始化

1. nn.init.uniform

init.uniform(tensor, a=0, b=1)

>>> w = torch.Tensor(3, 5)
>>> nn.init.uniform(w)

从均匀分布\(\mathcal{U}\)(a, b)中生成值,填充输入的张量或变量。

Parameters:

  • tensor - n维的torch.Tensor
  • a - 均匀分布的下界
  • b - 均匀分布的上界

2. nn.init.normal

nn.init.normal(tensor, mean=0, std=1)

>>> w = torch.Tensor(3, 5)
>>> nn.init.normal(w)

从给定均值和标准差的正太分布\(\mathcal{N}\)(mean, std)中生成值,填充输入的张量或变量。

Parameters:

  • tensor - n维的torch.Tensor
  • mean - 正太分布的均值
  • std - 正态分布的标准差

3. nn.init.constant

nn.init.constant(tensor, val)

>>> w = torch.Tensor(3, 5)
>>> nn.init.constant(w)

用val的值填充输入的张量或变量.

Parameters:

  • tensor - n维的torch.Tensor 或 autograd.Variable
  • val - 用来填充张量的值

4. nn.init.eye

nn.init.eye(tensor)

>>> w = torch.Tensor(3, 5)
>>> nn.init.eye(w)

用单位矩阵来填充2维输入张量或变量。在线性层尽可能多的保存输入特性。

Parameters:

  • tensor - 2维的torch.Tensor 或 autograd.Variable

5. nn.init.dirac

nn.init.dirac(tensor)

>>> w = torch.Tensor(3, 16, 5, 5)
>>> nn.init.dirac(w)

用Dirac\(\delta\) 函数来填充{3, 4, 5}维输入张量或变量。在卷积层尽可能多的保存输入通道特性。

Parameters:

  • tensor -(3, 4, 5)维的torch.Tensor 或 autograd.Variable

6. nn.init.xavier_uniform

nn.init.xavier_uniform(tensor, gain=1)

>>> w = torch.Tensor(3, 5)
>>> nn.init.xavier_uniform(w, gain=math.sqrt(2.0))

用一个均匀分布生成值,填充输入的张量或变量。结果张量中的值采样自U(-a,a),其中\(\text{a}=\text{gain}*\sqrt{\frac{6}{fan_{in}+fan_{out}}}\),该方法也被称为Glorot initialisation 。
参考: Glorot, X 和 Benign, Y.等“Understanding the difficulty of training deep feedforward neural networks

Parameters:

  • tensor - n维的torch.Tensor
  • gain - 可选的缩放因子

7. nn.init.xavier_normal

nn.init.xavier_normal(tensor, gain=1)

>>> w = torch.Tensor(3, 5)
>>> nn.init.xavier_normal(w)

用一个正态分布生成值,填充输入的张量或变量。结果张量中的值采样自均值为0,标准差为\(\text{gain}*\sqrt{\frac{6}{fan_{in}+fan_{out}}}\)的正太分布。也被称为Glorot initialisation

参考: Glorot, X 和 Benign, Y.等“Understanding the difficulty of training deep feedforward neural networks

Parameters:

  • tensor - n维的torch.Tensor
  • gain - 可选的缩放因子

8. nn.init.kaiming_uniform

nn.init.kaiming_uniform(tensor, a=0, mode='fan_in',nonlinearity='leaky_relu')

>>> w = torch.Tensor(3, 5)
>>> nn.init.kaiming_uniform(w, mode='fan_in')

​用一个均匀分布生成值,填充输入的张量或变量。结果张量中的值的值采样自U(-bound, bound),其中\(\text{bound}=\text{gain} \times \sqrt{\frac{3}{\text{fan}_{\text{mode}}}}也\)被称为He initialization。

参考:He, K等“Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification

Parameters:

  • tensor - n维的torch.Tensor 或 autograd.Variable
  • a - 这层之后使用的rectifier的斜率系数(ReLU的默认值为0)
  • mode - 可以为“fan_in”(默认)或 “fan_out”
    • “fan_in”保留前向传播时权值方差的量级
    • “fan_out”保留反向传播时的量级
  • nonlinearity=‘leaky_relu’ - 非线性函数 建议“relu”或“leaky_relu”(默认值)使用。

9. nn.init.kaiming_normal

nn.init.kaiming_normal(tensor, a=0, mode='fan_in')

>>> w = torch.Tensor(3, 5)
>>> nn.init.kaiming_normal(w, mode='fan_out')

用一个正态分布生成值,填充输入的张量或变量。结果张量中的值采样自均值为0,标准差为\(\text{std}=\sqrt{\frac{2}{(1+a^2)}*\text{fan_in}}\)的正太分布。

参考:He, K 在 “Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification

Parameters:

  • tensor - n维的torch.Tensor或autograd.Variable
  • a - 这层之后使用的rectifier的斜率系数(ReLU的默认值为0)
  • mode - 可以为“fan_in”(默认)或 “fan_out”
    • “fan_in”保留前向传播时权值方差的量级
    • “fan_out”保留反向传播时的量级

10. nn.init.orthogonal

用(半)正交矩阵填充输入的张量或变量。输入张量必须至少是2维的,对于更高维度的张量,超出的维度会被展平,视作行等于第一个维度,列等于稀疏矩阵乘积的2维表示【其中非零元素生成自均值为0,标准差为std的正态分布】

参考:Saxe, A等人(2013)的“Exact solutions to the nonlinear dynamics of learning in deep linear neural networks

Parameters:

  • tensor - n维的torch.Tensor 或 autograd.Variable,其中n>=2
  • gain - 可选

11. nn.init.sparse

nn.init.sparse(tensor, sparsity, std=0.01)

>>> w = torch.Tensor(3, 5)
>>> nn.init.sparse(w, sparsity=0.1)

将2维的输入张量或变量当做 稀疏矩阵填充,其中非零元素根据一个均值为0,标准差为std的正态分布生成。

参考:Martens, J.(2010)的 “Deep learning via Hessian-free optimization

Parameters:

  • tensor - n维的torch.Tensor或autograd.Variable
  • sparsity - 每列中需要被设置成零的元素比例
  • std - 用于生成非零值的正太分布的标准差
posted @ 2023-01-25 17:40  X1OO  阅读(113)  评论(0)    收藏  举报