我正在尝试为张量流中的变量切片分配值,但显示以下错误:'ValueError:仅变量支持切片分配'。即使我正在尝试对变量进行切片分配,为什么也会显示此错误。我的代码是这样的:
var1 = var1[startx:endx,starty:endy].assign(tf.ones([endx-startx,endy-starty],dtype=tf.int32))
其中var1
是张量流变量。
答案 0 :(得分:1)
对var1
进行切片后,它就不再是变量。
numpy样式切片符号(tensor[a:b]
)是较长的张量流符号tf.slice(tensor, a, a+b)
的简写,后者在图形上输出新的张量运算(请参见https://www.tensorflow.org/api_docs/python/tf/slice)。
您要制作的图形看起来像(括号中指示张量输出类型):
Var1
(tf.Variable)-> tf.slice
(tf.Tensor)张量-> tf.assign
(tf.Variable)。
由于分配仅适用于tf.Variable
个对象,因此不适用于切片op的输出。
答案 1 :(得分:1)
另一个答案是正确的;对tf变量执行任何操作都不会(总是)返回tf变量。因此,如果要链接分配,请使用显式控件依赖项:
v = tf.Variable(...)
with tf.control_dependencies([v[...].assign(...)]):
return v[...].assign(...)