1、首先是tf.truncated_normal函数
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
shape是张量维度,mean是正态分布是均值,stddev是正态分布的标准差;
在正态分布的曲线中,横轴区间(μ-σ,μ+σ)内的面积为68.268949%。
横轴区间(μ-2σ,μ+2σ)内的面积为95.449974%。
横轴区间(μ-3σ,μ+3σ)内的面积为99.730020%。
X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这称之为正态分布的“3σ”原则。
它是从截断的正态分布中输出随机值,虽然同样是输出正态分布,但是它生成的值是在距离均值两个标准差范围之内的,也就是说,在tf.truncated_normal中如果x的取值在区间(μ-2σ,μ+2σ)之外则重新进行选择。这样保证了生成的值都在均值附近。(就是tf.truncated_normal要求一定在(μ-2σ,μ+2σ)之内的)
2、tf.random_normal
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
参数设置和上一个函数是一样的;而tf.random_normal是没有要求一定在(μ-2σ,μ+2σ)之内的
栗子如下:
tf.random.truncated_normal([1,20],mean=0,stddev=1)
tf.random.normal([1,20],mean=0,stddev=1)
输出:
<tf.Tensor: id=364, shape=(1, 20), dtype=float32, numpy=
array([[ 0.74720275, -1.1767515 , 0.09829349, 1.2309431 , -0.18770336,
-0.19928017, 0.65101445, -1.9098037 , -0.65658724, 1.1121495 ,
0.24020088, 0.28579718, 0.2422212 , 1.2854978 , 0.06769391,
0.06866605, -0.40443522, -0.7642372 , -0.14883408, 1.7334417 ]],
dtype=float32)>
“”-------------------------------------------------------------------------------------------------“”
<tf.Tensor: id=334, shape=(1, 20), dtype=float32, numpy=
array([[-0.05804796, 0.7271128 , -0.61302084, 2.581096 , 0.23641904,
1.1948391 , 0.32050255, -1.4485282 , -0.42738464, -0.49595687,
-0.626704 , 0.2393944 , 0.05834303, 0.56142724, 2.1754766 ,
0.2616568 , -0.19354585, -1.3995165 , -0.88972414, -1.0796475 ]],
dtype=float32)>
可见tf.random.normal里面有2个数是在(-2,2)范围以外的,而tf.random.truncated_normal则全在(-2,2)范围内。
超级参考:https://www.cnblogs.com/yqpy/p/11040245.html
参考:https://blog.csdn.net/fireflychh/article/details/73692183