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 - 用于生成非零值的正太分布的标准差

浙公网安备 33010602011771号