2016-02-26 48 views
0

我想tensorflow使用tf.initialize_variables()與特定列表變量能夠初始化。因此,爲了測試我想這樣的話,但它失敗:tf.initialize_variables()不方便 - FailedPreconditionError tensorflow

sess.run(tf.initialize_variables(tf.all_variables())) 

與錯誤:

tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value Layer_0/Initialize_Variables/weights 

什麼是真的怪我,是它的工作原理是這樣的:

sess.run(tf.initialize_variables([tf.all_variables()[0]])) 
sess.run(tf.initialize_variables([tf.all_variables()[1]])) 
sess.run(tf.initialize_variables([tf.all_variables()[2]])) 
... 

所以,如果我創造我自己的,我要初始化變量列表同樣的情況。可能我誤解了張量流機制的某些部分。有任何想法嗎?如果我不必爲每個變量使用循環,我會很高興。

+0

這似乎不可思議/意外,你有一個自包含的例子說明這個錯誤? –

回答

2

很難說沒有看到代碼,但我的猜測是,你從另一個變量,這是TensorFlow有點棘手初始化一個變量。例如,我想你正在做這樣的事情:

v_1 = tf.Variable(...) 
v_2 = tf.Variable(v_1) 

,如果你嘗試做sess.run(tf.initalize_all_variables()),因爲它會嘗試初始化並行v_1v_2這將失敗,但v_2初始化將失敗(因爲其輸入目前未初始化)。

如果您遍歷tf.all_variables()列表中增加的順序,它會工作,因爲v_1被添加到列表v_2之前,因此運行順序的東西會造成v_1v_2之前被初始化。 (在猜測,如果你在相反爲了遍歷tf.all_variables(),它會失敗,類似的錯誤。)

解決方法是有點微妙:任何時候你從另一個變量v_1初始化變量v_2,你應該使用v_1.initialized_value()作爲參數v_2的構造:

v_1 = tf.Variable(...) 
v_2 = tf.Variable(v_1.initialized_value()) 

使用v_1.initialized_value將兩個初始化之間的控制依賴,使v_1v_2之前進行初始化,即使你嘗試初始化它們並行。

+0

很好的猜測。我即將發佈一個自成一體的例子,但你先來。其實我使用的另一種價值的tf.identity()來初始化一個新的,我並沒有對涉嫌的依賴問題(即使我通過「那種不清楚」 Variable.initialized_value(解釋去)文檔幾次)。謝謝! – TasosGlrs

相關問題