机器学习实战:模型构建与应用
上QQ阅读APP看书,第一时间看更新

3.1 卷积

卷积只是一个包含权重的滤波器,用于将像素乘以它的邻居像素来得到一个新的像素值。例如,考虑Fashion MNIST数据集中的一个短靴图像,它的像素值如图3-1所示。

图3-1:短靴与卷积

如果我们看到被选中区域中间的像素,会发现它的像素值是192(回忆一下Fashion MNIST数据集使用的是单色图像,其中像素值的范围是0~255)。该像素左上角的像素值是0,它上面的像素的值是64,以此类推。

如果我们定义一个3×3的滤波器,就展示在原始像素值的下方,则可以通过计算一个新的值来改变像素。我们通过将格子中的每像素值乘以位于滤波器格子相同位置的数值,然后把它们加起来得到总和。这个总和就是当前像素的新值。我们接下来对图像中的所有像素重复这个过程。

在这种情况下,被选中区域中心的当前像素值是192,使用滤波器后的新值将会是:

这等于577,将会是该像素的新值。对图像中的每像素重复这个过程会得到一个过滤过的图像。

让我们考虑将滤波器应用于一个更复杂的图像的影响:使用SciPy内置的ascent图像(https://oreil.ly/wgDN2)作为简单测试。这是一张512×512的灰度图像,展示了两个人正在爬一个楼梯。

使用滤波器(它的左边是负数,右边是正数,中间是零)会将图像中大部分信息抹去,只留下竖直的直线,如图3-2所示。

图3-2:使用滤波器来得到竖直的直线

类似地,通过简单改变滤波器可以得到水平的直线,如图3-3所示。

图3-3:使用滤波器来得到水平的直线

这些例子同样展示了图像中的信息量减少了,于是我们大概可以学习一组滤波器将图像减少为特征,并且这些特征可以像之前一样用于匹配标签。之前,我们学习了神经元中的参数以匹配输入和输出。同样,随着时间的推移,匹配输入和输出的最好的滤波器也可以被学习。

结合池化,我们可以在保持特征的同时减少图像中的信息量。