TensorFlow - 3D 张量,从 2D 张量收集每 N 个张量并步幅为 1

TensorFlow - 3D tensor that gathers every Nth tensor from 2D tensor and strides 1

假设我在 [M, 1] 中有一个 2D-Tensor T 例如

T = tf.expand_dims([A1,
     B1,
     C1,
     A2,
     B2,
     C2], 1)

我想像这样重塑它:

T_reshp = [[[A1], [A2]]
           [[B1], [B2]]
           [[C1], [C2]]]

我提前知道了MN(每组张量的个数)。此外,让 t_reshp.shape[0] = M/N = P 在我尝试使用 tf.reshape

T_reshp = tf.reshape(T, [P, N, 1])

然而,我最终得到:

T_reshp = [[[A1], [B1]]
           [[C1], [A2]]
           [[B2], [C2]]]

我可以使用一些切片或整形操作来做到这一点吗?

您可以先将其重塑为尺寸 [N,P,1],然后 transpose 第一和第二轴:

tf.transpose(tf.reshape(T, [N, P, 1]), [1,0,2])
#                           ^^^^ switch the two dimensions here and then transpose

示例

T = tf.expand_dims([1,2,3,4,5,6], 1)
sess = tf.Session()
T1 = tf.transpose(tf.reshape(T, [2,3,1]), [1,0,2])

sess.run(T1)
#array([[[1],
#        [4]],

#       [[2],
#        [5]],

#       [[3],
#        [6]]], dtype=int32)