使值服从均匀分布 U(a,b)
torch.nn.init.uniform_(tensor, a=0.0, b=1.0)
复制代码
使值服从正态分布 N(mean, std),默认值为 0,1
torch.nn.init.normal_(tensor, mean=0.0, std=1.0)
复制代码
使值为常数,用val来填充
torch.nn.init.constant_(tensor, val)
复制代码
用1来填充tensor
torch.nn.init.ones_(tensor)
复制代码
用0来填充tensor
torch.nn.init.zeros_(tensor)
复制代码
将二维 tensor 初始化为单位矩阵
torch.nn.init.eye_(tensor)
复制代码
用Dirac δ函数来填充{3, 4, 5}维输入张量或变量。在卷积层尽可能多的保存输入通道特性。在groups >1的情况下,每组通道保持身份
torch.nn.init.dirac_(tensor, groups=1)
复制代码
使得 tensor 是正交的
torch.nn.init.orthogonal_(tensor, gain=1)
复制代码
从正态分布 N~(0. std)中进行稀疏化,使每一个 column 有一部分为 0
torch.nn.init.sparse_(tensor, sparsity, std=0.01)
复制代码
Xavier 初始化方法,论文在《Understanding the difficulty of training deep feedforward neural networks》。公式推导是从“方差一致性”出发,初始化的分布有均匀分布和正态分布两种。
torch.nn.init.xavier_uniform_(tensor, gain=1.0)
复制代码
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'))
复制代码
torch.nn.init.xavier_normal_(tensor, gain=1.0)
复制代码
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 这一类激活函数表现不佳而提出的改进
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)
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)
eg:
nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')
复制代码
torch.nn.init.calculate_gain(nonlinearity, param=None)
复制代码
返回给定非线性函数的推荐增益值。这些值如下: