2017-06-01 18 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 &のコメントを外すと、コードを実行して値を見ることができます。私が現状で走れば、クラッシュすることがあります。私の質問はどの変数を初期化しているかです。 'x'は初期化を必要としない定数であり、 'y'は初期化されていないが算術演算として使用される変数である。 docs(強調鉱山)からglobal_variables_initializer()が実際に必要な場合

答えて

2

tf.global_variables_initializerは、すべてのグローバル変数を初期化するためのショートカットです。これは必須ではなく、他の方法で変数を初期化することもできますし、簡単なスクリプトの場合には、初期化する必要がないこともあります。

変数以外のすべては、初期化(定数およびプレースホルダ)を必要としません。しかし、(固定定数であっても)の変数を使用するたびに初期化する必要があります。 zは数字が1つしかない0-dテンソルですが、これによりエラーが発生します。

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

あなただけの実行(または実行の非がそれらに依存して)あなたがそれらを初期化する必要はありませんされていない変数を持っている場合ので、私は、使用される単語を強調しました。


たとえば、このコードは問題なく実行されますが、それにもかかわらず2つの変数と1つの操作があります。しかし、実行する必要はありません。

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)"のような "明示的な初期化"はありません。しかし、私は算術演算の出力であり、sess.run()を通して評価されている変数yを使用しました。そのような場合、「暗黙的に初期化する」必要があり、したがって変数の初期化が必要ですか? – Vinay

+0

@Vinay '明示的な初期化なし'とはどういう意味ですか?そして初期化ではない場合、これは何ですか? 'tf.Variable(x + 5、name = 'y')' –

+0

ありがとうございます。私はその文を初期化としてではなく算術演算と考えていました。 – Vinay

1

:tf.Variable()を呼び出す

グラフに、いくつかのオペレーションを追加:

  • 変数の値を保持する変数OP。
  • 変数を初期値に設定するイニシャライザopがあります。これは実際にはtf.assign opです。
  • 例のバイアス変数のゼロ演算など、初期値の演算もグラフに追加されます。

その後、

変数初期化子はあなたの モデルでを実行することができ、他のOPS前に明示的に実行する必要があります。これを行う最も簡単な方法は、 すべての変数初期化子を実行するopを追加し、そのモデルを使用する前にそのopを実行することです。

要するに、global_variables_initializerは決して必要ではなく、Variableの初期化です。あなたのコードにVariablesがあるときはいつも、それらを最初に初期化する必要があります。 global_variables_initializerヘルパーは、以前に宣言されているVariablesをすべて初期化します。そのため、これは非常に便利な方法です。

1

あなたtensorflowセッションの実行内から宣言tf.Variableまたはtf.placeholderを使用していない限り、それは要件ことはありません。個人的には、私は常にそれを実行する習慣を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.variables_initializer(tf.global_variables())ためだけの別名であるtf.global_variables_initializer()グラフが配置されているすべてのコンピューティングノードのすべての変数を初期化するであろう。

関連する問題