CNN的卷积执行过程

最近在看李宏毅老师的机器学习,讲到CNN这里的时候对下面这张PPT怎么都想不明白,经过一番网上冲浪,终于搞明白了。原PPT如下。
核心疑问:25 * 13 * 13的特征图在经过50个3 * 3的filter之后是怎么变成50 * 11 * 11的特征图的?
CNN的卷积执行过程
这一切要从CNN是怎么做卷积的说起。对上图PPT的例子分析如下:
(1)输入图像为灰度图(只有一个channel),大小为28 * 28,每经过一个filter的卷积操作后,生成一张特征图。一共有25个filter,生成25张特征图。同时图像大小被卷积压缩(边缘像素没了),也就是25 * 26 * 26。

(2)MaxPooling,图像长宽减半,因为用的是2*2的pooling,四个像素取一个

(3)25 * 13 * 13变为50 * 11 * 11,filter大小为50 * 3 * 3
这里的filter大小(3 * 3)是没有加上深度的,真正的filter大小时3 * 3 * 25,25是第一步特征图的个数,也是filter的深度。
这一步的input是25 * 13 * 13的特征图组,和同样大小(25 * 13 *13)第一个filter进行卷积,得到25 *13 *13的临时特征图组,这个临时图组每一张都有相应的权重,按权重将25张图合成一张图。自此一个filter的卷积操作完成。
接着将剩下49个filter都这么操作下去,就得到了50张特征图。这也就是“有多少个filter就有多少张feature map”说法的由来,因为不管输入的图像有多少个channel或者输入本身就是特征图组,但是经过filter之后它都会变成一张特征图

参考链接(只看红字即可)

如果还不懂的话可以到CNN Explainer里看一下,它把CNN的过程可视化了(大佬牛逼!)
下图的kernel weight用红色标出,都是一个东西。蓝框里的字是重点,蓝框里的字也可以印证“不管输入图像的深度为多少,经过一个卷积核,最后都变成一个深度为1的特征图”这句话的真实性。
CNN的卷积执行过程
如果还还还感觉有疑问的,我画了一张丑丑的示意图,或许可以帮忙。是以只有一个通道的灰度图为例的。
CNN的卷积执行过程
到此为止,CNN的卷积执行过程才算彻底清楚了。感谢参考链接中大佬们的付出>o<