python - 如何使用 keras.layers.permutate 和 keras.layers.reshape 将 5D 张量重塑为 4D 张量,保留最后一维的顺序
问题描述
我正在尝试将具有 10 个内核 (output_dim = (None, 14, 14, 3, 10 )) 的 keras Conv3D 层的输出重塑为 (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]...
推荐阅读
- reactjs - redux-saga/loadable-component first fetch 不等待,但接下来的都是 yes
- jquery - 可调整大小的面板,带有表格和可调整大小的列
- javascript - How would you automatically retry a failed ajax call 3 times (synchronously)?
- c# - TestCaseData attribute does not match when TestCaseData has function call
- unit-testing - SpecFlow equivalent to parameterized test fixture
- javascript - Html5 File Input inside Popover
- java - How to correct a display problem when inserting a row in a JavaFX grid?
- javascript - Changing subdomain without refreshing the page
- javascript - React:我的功能组件中的解析错误
- java - 如何将 Repository 自动生成的 ID 返回到 MainActivity?