在卷积神经网络中初始化权重的方法--Python / TensorFlow

时间:2017-10-27 23:58:05

标签: python python-2.7 tensorflow conv-neural-network

我最初设定权重如下:

def new_weights(shape):
    return tf.Variable(tf.truncated_normal(shape, stddev=0.05))

但我意识到我的权重为-0,如下图所示:

Figure 1

然后我决定用那种方式定义它,对我来说权重更容易接受:

def new_weights(shape):
    return tf.Variable(tf.zeros(shape))

Figure 2

我想知道使用tf.truncated_normal的含义是什么,-zeros是什么意思?如果你有任何问题像这样初始化它们。

在我介绍的两者之间,什么是初始化权重的最佳方法?

1 个答案:

答案 0 :(得分:1)

tf.truncated_normal 从截断的正态分布输出随机值。因此,DNN具有良好的收敛性。下图是MNIST数据集上CNN的验证损失(左)和验证准确度(右)。使用的权重初始化如下,

  1. 零:当所有权重都设置为0时
  2. 随机:当权重完全随机设置时
  3. -1到+1之间的随机:-1到+1
  4. 的随机权重
  5. Xavier-Glorot初始化
  6. enter image description here

    正如您所看到的,-1到+1范围内的随机权重显示了良好的结果。因此,它是DNN中最常用的权重初始化方法。

    参考, https://medium.com/@amarbudhiraja/towards-weight-initialization-in-deep-neural-networks-908d3d9f1e02