Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tensorflow变量的切片赋值_Python_Variables_Tensorflow_Slice_Assign - Fatal编程技术网

Python tensorflow变量的切片赋值

Python tensorflow变量的切片赋值,python,variables,tensorflow,slice,assign,Python,Variables,Tensorflow,Slice,Assign,我试图在tensorflow中为变量的切片赋值,但显示了以下错误:“ValueError:切片赋值仅支持变量”。为什么即使我尝试对变量进行切片赋值,也会显示此错误。我的代码是这样的: var1 = var1[startx:endx,starty:endy].assign(tf.ones([endx-startx,endy-starty],dtype=tf.int32)) 其中var1是一个tensorflow变量。一旦var1被切片,它就不再是一个变量 numpy风格的切片表示法(tensor

我试图在tensorflow中为变量的切片赋值,但显示了以下错误:“ValueError:切片赋值仅支持变量”。为什么即使我尝试对变量进行切片赋值,也会显示此错误。我的代码是这样的:

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

其中
var1
是一个tensorflow变量。

一旦
var1
被切片,它就不再是一个变量

numpy风格的切片表示法(
tensor[a:b]
)只是较长的tensorflow表示法
tf.slice(tensor,a,a+b)
的简写,它在图形上输出一个新的张量操作(请参阅)

您试图创建的图形如下所示(括号中显示了张量输出类型):

Var1
(tf.Variable)->
tf.slice
(tf.Tensor)Tensor->
tf.assign
(tf.Variable)


由于赋值只作用于
tf.Variable
对象,它不能作用于切片运算的输出。

另一个答案是正确的;对tf变量执行任何操作都不会(始终)返回tf变量。因此,如果要链接分配,请使用显式控件依赖项:

v = tf.Variable(...)
with tf.control_dependencies([v[...].assign(...)]):
  return v[...].assign(...)

能否显示创建
var1
的代码?也请张贴
print(var1)的输出;打印(键入(var1))
。欢迎使用堆栈溢出!您能告诉我们
var1
最初是如何定义的吗?或者至少是再现完全相同错误的东西?通过创建一个适当的,回答这个问题就会容易得多。@a_guest无论变量节点是否正确实例化了
var1
,切片操作已经导致了这个错误。(当然,在给出的代码段之外可能还有更多的问题!)因为您正在将
assign
op分配回
var1
我怀疑您以前已经这样做过,而
var1
现在持有一个assign操作。请注意,此赋值发生在适当的位置,不会返回新的张量对象。因此,重新分配给相同的名称实际上没有意义。请尝试
tf.Variable([1,2])[0:1]。分配(tf.ones((1,))
。更可能的情况是,
var1
之前已被切片,显示的op是后续切片。感谢您的澄清。非常感谢。