切片分配给张量流变量

时间:2018-10-15 20:33:24

标签: python variables tensorflow slice assign

我正在尝试为张量流中的变量切片分配值,但显示以下错误:'ValueError:仅变量支持切片分配'。即使我正在尝试对变量进行切片分配,为什么也会显示此错误。我的代码是这样的:

var1 = var1[startx:endx,starty:endy].assign(tf.ones([endx-startx,endy-starty],dtype=tf.int32))

其中var1是张量流变量。

2 个答案:

答案 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(...)