模型训练的时候会首先对权值矩阵和偏置进行初始化。有的是把权值初始化为0,但是这种情况不能适用于带有梯度下降算法的网络。因为每次的残差都一样,那么网络参数就达不到最优了。所以一般常用的就是随机数初始化,保证每个参数都不重复,但是差值也不会很大。随机数初始化一般按照概率分布去取值,比如常用的均匀分布等。
一、如何初始化
在Keras中对权值矩阵初始化的方式很简单,就是在add某一层时,同时注明初始化该层的概率分布是什么就可以了。代码如下:
# init是关键字,’uniform’表示用均匀分布去初始化
model.add(Dense(64, init='uniform'))
二、常用的初始化方法
在Keras里边内置提供了多种初始化方法。
- Uniform(scale=0.05) :均匀分布,最常用的。Scale就是均匀分布的每个数据在-scalescale之间。此处就是-0.050.05。scale默认值是0.05;
- lecun_uniform:是在LeCun在98年发表的论文中基于uniform的一种方法。区别就是lecun_uniform的scale=sqrt(3/f_in)。f_in就是待初始化权值矩阵的行。
- Normal:正态分布(高斯分布)。
- Identity :用于2维方阵,返回一个单位阵
- Orthogonal:用于2维方阵,返回一个正交矩阵。
- Zero:产生一个全0矩阵。
- glorot_normal:基于normal分布,normal的默认 sigma2=scale=0.05,而此处sigma2=scale=sqrt(2 / (f_in+ f_out)),其中,f_in和f_out是待初始化矩阵的行和列。
- glorot_uniform:基于uniform分布,uniform的默认scale=0.05,而此处* scale=sqrt( 6 / (f_in +f_out)) ,其中,f_in和f_out是待初始化矩阵的行和列。
- he_normal:基于normal分布,normal的默认 scale=0.05,而此处scale=sqrt(2 / f_in),其中,f_in是待初始化矩阵的行。
- he_uniform:基于uniform分布,uniform的默认scale=0.05,而此处scale=sqrt( 6 / f_in),其中,f_in待初始化矩阵的行。