Python 如何使用tf.scatter\u add增加tensorflow中的矩阵元素?

Python 如何使用tf.scatter\u add增加tensorflow中的矩阵元素?,python,tensorflow,Python,Tensorflow,tf.scatter_add适用于1d(形状)张量: 但我如何增加,比如说[0,0]元素 M = tf.Variable(tf.constant([[1,2], [3,4]])) 使之成为[[2,2],[3,4]] 使用tf.scatter\u添加 这是一种“神秘的”。我尝试了不同的arg值 > sess.run(tf.scatter_add(M, [[0, 0]], [1])) *** ValueError: Shapes (1,) and (1, 2, 2) are not comp

tf.scatter_add适用于1d(形状)张量:

但我如何增加,比如说[0,0]元素

M = tf.Variable(tf.constant([[1,2], [3,4]]))
使之成为[[2,2],[3,4]] 使用tf.scatter\u添加

这是一种“神秘的”。我尝试了不同的arg值

> sess.run(tf.scatter_add(M, [[0, 0]], [1]))
*** ValueError: Shapes (1,) and (1, 2, 2) are not compatible
而且还没有成功

顺便说一句,在我的例子中,M相当大,并且是动态调整大小的。
因此,向M添加0但1等于1的元素矩阵不是这种情况。

tf.scatter\u add
更新张量的切片,而不能更新单个系数。例如,它可以一次更新整个矩阵行

另外,
的形状将
参数更新为
tf。scatter\u add
取决于其
索引
参数的形状。当
ref
参数是具有形状
(M,N)
的矩阵时,则

  • 如果
    索引
    是标量
    i
    ,则
    更新
    应该是形状为
    (N)
    的向量
  • 如果
    索引
    是具有形状
    (k)
    的向量
    [i1,i2,…ik]
    ,则
    更新
    应具有形状
    (k,N)
在您的情况下,只需将
[1,0]
添加到
M
的第一行,如下所示,即可获得您想要的效果:

sess.run(tf.scatter_add(M, 0, [1, 0]))
array([[2, 2],
   [3, 4]], dtype=int32)
sess.run(tf.scatter_add(M, 0, [1, 0]))
array([[2, 2],
   [3, 4]], dtype=int32)