Matrix 张量流中的矩阵元处理

Matrix 张量流中的矩阵元处理,matrix,indexing,element,variable-assignment,tensorflow,Matrix,Indexing,Element,Variable Assignment,Tensorflow,如何在tensorflow中执行以下操作 mat = [4,2,6,2,3] # mat[2] = 0 # simple zero the 3rd element 我不能使用[]括号,因为它只对常量有效,而对 变量。我也不能使用slice函数,因为它返回一个张量,而不能赋值给张量 import tensorflow as tf sess = tf.Session() var1 = tf.Variable(initial_value=[2, 5, -4, 0]) assignZerosOP =

如何在tensorflow中执行以下操作

mat = [4,2,6,2,3] #
mat[2] = 0 # simple zero the 3rd element
我不能使用[]括号,因为它只对常量有效,而对 变量。我也不能使用slice函数,因为它返回一个张量,而不能赋值给张量

import tensorflow as tf
sess = tf.Session()
var1 = tf.Variable(initial_value=[2, 5, -4, 0])
assignZerosOP = (var1[2] = 0) # < ------ This is what I want to do

sess.run(tf.initialize_all_variables())

print sess.run(var1)
sess.run(assignZerosOP)
print sess.run(var1)

你不能改变张量,但是,正如你所说,你可以改变一个变量

有三种模式可用于实现您的目标:

(a) 用于直接戳到要更改的变量部分

import tensorflow as tf

a = tf.Variable(initial_value=[2, 5, -4, 0])
b = tf.scatter_update(a, [1], [9])
init = tf.initialize_all_variables()

with tf.Session() as s:
  s.run(init)
  print s.run(a)
  print s.run(b)
  print s.run(a)
[25-40]

[29-40]

[29-40]

(b) 创建张量的两个
tf.slice()
s,不包括要更改的项,然后
tf.concat(0[a,0,b])
将它们重新组合在一起

(c) 创建类似于(a)的
b=tf.zero\u,然后使用
tf.select()
a
中选择所需的项目,以及从
b
中选择所需的零


我之所以加入(b)和(c),是因为它们处理的是正态张量,而不仅仅是变量。

多谢了,这肯定是有帮助的,我可以处理,但这会有点复杂。如果我真的需要改变张量呢?没有办法吗?我想实现网络可视化,我需要将图像传播到激活层,除随机激活外,将所有激活置零,然后将其传播回来。张量是不可变的。一般来说,如果您想要保存和更改状态,您可以将其存储在一个变量中,您可以对该变量进行变异。但除此之外,您只需创建一个从原始张量派生的新张量并使用它。在您描述的案例中,这可能就是方法。谢谢您的回答。我解决了这个问题,使用了一个新的张量,这个张量是按照您的建议从原始张量派生的。我找不到
tf。请在我的tensorflow 1.0.0版中选择
。是否有替换?
tf.select
更改为
tf.where
,与tf 1.0后的
np.where
一样。
import tensorflow as tf

a = tf.Variable(initial_value=[2, 5, -4, 0])
b = tf.scatter_update(a, [1], [9])
init = tf.initialize_all_variables()

with tf.Session() as s:
  s.run(init)
  print s.run(a)
  print s.run(b)
  print s.run(a)