下面的代码有什么问题?这tf.assign
当应用于 a 的切片时,op 工作得很好tf.Variable
如果它发生在循环之外。但是,在这种情况下,它会给出以下错误。
import tensorflow as tf
v = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
n = len(v)
a = tf.Variable(v, name = 'a')
def cond(i, a):
return i < n
def body(i, a):
tf.assign(a[i], a[i-1] + a[i-2])
return i + 1, a
i, b = tf.while_loop(cond, body, [2, a])
结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/hrbigelow/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 3210, in while_loop
result = loop_context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "/home/hrbigelow/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2942, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "/home/hrbigelow/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2879, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "/home/hrbigelow/ai/lb-wavenet/while_var_test.py", line 11, in body
tf.assign(a[i], a[i-1] + a[i-2])
File "/home/hrbigelow/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/state_ops.py", line 220, in assign
return ref.assign(value, name=name)
File "/home/hrbigelow/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 697, in assign
raise ValueError("Sliced assignment is only supported for variables")
ValueError: Sliced assignment is only supported for variables