本博客为OUC2022秋软件工程第三次作业
第三周作业:卷积神经网络基础
第18小组
组长:罗浩宇
成员:罗浩宇
Part 1 视频学习
一、CNN的基本结构
1. 卷积 (CNN Layer)
一维卷积:常用于信号处理计算信号的延迟累计
二维卷积:常用于图像处理
2. 池化 (Pooling)
作用:
保留了主要特征的同时,减少参数和计算量,防止过拟合,提高模型的泛化能力。
一般处于卷积层与卷积层之间,全连接层和全连接层之间。
类型:最大值池化(Max pooling)、平均池化(Average pooling)。
3. 全连接 (FC layer)
两层之间所有神经元都有权重链接;
通常全连接层在卷积神经网络的尾部;
全连接层的参数量通常最大。
二、典型的网络结构
1. AlexNet
优化方法:
ReLU激活函数、DropOut(随机失活)、数据增强
优点:
解决了梯度消失的问题(正区间)
计算速度快
收敛速度远快于sigmoid
2. ZFNet
网络结构与AlexNet相同,将卷积层1中感受野大小由 11x11 改为 7x7, 步长由4改为2.
卷积层3,4,5的滤波器个数改为512,512,1024。
3. VGG
对网络深度进行了加深。
4. GoogleNet
Inception v2 对一些模型结构进行了改进。没有全连接层。参数量为Alexnet的 1/12 。
而 Inception v3 进一步对 v2d的参数量进行了降低。增加了非线性激活函数,使网络产生更多独立特,表征能力更强,训练更快。
5. ResNet
深度大大加深,有152层,结构是一个基本的VGG结构.
引入了残差学习网络(deep residual learning network),可以被用来训练非常深的网络,并解决了梯度消失的问题。
Part 2 代码练习
一、MNIST 数据集分类
colab_demo/05_01_ConvNet.ipynb at master · OUCTheoryGroup/colab_demo (github.com)
1. 加载数据 (MNIST)
PyTorch里包含了 MNIST, CIFAR10 等常用数据集,调用 torchvision.datasets 即可把这些数据由远程下载到本地。
显示数据集中的部分图像:
2. 创建网络
定义网络时,需要继承nn.Module,并实现它的forward方法,把网络中具有可学习参数的层放在构造函数 init 中。
利用autograd,在nn.Module的子类中定义forward函数,backward函数就会自动被实现。
然后,定义训练和测试函数。完成网络的创建。
(代码略)
3. 在小型全连接网络上训练(Fully-connected network)
在小型全连接网络上训练模型,输出训练过程和结果如下:
可以看到,平均loss在0.3796,从训练了70%左右开始趋于稳定,loss接近于在0.3000左右浮动,其准确度大约为89%。