今天跟著書學習 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. Seetf.set_random_seed
for behavior.
我查閱了一些博客窗慎,基本上都是對這段官文的翻譯,請原諒我看了翻譯依然沒搞懂卤材。再回到書上,書上給出的解釋簡直“言簡意賅”峦失,如下:
保證每次運行時的參數(shù)不變
雖然沒搞明白如何不變扇丛,但起碼知道了作用。但不搞明白總覺得有點不舒服尉辑,于是開始實驗帆精。
首先把 seed
設置為 1
import tensorflow as tf
// 把 seed 設置為 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
設置為 2
,代碼不貼了,直接看輸出結(jié)果
[[-0.85811085 -0.19662298 0.13895045]
[-1.2212768 -0.40341285 -1.1454041 ]]
[[-0.85811085]
[-0.19662298]
[ 0.13895045]]
最后把 w1 的 seed
設回 1
卓练,w2 保持不變隘蝎,結(jié)果如下
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
[[-0.85811085]
[-0.19662298]
[ 0.13895045]]
晚上,我換了一臺電腦重復以上的實驗襟企,發(fā)現(xiàn) seed
在等于 1
和 2
的時候嘱么,數(shù)據(jù)是完全一樣的,所以我推斷的結(jié)論是:seed
其實是一些預設的數(shù)據(jù)顽悼。