作者 | 余霆嵩 来源专栏 | PyTorch学习笔记 本文截取自一个github上千星的火爆教程——《PyTorch 模型训练实用教程》,教程内容主要为在 PyTorch 中训练一个模型所可能涉及到的方法及函数的详解等,本文为作者整理的学习笔记(四),pytorch在torch.nn.init中提供了常用的初始化方法函数,这里简单介绍,方便查询使用。后续会继续更新这个系列,欢迎关注。 项目代码:https://github.com/tensor-yu/PyTorch_Tutorial 系列回顾: pytorch在torch.nn.init中提供了常用的初始化方法函数,这里简单介绍,方便查询使用。 介绍分两部分: 1. Xavier,kaiming系列; 2. 其他方法分布 Xavier初始化方法,论文在《Understanding the difficulty of training deep feedforward neural networks》 公式推导是从“方差一致性”出发,初始化的分布有均匀分布和正态分布两种。 Xavier,kaiming系列 1. Xavier均匀分布torch.nn.init.xavier_uniform_(tensor, gain=1) xavier初始化方法中服从均匀分布U(−a,a) ,分布的参数a = gain * sqrt(6/fan_in+fan_out), 这里有一个gain,增益的大小是依据激活函数类型来设定 eg:nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu')) PS:上述初始化方法,也称为Glorot initialization 2. Xavier正态分布torch.nn.init.xavier_normal_(tensor, gain=1) xavier初始化方法中服从正态分布, mean=0,std = gain * sqrt(2/fan_in + fan_out) kaiming初始化方法,论文在《 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》,公式推导同样从“方差一致性”出法,kaiming是针对xavier初始化方法在relu这一类激活函数表现不佳而提出的改进,详细可以参看论文。 3. kaiming均匀分布torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu') 此为均匀分布,U~(-bound, bound), bound = sqrt(6/(1+a^2)*fan_in) 其中,a为激活函数的负半轴的斜率,relu是0 mode- 可选为fan_in 或 fan_out, fan_in使正向传播时,方差一致; fan_out使反向传播时,方差一致 nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu') 4. kaiming正态分布torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu') 此为0均值的正态分布,N~ (0,std),其中std = sqrt(2/(1+a^2)*fan_in) 其中,a为激活函数的负半轴的斜率,relu是0 mode- 可选为fan_in 或 fan_out, fan_in使正向传播时,方差一致;fan_out使反向传播时,方差一致 nonlinearity- 可选 relu 和 leaky_relu ,默认值为 。 leaky_relu nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu') 其他方法分布 5. 均匀分布初始化torch.nn.init.uniform_(tensor, a=0, b=1) 使值服从均匀分布U(a,b) 6. 正态分布初始化torch.nn.init.normal_(tensor, mean=0, std=1) 使值服从正态分布N(mean, std),默认值为0,1 7. 常数初始化torch.nn.init.constant_(tensor, val) 使值为常数val nn.init.constant_(w, 0.3) 8. 单位矩阵初始化torch.nn.init.eye_(tensor) 将二维tensor初始化为单位矩阵(the identity matrix) 9. 正交初始化torch.nn.init.orthogonal_(tensor, gain=1) 使得tensor是正交的,论文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks” - Saxe, A. et al. (2013) 10. 稀疏初始化torch.nn.init.sparse_(tensor, sparsity, std=0.01) 从正态分布N~(0. std)中进行稀疏化,使每一个column有一部分为0 sparsity- 每一个column稀疏的比例,即为0的比例 nn.init.sparse_(w, sparsity=0.1) 11. 计算增益torch.nn.init.calculate_gain(nonlinearity, param=None) |
|