Skip to main content
 首页 » 编程设计

python之TensorFlow 连接/堆叠 N 个张量交错最后的维度

2024年08月13日39unruledboy

假设我们有 4 个张量,a、b、c 和 d,它们都具有相同的维度(batch_size, T, C),我们要创建一个新的张量 X,其形状为 (batch_size, T*4, C) 其中 T*4 在所有张量之间交错循环。

例如,如果a、b、c和d是全1、2的张量,分别是三个和四个,我们希望 X 是这样的

[[[1,1,1...], 
  [2,2,2...], 
  [3,3,3...], 
  [4,4,4...], 
  [1,1,1...], 
  [2,2,2...], 
  . 
  . 
  . 
]] 

请您参考如下方法:

在我看来,您的示例数组实际上具有形状 (batch_size, T, C*4) 而不是 (batch_size, T*4, C)。无论如何,您可以通过 tf.concat、tf.reshape 和 tf.transpose 获得所需的内容。 2d中一个更简单的例子如下:

A = tf.ones([2,3]) 
B = tf.ones([2,3]) * 2 
AB = tf.concat([A,B], axis=1) 
AB = tf.reshape(AB, [-1, 3]) 
AB.eval() #array([[1., 1., 1.], 
   # [2., 2., 2.], 
   # [1., 1., 1.], 
   # [2., 2., 2.]], dtype=float32) 

您连接 A 和 B 以获得形状为 (2,6) 的矩阵。然后你 reshape 它,交错行。要在 3d 中执行此操作,乘以 4 的维度必须是最后一个维度。因此,您可能需要使用 tf.transpose,使用 concat 和 reshape 交错,然后再次转置以重新排序维度。