2017-06-01 75 views
2
import tensorflow as tf 
x = tf.constant(35, name='x') 
y = tf.Variable(x + 5, name='y') 
# model = tf.global_variables_initializer() 
with tf.Session() as session: 
     print("x = ", session.run(x)) 
     # session.run(model) 
     print("y = ", session.run(y)) 

我無法理解global_variables_initializer()何時實際需要。在上面的代碼中,如果我們取消註釋行4 & 7,我可以執行代碼並查看值。如果我按原樣運行,我會看到崩潰。我的問題是它正在初始化哪些變量。 'x'是一個不需要初始化的常量,'y'是未被初始化的變量,但用作算術運算。當實際需要global_variables_initializer()時

回答

2

tf.global_variables_initializer是初始化所有全局變量的快捷方式。這不是必需的,您可以使用其他方式初始化變量,或者在簡單腳本的情況下,有時您根本不需要初始化它們。

除變量之外的所有內容都不需要初始化(常量和佔位符)。但每個使用變量(即使它是一個常量)應該被初始化。這會給你一個錯誤,儘管z只是只有一個數字的0-d張量。

import tensorflow as tf 
z = tf.Variable(4) 
with tf.Session() as session: 
     print(session.run(z)) 

我強調用這個詞,因爲如果你只是未運行變量(或運行不依賴於他們),你並不需要初始化它們。


例如,此代碼將執行沒有任何問題,但它有2個變量和一個取決於他們的操作。但運行並不需要它們。

import tensorflow as tf 
x = tf.constant(35, name='x') 
y = tf.Variable(x + 5, name='y') 
z = tf.Variable(4) 
a = y + z 
with tf.Session() as session: 
     print("x = ", session.run(x)) 
+0

在我的代碼中,沒有像「z = tf.Variable(4)」這樣的變量的「顯式初始化」。但是我使用了變量y,它是算術運算的輸出,它正在通過sess.run()進行評估。在這種情況下,它需要「隱式初始化」,因此我們需要變量初始化? – Vinay

+0

@Vinay「沒有明確的初始化」是什麼意思?如果不是初始化,這是什麼? 'tf.Variable(x + 5,name ='y')' –

+0

謝謝,你說得對。我把這個陳述當作算術運算而不是初始化。 – Vinay

1

docs(重點煤礦):

調用tf.Variable()增加了幾個OPS到圖形:

  • 保持該變量值的變量的運算。
  • 初始化程序op將變量設置爲其初始值。這實際上是一個tf.assign操作。
  • 初始值的操作,例如示例中的偏差變量的零操作也被添加到圖中。

後來,

變量初始化必須明確其他OPS前將 模式下運行,可以運行。最簡單的方法是添加一個運行 所有變量初始值設定項的操作,並在使用該模型之前運行該操作。

總之,global_variables_initializer從不需要,Variable初始化是。只要你的代碼中有Variables,你就必須首先初始化它們。 global_variables_initializer幫助程序初始化之前已經聲明的所有Variables,因此只是一個非常方便的方法。

1

這是從來沒有要求,除非你使用的是聲明tf.Variabletf.placeholder從tensorflow會話內運行。就我個人而言,我總是習慣於運行tf.global_variables_initializer()。它運行tensorflow模型的時候,幾乎成爲鍋爐板代碼的一部分:

with tf.Session(graph=graph) as sess: 
    sess.run(tf.global_variables_initializer()) 

    # run model etc... 
1

tf.global_variables_initializer只是初始化所有變量tf.global_variables()將列出。這在圖形可能位於羣集中的不同計算節點中的分佈式環境中實際上是非常有意義的。

在這種情況下,tf.global_variables_initializer()這僅僅是爲tf.variables_initializer(tf.global_variables())別名將初始化中的所有計算節點,其中所述圖被放置所有的變量。

相關問題