调整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.SparseTensor
, delta
,表示变化:
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
看到这个