tf.scatter_add 适用于一维(形状 1)张量:
> S = tf.Variable(tf.constant([1,2,3,4]))
> sess.run(tf.initialize_all_variables())
> sess.run(tf.scatter_add(S, [0], [10]))
array([11, 2, 3, 4], dtype=int32)
> sess.run(tf.scatter_add(S, [0, 1], [10, 100]))
array([ 21, 102, 3, 4], dtype=int32)
但是我怎样才能增加,比如
的 [0,0] 元素M = tf.Variable(tf.constant([[1,2], [3,4]]))
使其成为 [[2, 2], [3, 4]] 使用 tf.scatter_add?
official documentation有点神秘。我尝试了不同的 arg 值,比如说
> sess.run(tf.scatter_add(M, [[0, 0]], [1]))
*** ValueError: Shapes (1,) and (1, 2, 2) are not compatible
还没有成功。
顺便说一句,在我的例子中,M 非常大并且可以动态调整大小。 所以给M加上0-but-1等于1的元素矩阵就不是这样了。
最佳答案
tf.scatter_add
更新张量的切片并且不能更新单个系数。例如,它可以一次更新矩阵的整行。
此外,tf.scatter_add
的 updates
参数的形状取决于其 indices
参数的形状。当 ref
参数是形状为 (M, N)
的矩阵时,则
- 如果
indices
是标量i
,则updates
应该是形状为(N)
的向量。 - 如果
indices
是形状为(k)
的向量[i1, i2, .. ik]
,则updates
的格式应为(k, N)
。
在你的情况下,你可以简单地将 [1, 0]
添加到 M
的第一行,如下所示以获得你想要的效果:
sess.run(tf.scatter_add(M, 0, [1, 0]))
array([[2, 2],
[3, 4]], dtype=int32)
关于python - 如何使用 tf.scatter_add 在 tensorflow 中增加矩阵元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461214/