繁体   English   中英

如何使用 keras.layers.permutate 和 keras.layers.reshape 将 5D 张量重塑为 4D 张量,保留最后一个维度的顺序

[英]How to reshape 5D tensor to a 4D tensor, preserving the order of the last dimension, using keras.layers.permutate and keras.layers.reshape

我正在尝试将具有 10 个内核的 keras Conv3D 层的输出 (output_dim = (None, 14, 14, 3, 10 )) 重塑为所需的 (None, 14, 14, 30 , 1) 输出,以便我可以执行对所有内核组合的另一个 3D 卷积。 我想在重塑的张量中保留前 10 个内核的空间关系/顺序,就像将它们彼此“后面”粘贴一样。

由于 keras.layers.reshape 使用“row-major c-style”来重塑张量,因此我会在这里松散内核的顺序。 关于如何将 numpy.reshape 和 numpy.permutate 用于 numpy 矩阵,很容易存在一个全面的解释,并假设 keras 将类似地工作,因为我也可以使用 keras.layers.permutate。 问题是,在使用 keras.layers.reshape 重塑以保留顺序之前,我根本无法弄清楚在这种情况下我需要什么排列。

在 NumPy 中将 4D 数组重塑为 2D 数组背后的直觉和想法

我总是可以切片和连接张量,但这需要更多的 keras.layers 并减慢我的程序。 keras.layers.Permutate() --> keras.layers.Reshape() 的“奇特”组合将不胜感激!

重塑不应该改变任何东西的顺序(因为改变顺序在计算上是昂贵的,而重塑只是告诉如何划分)

最好的测试方法是简单地进行测试并查看结果,但您会得到以下结果:

如果你重塑这个(2,5)

[
 [1,2,3,4,5],
 [6,7,8,9,10]
]

进入(10,),你会得到和之前一样的顺序:

[1,2,3,4,5,6,7,8,9,10]

如果出于某种原因您想要 [1,6,2,7,3,8,4,9,5,10],那么您将排列最后两个维度。

也就是说,您的(None, 14, 14, 3, 10)被重新整形为(None, 14, 14, 30)会将最后 10 个的顺序放在一起。

[[1,2,3,4,5,6,7,8,9,10],
 [11,12,13,14,15,16,17,18,19,20],
 [21,22,23,24,25,26,27,28,29,30]]

becomes

 [1,2,3,4,5,6,7,8,9,10,11,12...]

如果您想获得以下内容,请进行置换:

outs = Permute((1,2,4,3))(ins)
outs = Reshape((14,14,30))(outs)
---> [[1,11,21], [2,12,22], [3,13,23]...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM