![机器学习实战:模型构建与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/359/44389359/b_44389359.jpg)
3.1 卷积
卷积只是一个包含权重的滤波器,用于将像素乘以它的邻居像素来得到一个新的像素值。例如,考虑Fashion MNIST数据集中的一个短靴图像,它的像素值如图3-1所示。
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/052-1.jpg?sign=1739313043-21sDQSqdEqfpihZ2Lp2RQ37DjSFydPuS-0-0844edf5ccd013ee52a23325f312c783)
图3-1:短靴与卷积
如果我们看到被选中区域中间的像素,会发现它的像素值是192(回忆一下Fashion MNIST数据集使用的是单色图像,其中像素值的范围是0~255)。该像素左上角的像素值是0,它上面的像素的值是64,以此类推。
如果我们定义一个3×3的滤波器,就展示在原始像素值的下方,则可以通过计算一个新的值来改变像素。我们通过将格子中的每像素值乘以位于滤波器格子相同位置的数值,然后把它们加起来得到总和。这个总和就是当前像素的新值。我们接下来对图像中的所有像素重复这个过程。
在这种情况下,被选中区域中心的当前像素值是192,使用滤波器后的新值将会是:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/052-2.jpg?sign=1739313043-WYFDGpO3oxIwuVbdI4q7GRwhgqMSq5jI-0-d652fbd353264c69ce0eea119c44d27b)
这等于577,将会是该像素的新值。对图像中的每像素重复这个过程会得到一个过滤过的图像。
让我们考虑将滤波器应用于一个更复杂的图像的影响:使用SciPy内置的ascent图像(https://oreil.ly/wgDN2)作为简单测试。这是一张512×512的灰度图像,展示了两个人正在爬一个楼梯。
使用滤波器(它的左边是负数,右边是正数,中间是零)会将图像中大部分信息抹去,只留下竖直的直线,如图3-2所示。
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/053-1.jpg?sign=1739313043-szCpf90kV6RkhqL4NkWjoTRouse2hidq-0-792a89bfaf9ec8f0eebf3a2ff6b6cb56)
图3-2:使用滤波器来得到竖直的直线
类似地,通过简单改变滤波器可以得到水平的直线,如图3-3所示。
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/053-2.jpg?sign=1739313043-Zx0LGkbSw5czfGVsvKg3vo67W3xe7CCx-0-5f0d4fd485800ae60fdbf3bb902e9093)
图3-3:使用滤波器来得到水平的直线
这些例子同样展示了图像中的信息量减少了,于是我们大概可以学习一组滤波器将图像减少为特征,并且这些特征可以像之前一样用于匹配标签。之前,我们学习了神经元中的参数以匹配输入和输出。同样,随着时间的推移,匹配输入和输出的最好的滤波器也可以被学习。
结合池化,我们可以在保持特征的同时减少图像中的信息量。