pytorch学习笔记:卷积神经网络CNN(基础篇)

Posted Z|Star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch学习笔记:卷积神经网络CNN(基础篇)相关的知识,希望对你有一定的参考价值。

在上一篇中,使用了全连接网络进行手写数字识别的分类。
在这里插入图片描述
准确率为97%
本次,将采用卷积神经网络的方法,提升准确率。

1、什么是卷积?

与数学上卷积的概念略有不同,在数学上,卷积的含义是将一个函数先进行y轴翻转,之后对应点相乘累加,在神经网路中,由于卷积核的参数是自己定义的,因此若要进行翻转,相当于修改卷积核的数值。因此,不需要再单独进行翻转,直接对应点相乘之后累加。具体过程如下图所示:
在这里插入图片描述

2、对RGB图像进行卷积

对一副图像而言,存在RGB三个通道,因此需要三个卷积核,每个卷积核分别对每个通道做卷积,最后把三个通道的卷积结果相加,形成一个矩阵。
在这里插入图片描述
在这里插入图片描述

3、对N个通道的图像进行卷积

在这里插入图片描述
由于卷积核是对每个通道的图像进行卷积运算,因此n个通道必须对应n个卷积核,最后将卷积结果相加到一个通道,所以输出通道数为1。
如果想要输出通道数为m,自然需要m个卷积核。
(输出通道数=卷积核个数)
在这里插入图片描述
在这里插入图片描述
把所有卷积放在一起形成卷积层,那卷积层就是四维张量,即mnkernel_size(width)*kernel_size(height)

程序语言:
在这里插入图片描述
输入为1批量(batch_size)5通道,100*100的图像
输出为1批量,10通道,98*98的图像
卷积层为10个,5通道,3*3大小
由于卷积是滑动式的,中心点移动了98个单位(即100-2),3*3的卷积核大小,边缘需要减去两格,因此输出是98*98的图像大小。

4、padding的引入

要使输出图像大小不变,则需要padding。
padding即在原图周边加上一圈,加上多上可由下面的公式确定
增加的圈数=卷积核大小/2(注意:这里是整除)
比如,33的卷积核,要使图像大小不变,需要增加1圈的padding
5
5的卷积核,要使图像大小不变,需要增加2圈的padding
在这里插入图片描述
程序实现:
在这里插入图片描述
注:倒数三四行为卷积核的赋值

5、步长(stride)的概念

在默认不设定步长参数时,步长默认为1,即卷积核滑动时每次都滑动一个单位。
若设置2,即每次滑动2个单位,输出图像将更小。
在这里插入图片描述
在程序中,添加stride参数即可
在这里插入图片描述

6、池化(Pooling)的概念

池化也叫下采样(这里看到有人说这两个概念不完全等价,不过作为初学者,暂且将其理解为同一个事物)
下采样的“下”即让图像维度向下(变小)
池化有两种:一个是取平均值,一个是取最大值,一般都取最大值。
池化的作用可以简单理解为进一步提取特征而降维。
在这里插入图片描述
程序实现:
在这里插入图片描述

7、卷积神经网络工作流程

在这里插入图片描述
细节解释:
1、第一步使用了55的卷积核,因此图像缩小5/22=4个像素,即从28->24
2、第二步使用22的池化层,总体缩小一半,即从24->12
3、第三步同样使用5
5的卷积核,图像从12->8
4、第四步池化后8->4
5、全部输入全连接层,输入个数=2044=320,要分成10类,因此输出为10

程序语言:
在这里插入图片描述
注:之前最后一层的输入320是通过手动计算出来的,在程序中,改成-1,计算机会自动帮我们计算这个数值。

8、GPU的使用

如果电脑有英伟达的GPU且安装了CUDA,则可以用GPU加快训练速度。
调用语言:
在这里插入图片描述
其中cuda:0代表使用机器上第一个GPU
同样,训练和测试时,也需要将数据抛入GPU内:
在这里插入图片描述
在这里插入图片描述

9、训练结果分析

在这里插入图片描述
最终,训练的准确率从97%提升到了98%,看似只提升了一点点,但是从错误率角度出发,错误率从3%降到了2%,因此总体性能提升了1/3!
(邪魅一笑)

以上是关于pytorch学习笔记:卷积神经网络CNN(基础篇)的主要内容,如果未能解决你的问题,请参考以下文章

三维几何学习从零开始网格上的深度学习-2:卷积网络CNN篇(Pytorch)

3. 使用PyTorch深度学习库训练第一个卷积神经网络CNN

(机器学习深度学习常用库框架|Pytorch篇)第(待定)节:卷积神经网络CNN中一些经典网络结构写法

(机器学习深度学习常用库框架|Pytorch篇)第(待定)节:卷积神经网络CNN中一些经典网络结构写法

深入浅出卷积神经网络及实现!

卷积神经网络(CNN)学习笔记1:基础入门