在进行卷积神经网络理解的时候,对它的卷积连接权重的初始化发生了兴趣.
conv1 = tf.layers.conv2d()进行卷积的各个参数的定义。
其中一个参数是权值的初始化设置,如图:
kernel_initializer是权重的初始化方式,但它竟然默认为None,这是啥意思呢?
查证源码,这样解释:
嘿!默认为glorot_uniform_initializer,也称之为 Xavier normal initializer
那这玩意儿(Xavier )是啥东西呢?
由一个均匀分布(uniform distribution)来初始化数据。
假设均匀分布的区间是[-limit, limit],则
limit=sqrt(6 / (fan_in + fan_out))
其中的fan_in和fan_out分别表示输入单元的结点数和输出单元的结点数。
https://zhuanlan.zhihu.com/p/22028079 这里关于Xavier 原理讲的挺不错
Xavier 提出经过:
从神经网络的正向,反向推导
再到梯度消失和梯度爆炸的由来https://zhuanlan.zhihu.com/p/25631496
再到如何初始化权重来预防梯度消失和梯度爆炸问题