深度学习小白之路-卷积神经网络的几个小细节

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34740116/article/details/88920358
  • 背景

自己学习深度学习时候没有太系统,大概的过了一遍,没有仔细的看,为了逼自己细心,专心,于是开始写一些自己理解细节的东西,不是太专业,只是在一些小的不注意,容易迷惑的地方上说一说。

  • 卷积神经网络流程

    从很一般的情况说,卷积神经网络的输入是三通道的二维图像(H * W * 3),我们把整个图片Resize成(N1 * N1 * 3),经过第一层CNN的K个卷积核(F * F * K)进行卷积,然后输出K张特征图,这K张特征图是这样得到的:
    第一个卷积核F * F分别与输入图像的3个通道图像分量进行卷积,得到三张特征图,然后对这三张特征图相加变成一张特征图;第二个卷积核同样过程得到一个特征图…那么K个卷积核就得到了K个特征图输出。所以有多少个卷积核就有多少个特征图的输出
    类似,在CNN的其他层输入是 上层输出的特征图(N * N * D),经过第一层CNN卷积核(F * F * K)进行卷积,然后输出K张特征图。第一个卷积核F * F分别和D个输入的通道卷积生成D个特征图再将这些特征图对应相加得到一张特征图,K个卷积核就得到了K张特征图输出。
    这是大概的流程,注意的是,随着网络层数的加深,每层得到的感受野是不一样的;如果整个网络全部都是F * F的卷积核,那么前面层的感受野小,获取的是图像的细节信息;后面层的感受大,获得的是图像的结构信息;

  • CNN特征图和参数计算

继续从上面的参数说起,输入N * N * D,卷积核F * F * K,stride=S, pad=P
输出特征图公式: (N - F + 2 * P) / S + 1
参数数量:K * [(F * F * D) + 1]
下面说一下参数是如何得到的:
每一个卷积核都有F * F个权重参数W,和一个偏置b,也就是(F * F + 1)个参数的容量;
第一个卷积核和输入第一个通道卷积,得到 (F * F )个参数
第一个卷积核和输入第二个通道卷积,得到 (F * F )个参数

第一个卷积核和输入第D个通道卷积,得到 (F * F )个参数
经过一系列卷积操作后得到D张特征图,再相加到一张特征图;
所以第一个卷积核就有D * (F * F)+ 1 个参数,偏置 b 是每个卷积核有一个,
总共有K个卷积核,所以该层总共有K * [ D * (F * F)+ 1 ]

注意,权值共享说的是一个卷积核在一个通道上的权值共享,而不是一个卷积核和D个通道权值共享,同一个卷积核和不同的通道做卷积会都会有不同的参数的。

  • CNN卷积核的那些事

    上面说过前面层的感受野小,获取的是图像的细节信息;后面层的感受大,获得的是图像的结构信息。所以说通过感受野我们可以来获取不同程度图像的信息;

    第一个问题:那 1个 7 * 7 (stride=1)和 3个 3*3(stride=1)的感受野是相同的,但得到的信息是相同的吗?

    显然是不一样的,因为经过计算,3个 33(stride=1)的要比 1个 7 * 7 (stride=1)的参数量大大减少,这节省了训练时间和计算消耗;
    我们知道每和一个卷积核卷积后要经过激活层增加非线性来更好的拟合模型,通过3个 3
    3(stride=1)的显然要比1个 7 * 7 (stride=1)的非线性增加。
    所以用多个小的卷积核替代感受野相同大的卷积核有两个好处:
    1.参数量更少;2.增加非线性。
    我们也可以看到网络基本上是变的越细长。

第二个问题:1 * 1 的卷积核,它的作用是什么?

上面说过,有多少个卷积核就有多少个特征图的输出,1 * 1 的卷积核一般可以用来调整输出通道数,方便下一层的输入;当然也会增加非线性;

水平有限,如有错误,请留言指正!

展开阅读全文

没有更多推荐了,返回首页