Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
如何在TensorFlow中执行PyTorch样式的张量切片更新?_Tensorflow_Slice_Tensor - Fatal编程技术网

如何在TensorFlow中执行PyTorch样式的张量切片更新?

如何在TensorFlow中执行PyTorch样式的张量切片更新?,tensorflow,slice,tensor,Tensorflow,Slice,Tensor,在Pytork中,您可以轻松地更新张量,如下所示: for i in range(x_len): tensor_abc[:, i, i] = 0 如何更新tensorflow中的张量 我尝试了tf.assign和tf.scatter\u update,但没有完成她的工作。这个答案只适用于变量 import tensorflow as tf sess = tf.InteractiveSession() v = tf.zeros((5,5,5)) var = tf.Variable(

在Pytork中,您可以轻松地更新张量,如下所示:

 for i in range(x_len):
     tensor_abc[:, i, i] = 0
如何更新tensorflow中的张量


我尝试了tf.assign和tf.scatter\u update,但没有完成她的工作。

这个答案只适用于变量

import tensorflow as tf

sess = tf.InteractiveSession()
v = tf.zeros((5,5,5))
var = tf.Variable(initial_value=v)


init = tf.variables_initializer([var])
sess.run(init)


var = var[ 1 : 2 ,
           1 : 2 ,
           1 : 2 ].assign(tf.ones((1,1,1)))

print(sess.run(var))
这就产生了

[[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 1. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]]
还有这个

var = var[ 1 : 2 ,
           0 : 1 ,
           0 : 1 ].assign(tf.ones((1,1,1)))
产生

  [[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[1. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

  ....
  ....]]
另一个例子是

var = var[ 1 : 2 ,
             : 2 ,
             : 2 ].assign(tf.ones((1,2,2)))

[[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[1. 1. 0. 0. 0.]
  [1. 1. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

      ....
      ....]]

你应该探索张量。

这个答案只适用于变量

import tensorflow as tf

sess = tf.InteractiveSession()
v = tf.zeros((5,5,5))
var = tf.Variable(initial_value=v)


init = tf.variables_initializer([var])
sess.run(init)


var = var[ 1 : 2 ,
           1 : 2 ,
           1 : 2 ].assign(tf.ones((1,1,1)))

print(sess.run(var))
这就产生了

[[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 1. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]]
还有这个

var = var[ 1 : 2 ,
           0 : 1 ,
           0 : 1 ].assign(tf.ones((1,1,1)))
产生

  [[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[1. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

  ....
  ....]]
另一个例子是

var = var[ 1 : 2 ,
             : 2 ,
             : 2 ].assign(tf.ones((1,2,2)))

[[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[1. 1. 0. 0. 0.]
  [1. 1. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

      ....
      ....]]
你应该探索张量。

是唯一可以更新的张量。对于变量,您可以使用诸如聚集和分散更新之类的代码进行切片

注意,其他张量不适合赋值。如果这就是你想要做的,我想知道为什么这是必要的。然而,仍然可以使用您想要的值创建新的张量,而不是使用有点复杂的代码就地赋值。例如,以下操作不起作用:

index = ... tensor = tf.constant([0,1,2,3,4]) 
tensor[i] = 0  
## Doesn't work (TypeError: `Tensor` object does not support item assignment)
但这两种方法中的任何一种都可以起到同等作用:

tensor = tf.constant([0,1,2,3,4]) 
tensor = tf.concat([tensor[:i], tf.zeros_like(tensor[i:i+1]), tensor[i+1:]], 0)  
## This works, creates a new tensor
张量=tf.常数[0,1,2,3,4] 张量=tf.concat[tensor[:i],tf.fill[1],0,张量[i+1:],0 这样做,创建一个新的张量是唯一可以更新的张量。对于变量,您可以使用诸如聚集和分散更新之类的代码进行切片

注意,其他张量不适合赋值。如果这就是你想要做的,我想知道为什么这是必要的。然而,仍然可以使用您想要的值创建新的张量,而不是使用有点复杂的代码就地赋值。例如,以下操作不起作用:

index = ... tensor = tf.constant([0,1,2,3,4]) 
tensor[i] = 0  
## Doesn't work (TypeError: `Tensor` object does not support item assignment)
但这两种方法中的任何一种都可以起到同等作用:

tensor = tf.constant([0,1,2,3,4]) 
tensor = tf.concat([tensor[:i], tf.zeros_like(tensor[i:i+1]), tensor[i+1:]], 0)  
## This works, creates a new tensor
张量=tf.常数[0,1,2,3,4] 张量=tf.concat[tensor[:i],tf.fill[1],0,张量[i+1:],0
这是可行的,创建一个新的张量,或者创建一个新的张量,但多维张量有可能吗?例如,将下面的张量的所有对角线更新为0:tensor=tf。变量[[1,2,3],[4,5,6],[7,8,9],[3,2,1],[6,5,4],[9,8,7],[2,2],[2,2,2],[2,2,2]]如果使用变量,可以使用tf.scatter\u update而不是创建新的张量。对于您的具体示例,您所说的“所有对角线”是什么意思?你指的是哪个轴?你能给我举一个期望得到的矩阵的例子吗?这将允许我提供一个更具体的代码示例创建新的张量会起作用,但多维张量有可能吗?例如,将下面的张量的所有对角线更新为0:tensor=tf。变量[[1,2,3],[4,5,6],[7,8,9],[3,2,1],[6,5,4],[9,8,7],[2,2],[2,2,2],[2,2,2]]如果使用变量,可以使用tf.scatter\u update而不是创建新的张量。对于您的具体示例,您所说的“所有对角线”是什么意思?你指的是哪个轴?你能给我举一个期望得到的矩阵的例子吗?这将允许我提供一个更具体的代码示例