如何将我的三维张量组合成张量流中的单张张量?
你好,我是一个张量的新手,目前,我正在使用彩色图像,它是PCAS。如何将我的三维张量组合成张量流中的单张张量?
我已经提取了“红色”,“绿色”和“蓝色”形式的PCAS,并计算了与“红色”,“绿色”和“蓝色”组件相关的权重。
做完所有上述的东西后,我想把所有三个二维矩阵合并成一个三维矩阵。
对于张量流,它将是一个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张量我该怎么做? 任何帮助是高度赞赏。
你需要Concat的他们是这样的:
three_d_image = tf.concat(0, [[r], [g], [b]])
这告诉tensorflow到Concat的他们沿着x
维并将每个张量视为矩阵。
做同样的而没有围绕R,G额外的支架,B张量将尝试将它们Concat的一个大的二维矩阵
其中一个解决方案是,您可以添加一个更多的空维度到您的2D,所以你将有3个矩阵的3D维[4096,1,1],然后你可以连接这3个矩阵轴2 tf.concat(2,matrices)
给你[ 4096,1,3]
第二个解决方案可以为轴线1的CONCAT,tf.concat(1,matrices)
那么它重塑到3D
一个清洁,简单的方法来做到这一点是使用tf.stack操作(TF包装在张量流的旧版本中),它将所有张量沿着新的维度连接起来。如果您希望您的新维度始终处于前面,则需要将轴参数设置为张量的维数。
three_d_image = tf.stack([r,g,b], axis=2)
这是我想的更好的答案。但它应该是axis = 0(这是默认设置) – Dotan
感谢您的评论,他说他想要最终形状为[4096,1,3],所以axis = 2是必需的。 –
谢谢Dotan先生,但请在答案中做一个小修改。对于较新版本的tensorflow 1.0 –
它是three_d_image = tf.concat([[r],[g],[b]],0)实际上,对于要求的内容,您不会在维度0上连接,因为它会输出一个张量形状[3,4096,1],并且使用这样的concat是不合适的。我宁愿做three_d_image = tf.stack([r,g,b],2) –
对,你能告诉我tf.stack([r,g,b],2),tf.stack([ r,g,b],3)和tf.stack([r,g,b],1) –