'Assign'张量流中的 2D 块切片?



张量流是否提供了一种创建零张量的方法,同时用另一个切片替换一个通用切片?特别是,我需要在矩阵张量中分配 2D 块。以下是我需要实现的目标的示例:

给定一个可变形状的张量,例如。

[1 2 3
4 5 6],

以及定义切片的另一个张量,例如。

[0 0 0 0 0
0 1 1 1 0
0 1 1 1 0],

新的张量应如下所示:

[0 0 0 0 0
0 1 2 3 0
0 4 5 6 0].

我知道有scatter_nd,但似乎它只能沿整个轴"替换"值。我是否错过了任何操作,或者是否有任何解决方法来实现此目的?

您可以在适当的y切片上使用assign

import numpy as np
import tensorflow as tf
x = tf.constant([[1,2,3],[4,5,6]])
y = tf.Variable([[0,0,0,0,0],[0,1,1,1,0],[0,1,1,1,0]])
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
z = y[1:,1:4].assign(x)
z.eval()
# returns
# array([[0, 0, 0, 0, 0],
#        [0, 1, 2, 3, 0],
#        [0, 4, 5, 6, 0]])

编辑

动态相同的事情(此处仅用于位置(

import numpy as np
import tensorflow as tf
x = tf.constant([[1,2,3],[4,5,6]])
y = tf.Variable([[0,0,0,0,0],[0,1,1,1,0],[0,1,1,1,0]])
pos = tf.placeholder(tf.int32, shape=(2,))
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
z = y[pos[0]:2+pos[0],pos[1]:3+pos[1]].assign(x)
z.eval({pos: [1,1]})

最新更新