今天跟著書學(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. Seetf.set_random_seedfor 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]]
最后把 w1 的 seed 設(shè)回 1,w2 保持不變,結(jié)果如下
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
[[-0.85811085]
[-0.19662298]
[ 0.13895045]]
晚上,我換了一臺電腦重復(fù)以上的實驗,發(fā)現(xiàn) seed 在等于 1 和 2 的時候,數(shù)據(jù)是完全一樣的,所以我推斷的結(jié)論是:seed 其實是一些預(yù)設(shè)的數(shù)據(jù)。