调整Tensor中的单值 – TensorFlow

我不好意思问这个问题,但是如何调整一个张量内的单个值呢? 假设你想在张量中只加一个“1”

通过build立索引不起作用:

TypeError: 'Tensor' object does not support item assignment 

一种方法是build立一个0相同形状的张量。 然后在你想要的位置调整1。 那么你可以把两个张量加在一起。 再一次遇到了和以前一样的问题。

我已经通过API文档多次阅读,似乎无法弄清楚如何做到这一点。 提前致谢!

更新: TensorFlow 1.0包含一个tf.scatter_nd()运算符,可以用来在下面创builddelta而不创buildtf.SparseTensor


这对于现有的操作来说实际上是非常棘手的! 也许有人可以build议一个更好的方法来结束以下,但是这里有一个方法来做到这一点。

假设你有一个tf.constant()张量:

 c = tf.constant([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]) 

…并且你想在位置[1,1]加上1.0 。 你可以这样做的一个方法是定义一个tf.SparseTensordelta ,表示变化:

 indices = [[1, 1]] # A list of coordinates to update. values = [1.0] # A list of values corresponding to the respective # coordinate in indices. shape = [3, 3] # The shape of the corresponding dense tensor, same as `c`. delta = tf.SparseTensor(indices, values, shape) 

然后你可以使用tf.sparse_tensor_to_dense() op从delta产生一个稠密的张量,并把它添加到c

 result = c + tf.sparse_tensor_to_dense(delta) sess = tf.Session() sess.run(result) # ==> array([[ 0., 0., 0.], # [ 0., 1., 0.], # [ 0., 0., 0.]], dtype=float32) 

如何tf.scatter_update(ref, indices, updates)tf.scatter_add(ref, indices, updates)

 ref[indices[...], :] = updates ref[indices[...], :] += updates 

看到这个