tf.Variable.read_value()
は、TensorFlow 0.12以降のtf.Variable.ref()
の代わりです。
このメソッドのユースケースは、説明するのがやや難解で、異なるデバイス上のリモート変数を複数回使用するとキャッシュされた値を使用するキャッシング動作によって動機付けられます。あなたは、次のコードを持っているとしましょう:
with tf.device("/cpu:0")
v = tf.Variable([[1.]])
with tf.device("/gpu:0")
# The value of `v` will be captured at this point and cached until `m2`
# is computed.
m1 = tf.matmul(v, ...)
with tf.control_dependencies([m1])
# The assign happens (on the GPU) after `m1`, but before `m2` is computed.
assign_op = v.assign([[2.]])
with tf.control_dependencies([assign_op]):
with tf.device("/gpu:0"):
# The initially read value of `v` (i.e. [[1.]]) will be used here,
# even though `m2` is computed after the assign.
m2 = tf.matmul(v, ...)
sess.run(m2)
あなたが後でもう一度変数を読み取ることTensorFlowを強制的にtf.Variable.read_value()
を使用することができ、そしてそれは依存関係が所定の位置にあるものは何でも制御の対象となります。 m2
を計算するときに割り当てるの結果を確認したい場合、あなたはプログラムの最後のブロックを変更したいので、次のように:OPSのすべてが同じであった場合
with tf.control_dependencies([assign_op]):
with tf.device("/gpu:0"):
# The `read_value()` call will cause TensorFlow to transfer the
# new value of `v` from the CPU to the GPU before computing `m2`.
m2 = tf.matmul(v.read_value(), ...)
が(現在、なお同じデバイス上のオペアンプへの入力として使用された場合、TensorFlowは変数のコピーを作成しないため、は
read_value()
を使用する必要があります。—変数を待ち行列にエンキューしよう!—これは、変数のメモリモデルの拡張に取り組んでいる理由の1つです。
Tha迅速かつ詳細な答えを得るために非常に多くの。非常に有益で、私はよく理解できました。 – user270700