我觉得这很尴尬,但你如何在张量内调整单个值?假设你想在张量中只有一个值加'1'?
通过索引编写它不起作用:
TypeError: 'Tensor' object does not support item assignment
一种方法是建立一个相同形状的0张量.然后在您想要的位置调整1.然后你将两个张量加在一起.这又遇到了和以前一样的问题.
我已多次阅读API文档,似乎无法弄清楚如何执行此操作.提前致谢!
更新: TensorFlow 1.0包含一个tf.scatter_nd()
运算符,可用于创建delta
下面而不创建tf.SparseTensor
.
对于现有的操作,这实际上是非常棘手的!也许有人可以建议一个更好的方法来结束以下,但这是一种方法来做到这一点.
假设你有一个tf.constant()
张量:
c = tf.constant([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])
...并且您想要1.0
在位置[1,1]添加.你可以做到这一点的方法之一是定义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
看到这个.