上一篇文章中,我们进行了下面的描写
2、C1层-卷积层
输入图片:32*32
卷积核大小:5*5
卷积核种类:6
相当于6组,每组一个模板
输出featuremap大小:28*28 (32-5+1)
前面的公式是Ho×Wo= 像素数
Ho=Wo=(H−F+2×P)/S+1=(高−卷积核的边长+2×图像边扩充大小)/滑动步长+1
=(32−5+2×0)/1+1=28 由此我们知道LeNet-5的C1,没有扩充,且滑动步长为1,padding=0,stride=1
神经元数量:28*28*6
可训练参数:(5*5+1) * 6(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器)
参数个数:(5*5+1)*6=156
连接数: 156*28*28=122304
由此我们知道,该网络是6组卷积核,+1 是因为每组卷积核的bias偏置项不同
如前面图中的
连接数:(5*5+1)*6*28*28=122304
详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 5*5 的卷积核),得到6个C1特征图(6个大小为28*28的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为5*5,总共就有6*(5*5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5*5个像素和1个bias有连接,所以总共有156*28*28=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。
如上,
参数个数:(5*5+1)*6=156
连接数: 156*28*28=122304
这一块很多人不太理解,这里我们举个例子,去解释
如上图,我们的图像大小为4*4=16像素,深度(通道)为1,对应1个卷积核,该卷积核大小为3*3,
由公式
Ho=Wo=(H−F+2×P)/S+1=(高−卷积核的边长+2×图像边扩充大小)/滑动步长+1
可知,卷积后的图像大小为2*2=4像素
按照卷积层的定义,还要添加一个偏置项b,完整的图示如下
如上图所画
大家可以更方便的理解权值共享
上图中,我们的:
参数个数:(3*3+1)=10
连接数: 10*2*2=40
这里我们只使用了一组模板,卷积层为了提取不同种类的特征,会使用多种模板,假设上图我们使用了6组模板,
每一组会有新的卷积核模板,那么
参数个数:(3*3+1)* 6 = 10 *6 =60
连接数: (10*2*2)*6=40*6 = 240
此时我们再对应着上一篇文章中的
参数个数:(5*5+1)*6=156
连接数: 156*28*28=122304
就可以清晰明了
公式的由来,如果不扩展,默认步长为1,那么Ho=H-F+1:
Ho=Wo=(H−F+2×P)/S+1=(高−卷积核的边长+2×图像边扩充大小)/滑动步长+1
如下:
28*28的图像,6个模板,每个模板扫描后的图像大小为28-5+1=24
黄色的线已经清晰说明了,为什么是28-5+1=24,假设我们计算卷积后的宽度,坐标少两个像素,对称着右边少两个像素,至此,公式和参数都解释清楚了
上图中,我们可以清晰的看到卷积核滑动的过程
Viso附件已经上传到CSDN,最低需要一分,没办法,希望系统别乱调,听说下载越多分数会变