deep-learning - 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 模型带来优化的好算法,还是有更好的现有算法呢?请发表你的意见?
解决方案
推荐阅读
- swift - 将字符串类型转换为电话号码
- java - 空对象引用上的“android.os.Looper.quit()” - Android O
- javascript - 我无法在我的 Laravel 项目中管理我的布局
- kubernetes - [ERROR KubeletVersion]:kubelet 版本高于控制平面版本
- inno-setup - 在 Inno Setup 中更改任务列表框和其他控件的背景颜色
- android - Android:JSONDownloader 返回空字符串
- ios - 更改在 TestFlight 上使用但不是 App Store 的应用程序的捆绑包 ID
- javascript - 在数组对象内过滤数组后返回值
- ios - Xcode 10 自动完成功能在其他 swift 文件中不起作用
- zend-framework - Swoole http 服务器中的 Zend View 行为