關(guān)于tf.random_normal方法中seed的作用

今天跟著書學(xué)習(xí) TF 的時候,看到代碼示例里面有這么一段代碼:

import tensorflow as tf
...
w1 = tf.random_normal([2,3], stddev=1, seed=1)
w2 = tf.random_normal([3,1], stddev=1, seed=1)
...

我們知道 tf.random_normal 方法是生成隨機的矩陣參數(shù),如上例中就是生成一個3×1的矩陣,stddev 參數(shù)是控制方差,這些都好理解,就是看到這個 seed 參數(shù)的時候有點懵,下面截取的是官方 API 的解釋:

seed: A Python integer. Used to create a random seed for the distribution. See tf.set_random_seed for behavior.

我查閱了一些博客,基本上都是對這段官文的翻譯,請原諒我看了翻譯依然沒搞懂。再回到書上,書上給出的解釋簡直“言簡意賅”,如下:

保證每次運行時的參數(shù)不變

雖然沒搞明白如何不變,但起碼知道了作用。但不搞明白總覺得有點不舒服,于是開始實驗。

首先把 seed 設(shè)置為 1

import tensorflow as tf
// 把 seed 設(shè)置為 1
w1 = tf.random_normal([2,3], stddev=1, seed=1)
w2 = tf.random_normal([3,1], stddev=1, seed=1)

sess =  tf.Session()
sess.run(w1.initializer)
sess.run(w2.initializer)
print(sess.run(w1))
print(sess.run(w2))
sess.close()

我們看到輸出結(jié)果

[[-0.8113182   1.4845988   0.06532937]
 [-2.4427042   0.0992484   0.5912243 ]]
[[-0.8113182 ]
 [ 1.4845988 ]
 [ 0.06532937]]

然后把 seed 設(shè)置為 2,代碼不貼了,直接看輸出結(jié)果

[[-0.85811085 -0.19662298  0.13895045]
 [-1.2212768  -0.40341285 -1.1454041 ]]
[[-0.85811085]
 [-0.19662298]
 [ 0.13895045]]

最后把 w1seed 設(shè)回 1w2 保持不變,結(jié)果如下

[[-0.8113182   1.4845988   0.06532937]
 [-2.4427042   0.0992484   0.5912243 ]]
[[-0.85811085]
 [-0.19662298]
 [ 0.13895045]]

晚上,我換了一臺電腦重復(fù)以上的實驗,發(fā)現(xiàn) seed 在等于 12 的時候,數(shù)據(jù)是完全一樣的,所以我推斷的結(jié)論是:seed 其實是一些預(yù)設(shè)的數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容