如何在张量流中将三个 2D 张量合并为一个 3D 张量?

问题描述 投票:0回答:4

您好,我是张量流新手,目前,我正在处理彩色图像,它是 PCAS。

我以“红色”、“绿色”和“蓝色”的形式提取了 PCAS,并计算了与“红色”、“绿色”和“蓝色”分量相关的权重。

完成上述所有操作后,我想将所有三个 2D 矩阵组合成单个 3D 矩阵。

对于张量流来说,它是一个 3D 张量。

def multi(h0,ppca,mu,i,scope=None):

with tf.variable_scope(scope or"multi"):
        return tf.matmul(ppca[:,:,0],h0[i,:,:,0]) + tf.reshape(mu[:,0],[4096,1]) , tf.matmul(ppca[:,:,1],h0[i,:,:,1]) + tf.reshape(mu[:,1],[4096,1]) ,tf.matmul(ppca[:,:,2],h0[i,:,:,2]) + tf.reshape(mu[:,2],[4096,1]) 

因此,从上面的函数中,我将获得所有三个不同的 2D 张量,并希望将这些 2D 张量组合成尺寸为 [4096,1,3] 的单个 3D 张量

我怎样才能做到这一点? 非常感谢任何帮助。

python image tensorflow
4个回答
4
投票

你需要像这样连接它们:

three_d_image = tf.concat(0, [[r], [g], [b]])

这告诉 TensorFlow 将它们沿着

x
维度连接起来,并将每个张量视为一个矩阵。

在 r、g、b 张量周围没有额外括号的情况下执行相同操作将尝试将它们连接到一个大的 2D 矩阵


3
投票

一种干净、简单的方法是使用 tf.stack 操作(旧版本的张量流中的 tf.pack),它沿着新维度连接所有张量。如果您希望新维度位于所有先前维度之后,则需要将 axis 参数设置为张量的维度数。

    three_d_image = tf.stack([r,g,b], axis=2)

0
投票

解决方案之一是您可以在 2D 中再添加一个空维度,这样您将拥有 3 个 3D 维度矩阵 [4096,1,1],然后您可以通过轴 2 连接这 3 个矩阵

tf.concat(2,matrices)
给出您 [4096 ,1,3]

第二个解决方案可以是轴 1 的连接,

tf.concat(1,matrices)
然后将其重塑为 3D


0
投票

如果有人有同样的问题并且在使用较新的张量流版本时遇到问题。 tf.concat 的参数顺序似乎已更改。现在要沿轴 2 连接,您需要使用

tf.concat(matrices, 2)
,或更精确,如前面的示例所示:

three_d_image = tf.concat([[r], [g], [b]], 2)

© www.soinside.com 2019 - 2024. All rights reserved.