卷积神经网络中的参数修改

卷积神经网络中的卷积窗口,padding等的调整

深度学习的通道到底是什么?有什么用?(小白可看)

1.什么是通道?

深度学习的通道到底是什么?有什么用?(小白可看) 通道在我看来可以简单理解为图像的深度。通过阅读一些帖子,我觉得有两个总结对理解通道很有帮助,这里在下面介绍一下。

计算机在存储图片时是以数字矩阵的形式存储,例如我们最常见的彩色图片,RNG格式,它包含红,黄,蓝三个通道,而灰色图片只有一个通道。

1.输入通道数等于卷积核通道个数

例如当我们输入的图片为三通道时,那么卷积核也会有三个通道,就像上述图片,最左边的三个矩阵是一个图片的三个通道(因为计算机上是以数字矩阵存储),与这张图片相乘的是一个1*1的三通道卷积核。

为了让图像的三个通道和卷积核分别进行点积并相加得到一个矩阵,即一个特征图,所以卷积核的通道也要有三个,为了和图像的每个通道都进行运算。

2.卷积核个数 等于 输出通道个数

卷积核的数量决定输出的通道数,比如说现在有一张像素为1616的三通道图片(16163),其实这张照片就由三个1616的矩阵组成,如果这时我们有256个333的卷积核,其实就是每个卷积核由3个33的矩阵,有256个这样的卷积核。那么这张16163的图片要和256个33*3的卷积核都进行点积并相加得出特征图,即得到的特征图有256个,即卷积核的个数,也是输出通道的个数。

3.为什么要增加通道

在一张照片中可能有很多信息,比如人,动物….,我们人眼可以一下子就分辨出来,但是计算机不可以,他要进行特征提取,也是卷积的第一个操作。

我们增加通道数就代表着增加特征,而造成通道数增加的操作其实就是卷积核的增加,不同的卷积核可以提取到不同特征,比如说平滑卷积核,它可以让整个图像更加平滑清晰,还比如增加水平边界过滤器,垂直边界过滤器(本质都是卷积核),让图像的矩阵和卷积核进行点积相加,得到不同的矩阵,即不同的特征图,这些特征图越多,越利于计算机学习,这将教会计算机识别特征。

因为不同的卷积核可以分辨出不同的特征,所以增加卷积核的个数很必要,计算机通过利用这些特征图,来最终得到结论,分辨出图像的事物到底是什么。

4.补充

池化操作是为了在降低像素的同时保存重要信息,而降低像素也十分必要,要通过降低像素来减少计算机的内存消耗。

网络中常常增加通道同时降低像素,但如果不断降低像素而不增加通道,那么图片通过激活函数等操作后很可能会遗漏重要信息,那么这个网络的训练效果可能就会不理想。

Original: https://blog.csdn.net/qq_54641516/article/details/127079382
Author: -day day up-
Title: 深度学习的通道到底是什么?有什么用?(小白可看)

总结而言,卷积核的通道的个数应该与输入的图像的通道个数相同,而一副图像经过卷积操作之后的输出的通道个数应该就是卷积核的个数,即一个卷积核与一副图像卷积操作之后,输出的矩阵的个数就是卷积核的个数,同时需要注意的就是,如果一副图像的输入是多通道的即比如一副图像输入是3通道的,则对应的卷积核应该也是一个3通道的卷积核。

卷积神经网络中的各个参数的调节关系

image-20230205100827661

对于经典的卷积神经网络,比如LeNet而言,其结构如上图所示,在pytorch 中对于卷积层,nn.Conv2d(in_channels=1,out_channels=20,kernel_size=3,padding=1)其中in_channels表示卷积层的输入图像的通道个数,out_channels表示图像经过这个卷积层之后的输出的通道的个数。kernel_size表示这个卷积层的用于卷积的矩阵的大小。在这个例子中

in_channels=12,out_channels=20,kernel_size=3表示输入图像的通道为1,输出通道的个数为20(即表示,卷积核的个数有20个,在现有的神经网络框架中,这些卷积核中的每一个数字都是神经网络自己学习的参数)。

对于一个卷积层而言,一副图像或者一些数据经过这个卷积层之后的输出是什么样的,应该通过以下两个公式来计算:

image-20230205101826734

上面的两个公式中的HoutH_{out}WoutW_{out} 表示数据经过这个卷积层之后的高度和宽度。在上式中假设输入图像为12×1212\times12则计算公式为:

即如果想要输入和输出图像的高度相同,则Hout=12H_{out}=12Hin=12H_{in}=12 kernel_size=3,dilation=1(表示,空洞卷积即卷积核并不是连在一起的矩阵,这个变量的默认值是1,表示不采用空洞卷积。)则上式为:

12=((12+2×padding1×(31)1)/stride)+112=(({12+2\times padding - 1\times (3-1)-1})/{stride})+1 可以得到想要padding和stride的值都比较合理则,padding=1,stride=1(通常来说是先确定stride,stride通常来说等于1,当然可以=2,=3(刚好等于此处的卷积核的宽度,此时通常来说stride就是最大了,因为再大的话就会漏掉信息)等)

同理宽度的计算也一样。

所以如果输入的图像为1@12X12即1通道,12X12的图像,则经过上面的第一个卷积层之后的输出为:20@12X12

image-20230205103414848

到池化这里,由于参数设置为每两个值中取一个最大值,同时步长为2,则经过池化之后数据变为:20@6X6,再到下一个卷积层,由于padding和stride的设置,图像经过这一层的卷积层之后仍然不改变图像的高和宽。只是通道数变多了。

图像经过这个卷积层之后的输出为40@6X6,再经过池化之后为40@3X3通常来说到3X3之后就不会再继续进行卷积核池化不过想要进行卷积的话应该应可以。

下一步的话就是需要计算展平之后的大小。

image-20230205104101243

由于上面的输出可以知道,经过最后的池化层之后的数据为40@3X3即40X3X3=360.所以应该在线性层的输入中填360,至于线性层的输出,由于最终需要的输出的大小为225(15X15)在这里可以先将输入扩大到500,再慢慢缩小到225也可以直接缩小到225.如:

image-20230205104629678


卷积神经网络中的参数修改
http://csgituser.github.io/2023/02/08/卷积神经网络中的卷积窗口,padding等的调整/
Author
Museum
Posted on
February 8, 2023
Licensed under