卷积神经网络CNN简述

571 阅读2分钟

本文简单的讲解了卷积、池化的原理和作用。

卷积层

image.png 假设有一个5X5的矩阵。 其中“Padding”是"填充",当我们需要让输入和输出保持同样大小或者想得到特定大小的输出可以设置Padding值。

“stride”步长,滑动卷积核时,我们会先从输入的左上角开始,每次往左滑动一列或者往下滑动一行逐一计算输出,我们将每次滑动的行数和列数称为Stride。

卷积核“kernel”与输入矩阵进行“互相关运算”,图像矩阵中,从左到右,由上到下,取与滤波器同等大小的一部分,每一部分中的值与滤波器中的值对应相乘后求和,最后的结果组成一个矩阵。

一般来说为了计算方便,卷积核一般取奇数例如“1X1”,“3X3”,"5X5"等。

输出层的大小和输入,Padding,kernel_size,stride的大小关系式为:

image.png 其中floor是向下取整。当我们确定好要得到的输出大小,可按此式计算出参数。

卷积代码示例

以下是基于pytorch的代码示例:

image.png

结果为

image.png 运用到实际项目,我们可以看到卷积提取出了图片的特征

image.png 经过卷积后

image.png

池化层

image.png 通俗来讲,就是一个2X2的方框在3X3的输入矩阵按步长为1移动,每一次移动将方框内最大的数值作为输出矩阵的值。输出的大小和输入,stride,filters的关系为:

image.png 除了“maxpooling”也有“minpooling”,根据实际需要选择。

image.png 池化后:

image.png 可以看到,池化层可以去除冗余信息,对特征进行压缩,减少计算量和内存消耗,以及扩大感知野,实现非线性等等。

本文正在参加 人工智能创作者扶持计划