当前位置:  开发笔记 > 人工智能 > 正文

在Tensor中调整单值 - TensorFlow

如何解决《在Tensor中调整单值-TensorFlow》经验,为你挑选了2个好方法。

我觉得这很尴尬,但你如何在张量内调整单个值?假设你想在张量中只有一个值加'1'?

通过索引编写它不起作用:

TypeError: 'Tensor' object does not support item assignment

一种方法是建立一个相同形状的0张量.然后在您想要的位置调整1.然后你将两个张量加在一起.这又遇到了和以前一样的问题.

我已多次阅读API文档,似乎无法弄清楚如何执行此操作.提前致谢!



1> mrry..:

更新: 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)



2> 小智..:

怎么样tf.scatter_update(ref, indices, updates)还是tf.scatter_add(ref, indices, updates)

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

看到这个.


仅当ref是变量时才有效。
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有