利用tf.truncated_normal与tf.random_normal进行张量初始化的详解
2017-11-08 15:56
513 查看
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None
从截断的正态分布中输出随机值。
生成的值服从具有指定平均值和标准偏差的正态分布,如果生成的值大于平均值2个标准偏差的值则丢弃重新选择。
在正态分布的曲线中,横轴区间(μ-σ,μ+σ)内的面积为68.268949%。
横轴区间(μ-2σ,μ+2σ)内的面积为95.449974%。
横轴区间(μ-3σ,μ+3σ)内的面积为99.730020%。
X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这称之为正态分布的“3σ”原则。
在tf.truncated_normal中如果x的取值在区间(μ-2σ,μ+2σ)之外则重新进行选择。这样保证了生成的值都在均值附近。
shape: 一维的张量,也是输出的张量。
mean: 正态分布的均值。
stddev: 正态分布的标准差。
dtype: 输出的类型。
seed: 一个整数,当设置之后,每次生成的随机数都一样。
name: 操作的名字。
weights1 = tf.truncated_normal([5,3], mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) weights2 = tf.truncated_normal([4,3], mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) weights3 = tf.truncated_normal([4,3], mean=1.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) weights4 = tf.truncated_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=None, name=None) weights5 = tf.truncated_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=None, name=None) weights6 = tf.truncated_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=1, name=None) weights7 = tf.truncated_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=1, name='weights') with tf.Session() as sess: wei = sess.run([weights1, weights2, weights3, weights4, weights5, weights6, weights7]) print(wei[0], '\n\n', wei[1],'\n\n', wei[2], '\n\n', wei[3], '\n\n', wei[4], '\n\n', wei[5], '\n\n', wei[6])
输出结果:
[[-0.40593258 -1.01910961 -0.42552167] [-0.37542778 1.21473289 -1.00073791] [ 0.15493505 1.98509014 -0.44988221] [-0.16089663 -0.81307292 1.75576675] [ 1.49424899 0.53253829 -0.44933572]] [[ 1.13885188 1.2209971 0.72404194] 注:改变shape大小(相对于前一个,以下同此) [-0.63705486 0.94489962 1.10668516] [-0.77042389 1.37186134 1.10656345] [-0.64367491 -1.64259684 0.07670152]] [[-0.3131609 2.91000032 0.05345839] 注:改变mean [ 1.02557099 1.4983114 1.0096215 ] [ 0.04088056 -0.46121705 0.84912884] [ 1.6297015 1.78532612 1.63241696]] [[ 1.02556646 1.06140542 0.95061553] 注:改变stddev [ 0.95882273 1.06045055 0.93019575] [ 1.01397991 1.04606271 0.98129165] [ 0.97213674 1.02047527 0.91133404]] [[ 0.8690393 1.02124465 0.98376209] 注:不改变参数 [ 0.86988747 1.00890124 0.94916052] [ 1.08255732 1.18365812 1.02787971] [ 0.92205626 1.08017385 1.0712074 ]] [[ 0.91886818 1.14845991 1.00653291] 注:设置seed [ 1.00992489 1.06396973 1.16108716] [ 1.01635361 0.84842944 1.13587773] [ 1.05417418 0.91399014 0.99959755]] [[ 0.91886818 1.14845991 1.00653291] 注:设置name [ 1.00992489 1.06396973 1.16108716] [ 1.01635361 0.84842944 1.13587773] [ 1.05417418 0.91399014 0.99959755]]分析上面的结果可以看到:
1与2相比改变shape,由[5,3]变为[4,3]; 2与3相比改变mean,3与4相比改变stddev,该两者不容易看出变化;4与5相比不改变任何参数,但是输出的结果却不相同,说明每次数据时随机生成;5与6相比改变seed,有变化但看不出规律;6与7相比,设置name,但seed一样,结果生成随机数也一样。
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
从正态分布中输出随机值。
shape: 一维的张量,也是输出的张量。
mean: 正态分布的均值。
stddev: 正态分布的标准差。
dtype: 输出的类型。
seed: 一个整数,当设置之后,每次生成的随机数都一样。
name: 操作的名字。
参考程序:
weights1 = tf.random_normal([5,3], mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) weights2 = tf.random_normal([4,3], mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) weights3 = tf.random_normal([4,3], mean=1.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) weights4 = tf.random_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=None, name=None) weights5 = tf.random_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=None, name=None) weights6 = tf.random_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=1, name=None) weights7 = tf.random_normal([4,3], mean=1.0, stddev=0.1, dtype=tf.float32, seed=1, name='weights') with tf.Session() as sess: wei = sess.run([weights1, weights2, weights3, weights4, weights5, weights6, weights7]) print(wei[0], '\n\n', wei[1],'\n\n', wei[2], '\n\n', wei[3], '\n\n', wei[4], '\n\n', wei[5], '\n\n', wei[6])
输出结果:
[[ 0.95111936 -0.57976705 0.54291123] [ 1.08912957 1.9003365 -0.51575106] [-0.22056603 0.39582339 -1.45163655] [-0.21177982 -0.94636458 1.94973588] [ 1.41111338 0.08524771 -0.22427951]] [[-0.57301217 0.39068761 -0.0805126 ] 注:改变shape大小(相对于前一个,以下同此) [ 0.83093673 0.22929597 0.58930683] [-1.072523 0.71288842 0.4403919 ] [ 0.10952823 0.80957288 -0.10018495]] [[ 1.23791981 0.23359662 1.06213105] 注:改变mean [ 2.20773888 2.51970339 1.2622081 ] [ 0.50027692 0.81421649 0.42734003] [ 0.44198453 0.75620997 1.00462055]] [[ 0.9260726 0.82585025 1.1689316 ] 注:改变stddev [ 1.06053722 1.10892439 0.99613881] [ 0.9387871 0.99501306 0.9807108 ] [ 1.05458248 1.17204237 1.1695354 ]] [[ 1.06076431 0.96405172 0.89795625] 注:不改变参数 [ 0.8970378 0.91725588 1.14489996] [ 1.09667552 0.9301582 1.02242005] [ 1.05819428 1.19008327 0.81654358]] [[ 0.91886818 1.14845991 1.00653291] 注:设置seed [ 0.75572956 1.00992489 1.05912244] [ 1.0592823 0.78770703 0.92771029] [ 0.99437296 1.06435442 0.97356761]] [[ 0.91886818 1.14845991 1.00653291] 注:设置name [ 0.75572956 1.00992489 1.05912244] [ 1.0592823 0.78770703 0.92771029] [ 0.99437296 1.06435442 0.97356761]]分析上面的结果可以看到:
1与2相比改变shape,由[5,3]变为[4,3]; 2与3相比改变mean,3与4相比改变stddev,该两者不容易看出变化;4与5相比不改变任何参数,但是输出的结果却不相同,说明每次数据时随机生成;5与6相比改变seed,有变化但看不出规律;6与7相比,设置name,但seed一样,结果生成随机数也一样。
另外,当设置不同的seed值时,生成的随机数自然也不同,因此对于以上两种方式给seed的设置中,在无特殊要求时,如果我们想要每次都生成相同的随机数,则只需设置seed=True即可。
结论:tf.truncated_normal与tf.random_normal生成的值服都是从具有指定平均值和标准偏差的正态分布,只不过对tf.truncated_normal而言,如果生成的值大于平均值2个标准偏差的值则丢弃重新选择。
相关文章推荐
- 11、Tensorflow:tf.truncated_normal的用法详解
- tf.truncated_normal与tf.random_normal的区别
- tf.truncated_normal与tf.random_normal
- TensorFlow实战之tf.truncated_normal与tf.random_normal
- tf.truncated_normal与tf.random_normal
- tensorflow生成随机数的操作 tf.random_normal & tf.random_uniform & tf.truncated_normal & tf.random_shuffle
- tf.truncated_normal与tf.random_normal
- tf.truncated_normal与tf.random_normal的详细用法
- tf.truncated_normal 与 tf.random_normal 用法
- 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置
- 利用C语言的部分初始化特性进行字符串的全部初始化。
- 生生阶段的标准正态分布tf.truncated_normal()
- 利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
- [置顶] 【Android】利用Fiddler进行抓包详解教程。抓取接口以及数据,可以抓真实安卓手机或者模拟器。
- 利用*.properties定义文件对类进行初始化或通过xml注入
- Android利用SAX对XML进行增删改查操作详解
- 利用Python中的pandas库对cdn日志进行分析详解
- Ext Js MVC系列二 利用Application和Viewport进行应用程序初始化和页面布局
- tf.truncated_normal的用法
- 利用RandomAccessFile对文件进行切割存储