# 利用tf.truncated_normal与tf.random_normal进行张量初始化的详解

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None

X落在（μ-3σ，μ+3σ）以外的概率小于千分之三，在实际问题中常认为相应的事件是不会发生的，基本上可以把区间（μ-3σ，μ+3σ）看作是随机变量X实际可能的取值区间，这称之为正态分布的“3σ”原则。

### 参数说明:

• 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一样，结果生成随机数也一样。

• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

埃尘万象

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文
01-11 571

04-14 1898