首页 > 解决方案 > A CNN 中多维卷积数组上最大池化操作的最佳时间复杂度

问题描述

只是思考这个问题,我发现如果卷积二维数组是 m n ,这个算法可以在 O(m n) 时间内工作。

怎么看。只需为一维情况计算相同的值,我们需要在数组中每个大小为 k 的窗口中找到最大值的答案。使用双端队列。有关更多详细信息,请参阅此 https://www.geeksforgeeks.org/sliding-window-maximum-maximum-of-all-subarrays-of-size-k/

假设在 2D 情况下 k 是 filter size ,stride 是 1 0 padding 和 n*m 矩阵。

Step1 然后计算所有大小为 k 的窗口的最大值,给出每行大小为 k 的最大窗口的答案。在对所有行进行计算之后。

Step2 之后,在变换矩阵中,对修改矩阵中每一列上大小为 k 的滑动窗口中最大的列执行相同的操作。重复之后,您将获得大小为 k*k 的整个子数组的最大值,它从单元格 i ,j 作为左上角开始, i+k-1 , j+k-1 作为位置 i,j 的右下角矩阵。

证明很简单。

当您有最多 k 行时,在列上大小为 k 的窗口中计算最大值会给出整个矩阵的最大值。

例子

5 3 2 1 4

2 3 1 5 3

1 2 3 4 6

1 2 3 4 5

5 4 3 2 1

假设 n=5 m=5 和 k=3。

修改后的矩阵看起来像

5 3 4

3 5 3

3 4 6

3 4 5

5 4 3

进一步应用 step2 看起来像。

5 5 6

3 5 6

5 4 6

就是这样,我们面前有最大的池化层。

它是一个可以为 CNN 模型带来优化的好算法,还是有更好的现有算法呢?请发表你的意见?

标签: deep-learningconv-neural-networkmax-pooling

解决方案


推荐阅读