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

卷积层

卷积神经网络CNN简述
假设有一个5X5的矩阵。 其中“Padding”是”填充”,当咱们需要让输入和输出坚持相同巨细或者想得到特定巨细的输出能够设置Padding值。

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

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

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

输出层的巨细和输入,Padding,kernel_size,stride的巨细关系式为:

卷积神经网络CNN简述
其中floor是向下取整。当咱们确定好要得到的输出巨细,可按此式核算出参数。

卷积代码示例

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

卷积神经网络CNN简述

成果为

卷积神经网络CNN简述
运用到实际项目,咱们能够看到卷积提取出了图片的特征

卷积神经网络CNN简述
经过卷积后

卷积神经网络CNN简述

池化层

卷积神经网络CNN简述
浅显来讲,便是一个2X2的方框在3X3的输入矩阵按步长为1移动,每一次移动将方框内最大的数值作为输出矩阵的值。输出的巨细和输入,stride,filters的关系为:

卷积神经网络CNN简述
除了“maxpooling”也有“minpooling”,根据实际需要选择。

卷积神经网络CNN简述
池化后:

卷积神经网络CNN简述
能够看到,池化层能够去除冗余信息,对特征进行压缩,削减核算量和内存消耗,以及扩大感知野,完成非线性等等。

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