使用值填充张量中的特定索引

时间:2018-02-17 13:52:47

标签: python arrays tensorflow machine-learning variable-assignment

我是张量流的初学者。 我创造了这个张量

z = tf.zeros([20,2], tf.float32)

我希望将索引z[2,1]z[2,2]的值更改为1.0而不是零。 我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

完全提出的要求是不可能的,原因有两个:

  • z是一个恒定的张量,它无法改变。
  • 没有z[2,2],只有z[2,0]z[2,1]

但是假设您想要将z更改为变量并修复索引,可以这样做:

z = tf.Variable(tf.zeros([20,2], tf.float32))  # a variable, not a const
assign21 = tf.assign(z[2, 0], 1.0)             # an op to update z
assign22 = tf.assign(z[2, 1], 1.0)             # an op to update z

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  print(sess.run(z))                           # prints all zeros
  sess.run([assign21, assign22])
  print(sess.run(z))                           # prints 1.0 in the 3d row

答案 1 :(得分:1)

一种简单的方法:

import numpy as np
import tensorflow as tf

init = np.zeros((20,2), np.float32)
init[2,1] = 1.0
z = tf.variable(init)

或使用tf.scatter_update(ref, indices, updates) https://www.tensorflow.org/api_docs/python/tf/scatter_update

答案 2 :(得分:1)

一种更好的方法是使用tf.sparse_to_dense

tf.sparse_to_dense(sparse_indices=[[0, 0], [1, 2]],
                   output_shape=[3, 4],
                   default_value=0,
                   sparse_values=1,
                   )

输出:

[[1, 0, 0, 0]
 [0, 0, 1, 0]
 [0, 0, 0, 0]]

但是,tf.sparse_to_dense最近被弃用了。因此,使用tf.SparseTensor,然后使用tf.sparse.to_dense获得与上述相同的结果