MaxPooling实现by C++
实现思路
输入:
feature: 二维特征图
k_h和k_w: kernel_size的高和宽
s_h和s_w: row和col上的步长
输出:
maxpooling后的二维特征图
算法流程
- 计算出输出feature map的尺寸
- 对输入feature map进行右侧和下侧的填充
- 遍历输出特征图,找到每个点在输入特征图上对应的滑动窗口
- 找到窗口中最大的值,赋值给输出特征图上的点
实现细节
- 输出特征图的尺寸:
int out_row = (row - k_h) / s_h + 1;
int out_col = (col - k_w) / s_w + 1;
- 如果stride无法被 row / col 整除,out_row / out_col需要++,因为最后一个stride会只覆盖住一部分,这个边角料也需要进行maxpooling操作
int mod_row = row % s_h, mod_col = col % s_w;
if(mod_row !=0) ++out_row;
if(mod_col !=0) ++out_col;
代码
#inclu