模型权值初始化的十种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模型权值初始化的十种方法相关的知识,希望对你有一定的参考价值。

参考技术A 当我们定义好一个模型后,通常我们还需要对权值进行初始化,才能开始训练。初始化方法会直接影响模型的收敛与否。

总共分两步:

PyTorch在torch.nn.init中提供了常用的初始化方法函数,可以大体的分两部分:

torch.nn.init.xavier_uniform_(tensor,gain=1)
xavier初始化方法中服从均匀分布U(-a,a),分布的参数a=gain*sqrt(6/fan_in+fan_out),这里有一个gain,增益的大小是依据激活函数类型来设定
例如:nn.init.xavier_uniform_(w,gain=nn.init.calculate_gain('relu'))
上述初始化方法,也称为Glorot inittialization

torch.nn.init.xavier_normal_(tensor,gain=1)
xavier初始化方法中服从正态分布,
mean=0,std=gain*sqrt(2/fan_in+fan_out)

torch.nn.init.kaiming_uniform(tensor,a=0,model='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

torch.nn.init.kaiming_normal_(tensor,a=0,model='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.

torch.nn.init.uniform_(tensor,a=0,b=1)
使值服从均匀分布U(a,b)

torch.nn.init.normal_(tensor,mean=0,std=1)
使值服从正态分布N(mean,std),默认值为0,1

torch.nn.init.constant_(tensor,val)
值为常数val nn.init.constant_(w,0.3)

torch.nn.init.eye_(tensor)
将二维tensor初始化为单位矩阵

torch.nn.init.orthogonal_(tensor,gain=1)
使得tensor是正交的

torch.nn.init.sparse_(tensor,sparsity,std=0.01)
从正态分布N~(0,std)中进行稀疏化,使每一个column有一部分为0,sparsity-每一个column稀疏的比例,即为0的比例
**nn.init.sparse_(w,sparsity=0.1)

torch.nn.init.calculate_gain(nonlinearity,param=None)

以上是关于模型权值初始化的十种方法的主要内容,如果未能解决你的问题,请参考以下文章

jquery性能优化的十种方法

用Linux命令行生成随机密码的十种方法

linux生成随机密码的十种方法

电脑故障排除的十种方法!

电脑故障排除的十种方法!

电脑故障排除的十种方法!