Python3 Tensorflow:创建权重时 truncated_normal 和 uniform_normal 之间的区别

数据挖掘 机器学习 张量流 反向传播
2022-01-31 14:46:01

因此,我是使用 Tensorflow 的新手,我正在尝试创建一个中性网络,在所有指南中,我看到使用了以下代码行之一。

Weight1 = tf.Variable(tf.truncated_normal([-,-]))

或者...

Weight1 = tf.Variable(tf.random_uniform([-,-]))

它们都在示例中工作,但我想知道它们之间有什么区别,并且在某些情况下比另一种更好?

2个回答

一个简单的谷歌搜索会告诉你差异。

截断正态从截断正态分布中输出随机值。生成的值遵循具有指定均值和标准差的正态分布,但幅度大于均值 2 个标准差的值将被丢弃并重新选择。

Random Uniform从均匀分布中输出随机值。生成的值遵循 [minval, maxval) 范围内的均匀分布。下限 minval 包含在范围内,而上限 maxval 不包括在内。

关于何时使用其中一种更好,我们不知道。权重只需要是随机的,没有结论性的研究表明一种或另一种分布更适合特定场景。话虽如此,有更好的方法可以完全随机地初始化权重。其中包括非常流行的Xavier初始化程序。

tf.truncated_normal之间的基本区别tf.random_normal是前者生成截断值遵循具有指定均值和标准差的正态分布,而后者输出正态分布的随机值

为什么要使用截断值?
截断的正态分布用于防止产生死神经元
通常应该使用少量噪声初始化权重,以破坏对称性,并防止梯度为 0。由于我们使用的是ReLU神经元,因此最好使用稍微正的初始偏差来初始化它们以避免死神经元
在这里,它得到了很好的回答。