深度学习实验指导书
实验一手写数字识别
PAGE2
PAGE2
实验一手写数字识别
实验目的
掌握卷积神经网络基本原理;
掌握PyTorch(或其他框架)的基本用法以及构建卷积网络的基本操作;
了解PyTorch(或其他框架)在GPU上的使用方法。
实验要求
搭建PyTorch(或其他框架)环境;
构建一个规范的卷积神经网络组织结构;
在MNIST手写数字数据集上进行训练和评估,实现测试集准确率达到98%及以上;
按规定时间在课程网站提交实验报告、代码以及PPT。
实验原理(以PyTorch为例)
PyTorch基本用法:
使用PyTorch,必须了解PyTorch:
张量的创建与使用
数据创建和数据加载
数据增强
网络模型创建
使用torch.autograd自动求梯度
模型参数优化
模型加载与保存
PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。
卷积神经网络:
典型的卷积神经网络由卷积层、池化层、激活函数层交替组合构成,因此可将其视为一种层次模型,形象地体现了深度学习中“深度”之所在。
卷积操作
卷积运算是卷积神经网络的核心操作,给定二维的图像I作为输入,二维卷积核K,卷积运算可表示为:
(1)
给定5×5输入矩阵、3×3卷积核,相应的卷积操作如图1所示。
图1卷积运算
在使用TensorFlow等深度学习框架时,卷积层会有padding参数,常用的有两种选择,一个是“valid”,一个是“same”。前者是不进行填充,后者则是进行数据填充并保证输出与输入具有相同尺寸。
构建卷积或池化神经网络时,卷积步长也是一个很重要的基本参数。它控制了每个操作在特征图上的执行间隔。
池化操作
池化操作使用某位置相邻输出的总体统计特征作为该位置的输出,常用最大池化(max-pooling)和均值池化(average-pooling)。池化层不包含需要训练学习的参数,仅需指定池化操作的核大小、操作步长以及池化类型。池化操作示意如图2所示。
图2池化操作
激活函数层
卷积操作可视为对输入数值进行线性计算发挥线性映射的作用。激活函数的引入,则增强了深度网络的非线性表达能力,从而提高了模型的学习能力。常用的激活函数有sigmoid、tanh和ReLU函数。
实验所用工具及数据集
工具
Anaconda、PyTorch
(PyTorch安装教程参考:PyTorch官网:/)
数据集
MNIST手写数字数据集
(下载地址及相关介绍:/exdb/mnist/)
实验步骤与方法(以PyTorch为例)
安装实验环境,包括Anaconda、PyTorch,若使用GPU还需要安装cuda、cudnn;
下载MNIST手写数字数据集;
加载MNIST数据;
构建模型;
用class类来建立CNN模型
CNN流程: 卷积(Conv2d)-激励函数(ReLU)-池化(MaxPooling)-
卷积(Conv2d)-激励函数(ReLU)-池化(MaxPooling)-
展平多维的卷积成的特征图-接入全连接层(Linear)-输出
创建优化器和损失函数;
训练和评估模型。