理解CNN卷积层与池化层计算

概述

深度学习中CNN网络是核心,对CNN网络来讲卷积层与池化层的计算相当重要,不一样的步长、填充方式、卷积核大小、池化层策略等都会对最终输出模型与参数、计算复杂度产生重要影响,本文将从卷积层与池化层计算这些相关参数出发,演示一下不一样步长、填充方式、卷积核大小计算结果差别。算法

一:卷积层

卷积神经网络(CNN)第一次提出是在1997年,杨乐春(LeNet)大神的一篇关于数字OCR识别的论文,在2012年的ImageNet竞赛中CNN网络成功击败其它非DNN模型算法,今后得到学术界的关注与工业界的兴趣。毫无疑问学习深度学习必需要学习CNN网络,学习CNN就必须明白卷积层,池化层等这些基础各层,以及它们的参数意义,从本质上来讲,图像卷积都是离散卷积,图像数据通常都是多维度数据(至少两维),离散卷积本质上是线性变换、具备稀疏与参数重用特征即相同参数能够应用输入图像的不一样小分块,假设有3x3离散卷积核以下:
理解CNN卷积层与池化层计算网络

假设有ide

  • 5x5的图像输入块
  • 步长为1(strides=1)
  • 填充方式为VALID(Padding=VALID)
  • 卷积核大小filter size=3x3

则它们的计算过程与输出以下学习

理解CNN卷积层与池化层计算

假设这个时候咱们修改步长为二、填充方式为SAME,卷积核大小不变(strides=2 Padding=SAME filter size=3x3),则计算过程与输出变为以下:blog

理解CNN卷积层与池化层计算

最终输出获得的结果咱们能够称为featuremap,CNN的深度多数时候是指featuremap的个数,对多维度的输入图像计算多个卷积核,获得多个featuremap输出叠加,显示以下:
理解CNN卷积层与池化层计算rem

上述输入为5x5x2,使用卷积核3x3,输出3x3x3,填充方式为VALID,计算若是填充方式改成SAME则输出为5x5x3。能够看出填充方式对输出结果的影响。同步

二:小卷积核VS大卷积核

在AlexNet中有有11x11的卷积核与5x5的卷积核,可是在VGG网络中由于层数增长,卷积核都变成3x3与1x1的大小啦,这样的好处是能够减小训练时候的计算量,有利于下降总的参数数目。关于如何把大卷积核替换为小卷积核,本质上有两种方法。深度学习

1.将二维卷积差分为两个连续一维卷积

二维卷积均可以拆分为两个一维的卷积,这个是有数学依据的,因此11x11的卷积能够转换为1x11与11x1两个连续的卷积核计算,总的运算次数:数学

  • 11x11 = 121次
  • 1x11+ 11x1 = 22次

2.将大二维卷积用多个连续小二维卷积替代

可见把大的二维卷积核在计算环节改为两个连续的小卷积核能够极大下降计算次数、减小计算复杂度。一样大的二维卷积核还能够经过几个小的二维卷积核替代获得。好比:5x5的卷积,咱们能够经过两个连续的3x3的卷积替代,比较计算次数it

  • 5x5= 25次
  • 3x3+ 3x3=18次

三:池化层

在CNN网络中卷积池以后会跟上一个池化层,池化层的做用是提取局部均值与最大值,根据计算出来的值不同就分为均值池化层与最大值池化层,通常常见的多为最大值池化层。池化的时候一样须要提供filter的大小、步长、下面就是3x3步长为1的filter在5x5的输入图像上均值池化计算过程与输出结果
理解CNN卷积层与池化层计算

改用最大值作池化的过程与结果以下:
理解CNN卷积层与池化层计算

天下难事,必做于易;天下大事,必做于细!

相关文章
相关标签/搜索