2017-05-22 16 views
0

次のコードで、tf.Variable valurが2回印刷されても同じ理由は同じです。 tf.truncate_normalはランダムな値を生成するので、私はそれが異なる呼び出しで異なっているはずですか?なぜtf。変数の値は、同じプログラム内の異なる呼び出しで変化しませんか?

`initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0) 
output = tf.Variable(initial) 
sess = tf.InteractiveSession() 
sess.run(tf.initialize_all_variables()) 
print output.eval() 
print output.eval()` 
+0

お使いの言語やシステムなどを指定してみてください。「出力」の値は割り当て時に設定されているため、生成したコードは保存されません。 – Mike

+0

なぜinitial.eval()を印刷しないのですか? –

答えて

1

tf.Variable()Opは「初期」変数を初期値として使用しています。 Variableのヘルプを見ると、_ init _メソッドの最初のパラメータが "initial_value"であることがわかります。

あなたのコードは "tf.initialize_all_variables()"を一度しか呼び出しません。これは、[2,3]行列を作成して同じ値に出力を初期化する "tf.truncated_normal"というinitilaizeを呼び出します。コードは、その変数の2つのコピーを出力します。

initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0) 
output = tf.Variable(initial) 
sess = tf.InteractiveSession() 
sess.run(tf.initialize_all_variables()) 
print output.eval() 
sess.run(tf.initialize_all_variables()) 
print output.eval() 

これは、これが副作用を持っているか、再初期化し、すべての変数(と、あなたが探している機能ではないかもしれません:あなたは再initを可変したい場合は、明示的に次のように述べている必要がありますトラッキングウェイトなど)。

ランダムデータセットを取得する場合は、最初のopを直接呼び出します。また、初期化を必要とする変数やその他の操作がないので、グラフを準備するためにOpを実行する必要はありません。

initial = tf.truncated_normal([2,3], mean=100.0, stddev = 10.0) 
sess = tf.InteractiveSession() 
print initial.eval() 
print initial.eval() 

「初期」演算子と算術演算子を直接混合することもできます。したがって、各sess.run()でランダム変数を検索する場合は、変数を使用せずに最初のOpを直接使用してください。

関連する問題