tf.truncated_normal和tf.random_normal有什么区别?
machine-learning
tensorflow
4
0

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)从正态分布中输出随机值。

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)从截断的正态分布中输出随机值。

我尝试谷歌搜索“截断正态分布”。但是并不太了解。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

tf.truncated_normal()API文档将函数描述为:

从截断的正态分布中输出随机值。

生成的值遵循具有指定平均值和标准偏差的正态分布,不同之处在于,将丢弃幅度大于平均值的2个标准偏差的值并重新选择。

收藏
评论

文档说明了一切:对于截断的正态分布:

生成的值遵循具有指定平均值和标准偏差的正态分布,不同之处在于,将丢弃幅度大于平均值的2个标准偏差的值并重新选择。

通过为自己绘制图表很容易理解差异(%magic是因为我使用jupyter笔记本):

import tensorflow as tf
import matplotlib.pyplot as plt

%matplotlib inline  

n = 500000
A = tf.truncated_normal((n,))
B = tf.random_normal((n,))
with tf.Session() as sess:
    a, b = sess.run([A, B])

现在

plt.hist(a, 100, (-4.2, 4.2));
plt.hist(b, 100, (-4.2, 4.2));

在此处输入图片说明


使用截断法线的目的是克服Sigmoid等tome功能的饱和(如果该值太大/太小,则神经元将停止学习)。

收藏
评论

tf.truncated_normal()从正态分布中选择均值接近于0且值接近于0的随机数。例如,从-0.1到0.1。之所以称其为“截断”是因为您从正态分布中切除了尾巴。

tf.random_normal()从均值接近于0的正态分布中选择随机数,但值之间的距离可能tf.random_normal()远一些。例如,从-2到2。

在机器学习中,实际上,您通常希望权重接近0。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号