【问题标题】:Methods of initializing weights in Convolutional Neural Networks - Python/TensorFlow卷积神经网络中初始化权重的方法 - Python/TensorFlow
【发布时间】:2017-10-27 23:58:05
【问题描述】:

我最初将我的权重设置如下:

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

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

然后我决定这样定义,对我来说权重更容易接受:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 零:当所有权重都设置为 0 时
    2. 随机:当权重完全随机设置时
    3. -1 到 +1 之间的随机:-1 到 +1 范围内的随机权重
    4. Xavier-Glorot 初始化

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

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

    【讨论】:

    • 好的,但是 -zeros 是什么意思?这是否意味着他们倾向于-1?
    • -zeros 是什么意思?
    • 这是因为它是截断的正态分布。截断意味着其仅输出幅度在均值 = 0 的 2 个标准差以内的值。这意味着值在 0.1 和 -0,1 之间
    • 我明白了! stddev = 0.05 是什么意思?
    • 表示截断正态分布的标准差为0.05。
    猜你喜欢
    • 2019-04-10
    • 2019-10-09
    • 2017-05-20
    • 2018-01-26
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2023-03-14
    相关资源
    最近更新 更多