入れ子のwhile_loop()
の二次元テンソルを更新しようとしています。私はWHILE_LOOP外の変数を作成し、最初のループでそれを使用する場合TensorFlow while_loopは変数を定数に変換しますか?
ValueError: Sliced assignment is only supported for variables
はどういうわけか、それが正常に動作します:しかし、第二のループに変数を渡すとき、私はそれがこのエラーがスローされますようtf.assign()
を使用して、それを更新することはできません。
2番目のwhileループで2Dのtf変数を変更するにはどうすればよいですか?
私のコード(私は、Python 2.7とTensorFlow 1.2を使用しています):ループ変数が異なって実装されているよう
import tensorflow as tf
import numpy as np
tf.reset_default_graph()
BATCH_SIZE = 10
LENGTH_MAX_OUTPUT = 31
it_batch_nr = tf.constant(0)
it_row_nr = tf.Variable(0, dtype=tf.int32)
it_col_nr = tf.constant(0)
cost = tf.constant(0)
it_batch_end = lambda it_batch_nr, cost: tf.less(it_batch_nr, BATCH_SIZE)
it_row_end = lambda it_row_nr, cost_matrix: tf.less(it_row_nr, LENGTH_MAX_OUTPUT+1)
def iterate_batch(it_batch_nr, cost):
cost_matrix = tf.Variable(np.ones((LENGTH_MAX_OUTPUT+1, LENGTH_MAX_OUTPUT+1)), dtype=tf.float32)
it_rows, cost_matrix = tf.while_loop(it_row_end, iterate_row, [it_row_nr, cost_matrix])
cost = cost_matrix[0,0] # IS 1.0, SHOULD BE 100.0
return tf.add(it_batch_nr,1), cost
def iterate_row(it_row_nr, cost_matrix):
# THIS THROWS AN ERROR:
cost_matrix[0,0].assign(100.0)
return tf.add(it_row_nr,1), cost_matrix
it_batch = tf.while_loop(it_batch_end, iterate_batch, [it_batch_nr, cost])
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
out = sess.run(it_batch)
print(out)
あなたはあなたの解決策を見つけることができ、答えではないの質問に編集としてあなたのソリューションを渡してください[改訂3](https://stackoverflow.com/revisions/44912041/:ループは次のようになります3)、ちょうどコピーしてそれを答えに入れる –