在Tensorflow 1.10中,我试图了解tf.while_loop
的工作方式。在下面的代码中,有两个变量被发送到循环中:count
和x
。 count
用于确保循环被调用10次。然后,x
用于存储循环中要处理的某些数据。我希望能够在循环过程中更改x
的某些元素的值。
这是我的代码:
def loop(count, x):
x[0].assign(5)
count = tf.add(count, 1)
count = tf.constant(0, dtype=tf.int32)
x = tf.Variable(tf.zeros([10]), dtype=tf.float32)
cond = lambda count, x: tf.less(count, 10)
count, x = tf.while_loop(cond, loop, [count, x])
sess = tf.Session()
sess.run(x.initializer)
print(sess.run(x))
因此,在第x[0].assign(5)
行中,我想将x
的第0个元素分配为值5。然后在循环的所有10次迭代中完成此操作。 (是的,这是没有意义的,但这只是要调试的玩具代码。)
但是,运行此代码会出现以下错误:
ValueError: Sliced assignment is only supported for variables
它引用x[0].assign(5)
的行。因此,似乎无法在此循环中分配x
的元素。
但是,x
是tf.Variable
,如果我要在循环外运行操作x[0].assign(5)
,它可以正常工作。因此,当x
发送到循环中时,似乎改变了x
的类型,使得它不再能够以这种方式进行切片。
有帮助吗?谢谢。