2017-09-25 79 views
0

我在Python中有兩個tensorflow程序,它們的差別很小,但兩個程序的權重和偏差總數相同。我有兩個tensorflow程序,如何保持相同的權重和偏差的初始值?

爲了便於比較,我想用相同的初始狀態啓動兩個程序。

程序1個

import tensorflow as tf 

def getVariable(shape): 
    initial = tf.truncated_normal(shape, stddev=0.1) 
    return tf.Variable(initial) 

W = getVariable([10, 10]) 
b = getVariable([10,10]) 
sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 
r = W * b 
print(sess.run(r)) 

計劃2

import tensorflow as tf 

def getVariable(shape): 
    initial = tf.truncated_normal(shape, stddev=0.1) 
    return tf.Variable(initial) 

W1 = getVariable([10, 10]) 
b1 = getVariable([10,10]) 
sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 
r1 = W1 * b1 
print(sess.run(r1)) 

回答

1

Tensorflow有2個不同PRNG和它們中的每要求真實用於生成隨機值的種子。

第一個PRNG是圖形的一個,第二個是操作級別一。

如果您沒有明確設置這些種子,tensorflow將使用隨機值,因此您將始終生成不同的值。

要設置圖形種子,你必須使用tf.sed_random_seed

tf.set_random_seed(1) 

要設置你的操作水平提高到一個種子傳遞給生成隨機值,在你的情況下,每個操作:

tf.truncated_normal(shape, stddev=0.1, seed=1) 
0

您可以使用set_random_seed這樣的:

tf.set_random_seed(42) 

def getVariable(shape): 
    initial = tf.truncated_normal(shape, stddev=0.1) 
    return tf.Variable(initial) 

W = getVariable([10, 10]) 
#... 

然而,如果你這樣做,你仍然會在執行過程中獲得不同的值。要在兩個程序中獲得相同的數字,您仍然需要在代碼開始時使用tf.reset_default_graph() 將圖表重置爲默認值。

相關問題