2017-04-05 9 views
0

TensorFlowモデルでローカル変数を使用したいと思います。私は、次の例に私の問題をまとめています初期化されたローカル変数を使用できません

import tensorflow as tf 

with tf.device('/cpu:0'): 
    v = tf.get_local_variable('myvar', [1, 1], initializer=tf.zeros_initializer()) 
    with tf.control_dependencies([tf.variables_initializer([v])]): 
     v2 = tf.identity(v, name='myvar2') 

with tf.Session() as sess: 
    print(sess.run(v2)) 

私は[[ 0. ]]を得ることを期待するが、代わりに、私はエラーを取得する:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value myvar 
     [[Node: myvar/read = Identity[T=DT_FLOAT, _class=["loc:@myvar"], _device="/job:localhost/replica:0/task:0/cpu:0"](myvar)]] 

私は、ローカル変数を初期化して使用することが出来るのですか?

私はTensorFlow 1.0.0とPython 3.5を使用しています。

UPDATE:

私が指摘しているその初期の割り当てをやって自分作業を行います。

import tensorflow as tf 

with tf.device('/cpu:0'): 
    v = tf.get_local_variable('myvar', [1, 1], initializer=tf.zeros_initializer()) 
    v_assigned = v.assign(tf.zeros(v.get_shape(), v.dtype)) 
    v2 = tf.identity(v_assigned, name='myvar2') 

with tf.Session() as sess: 
    print(sess.run(v2)) 

だからですが、セッションの終わりに常に実行を初期化子、どんなに依存関係をどのように設定しますか?それとも、私が行方不明の何か他のものがありますか?

注:私の変数でスライスされた代入を実行したいので、この解決策は十分ではありません(少なくともそれはそのままです)。返された値.assignについては、これを行うことはできません。変数ではなく、変数自体である。コントロールの依存関係としてv_assignedを使用し、次にvに割り当てるのはうまくいくようですが、信頼できるかどうかはわかりません。

答えて

0

tf.identityを使用すると、変数への参照が与えられますが、現在のコントロールの依存関係が更新されていると想定していたようですが、そうではありません。それは私に古い(おそらく初期化されていない)値への参照を与えるだけです。したがって、this answerで説明されているように、read_valueメソッドをtf.Variableとすることが正しい方法です。正しいコードは次のようになります:

import tensorflow as tf 

with tf.device('/cpu:0'): 
    v = tf.get_local_variable('myvar', [1, 1], initializer=tf.zeros_initializer()) 
    with tf.control_dependencies([tf.variables_initializer([v])]): 
     v2 = tf.identity(v.read_value(), name='myvar2') 

with tf.Session() as sess: 
    print(sess.run(v2)) 
関連する問題