(tensorflow之十三)random_normal与truncated_normal

一、random_normal与truncated_normal模型

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
shape:1-D向量
mean :均值,默认为0,即正态分布中的 μ
stddev :标准差,默认为1,即正态分布中的 σ
seed : 种子,同一个seed下的分布值均相同;

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
函数内参数定义均相同,与randowm_normal不同的是,truncated_normal是截断正态分布,会删除大于2个stddev的x值;

二、原理

正态分布:

f(x)=12πσe(xu)22σ2

其中:
x的均值
mean=μ=1Ni=0Nxi

x的标准差:
stddev=σ=Ni=0(xiu)2N

若为截断分布(truncated_normal),则x的取值范围
(μ2σ,μ+2σ)

即:
(mean2stddev,mean+2stddev)

三、实例

例1:验证截断分布区间

import tensorflow as tf

a = tf.truncated_normal([10],mean=0.0,stddev=0.1)
b = tf.truncated_normal([10],mean=2.0,stddev=0.1)
sess = tf.Session()
tf.initialize_all_variables()
print("the a is")
print(sess.run(a))
print("the b is")
print(sess.run(b))

结果:

the a is
[-0.10900167  0.09532924 -0.00237158  0.07574951  0.00401584  0.01767288
 -0.04099744  0.15777075 -0.02535285 -0.03226915]
the b is
[ 2.08254194  1.81895053  2.11536264  2.02514029  2.16055202  1.96626019
  1.99408579  2.05209327  2.02856874  2.02580094]

手动计算:
a的均值:
Meana = 0 =mean;
a的取值范围:
(-0.2,0.2)
b的均值:
Meanb = 2;
a的取值范围:
(-1.8,2.2)
上述运行结果与分析是一致的;

例2:验证random_normal的概率分布区间
在正态分布中,1个标准差之内的比率合起来为68%,根据正态分布,两个标准差之内的比率合起来为95%;三个标准差之内的比率合起来为99%。
这里写图片描述
即:对于标准正态分布:
(-1,1)的分布比列为68%;
(-2,2)的分布比例为95%;
(-3 , 3)的分布比例为99%;

import tensorflow as tf

c = tf.random_normal([50],mean=0.0,stddev=1.0)
sess = tf.Session()
tf.initialize_all_variables()
print("the c is")
print(sess.run(c))

输出结果:

the c is
[-1.41222632 -0.75168908  1.49230027 -1.41195393 -0.12301262  0.90974045
  1.11831224  2.16217065  1.82944071 -0.56059802 -1.0226723  -0.52069885
 -0.7191155  -0.15144281 -0.40595549 -0.58284873  0.32606429  0.22194926
 -0.91442436 -0.12363236 -0.68461865 -0.41318798 -1.08459747 -0.59496629
  0.32996842  1.50883079 -0.82251173 -0.96032548 -0.48077932 -0.42245671
 -0.14041233 -0.66213471 -0.34750465 -0.21767929  0.05018979 -0.31193626
 -0.35000741 -0.33972734  0.8502301   0.4139671   0.52582425  0.12983814
 -0.46988574  0.46856686  0.78250223  0.03054166 -1.24476206 -0.49044105
 -0.04101983 -0.65254647]

统计:
(-1,1)共有33个,占比66%;
(-2,2)共有48个,占比96%;
(-3,3)之间共有50个,占比100%;
上述分布的比例与标准正态分布一致

例3:验证seed的用法

import tensorflow as tf

a = tf.truncated_normal([10],mean=0.0,stddev=0.1,seed=1)
b = tf.truncated_normal([10],mean=0.0,stddev=0.1,seed=1)
c = tf.truncated_normal([10],mean=0.0,stddev=0.1)
sess = tf.Session()
tf.initialize_all_variables()
print("the a is")
print(sess.run(a))
print("the b is")
print(sess.run(b))
print("the c is")
print(sess.run(c))

输出结果:

the a is
[-0.08113182  0.14845988  0.00653294  0.00992484  0.06396971  0.16108713
  0.01635356 -0.15157056  0.13587774  0.05417413]
the b is
[-0.08113182  0.14845988  0.00653294  0.00992484  0.06396971  0.16108713
  0.01635356 -0.15157056  0.13587774  0.05417413]
the c is
[ 0.11214073  0.09000708 -0.15859528 -0.0467976   0.05177388  0.00449503
 -0.0553239   0.01862092 -0.07301219 -0.03918289]

比较可知:
因为a与b结果相同,与c则不同。
这是由于a与b指定了相同的seed,因此它们每次分配的值均相同,而c则没有指定相同的seed,则与a,b均不同。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值