基于CNN模型的手写字符识别的分析与实现过程

目录

1.前言

2.使用的工具介绍

2.1.TensorboardX

2.2.Netron

3.搭建CNN神经网络

3.1 CNN结构

3.1.1卷积层

3.1.2池化层

3.1.3全连接层

3.2构建CNN与代码实现

 3.3CNN结构模型数据流可视化

 3.3.1tensorboardx可视化

3.3.2Netron可视化模型

 4.特征提取可视化

 5.分析

6.总结


1.前言

MNIST是一个手写体数字的图片数据集,该数据集来由美国国家标准与技术研究所(National Institute of Standards and Technology (NIST))发起整理,一共统计了来自250个不同的人手写数字图片,其中50%是高中生,50%来自人口普查局的工作人员。该数据集的收集目的是希望通过算法,实现对手写数字的识别。被广泛地应用于机器学习和深度学习领域,用来测试算法的效果,例如线性分类器(Linear Classifiers)、K-近邻算法(K-Nearest Neighbors)、支持向量机(SVMs)、神经网络(Neural Nets)、卷积神经网络(Convolutional nets)等等。 1998年,Yan LeCun 等人发表了论文《Gradient-Based Learning Applied to Document Recognition》,首次提出了LeNet-5 网络,利用上述数据集实现了手写字体的识别。本篇博客也根据LeNet5网络结构进行理解后,搭建最原始的神经网络。

2.使用的工具介绍

2.1.TensorboardX

Tensorboardx 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,类似于tensoboard,在机器视觉的可视化中使用起来很方便。具体使用参照这里

2.2.Netron

Netron支持主流各种框架的模型结构可视化工作,支持windows,Linux,mac系统,使用起来很方便,直接去GitHub中下载exe文件就可以使用,然后将训练的模型保存为.pth等文件,在软件中打开文件即可。效果如下

 当然也是可以直接通过pip install netron进行安装。

3.搭建CNN神经网络

3.1 CNN结构

 

 此模型的结构是卷积层--池化层--卷积层--池化层--全连接层

3.1.1卷积层

卷积层(Convolutional layer)由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。

主要的工作原理就是通过n*n大小的kernel对每张图片的每各通道进行扫描,每次都是选取n*n大小的数据跟kernel上的数据进行运算,得出一个值,而后继续一定,直到扫描完所有数据。

3.1.2池化层

池化层是夹在连续卷积层中间的,用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

下采样层也叫池化层,其具体操作与卷积层的操作基本相同,只不过下采样的卷积核为只取对应位置的最大值、平均值等(最大池化、平均池化),即矩阵之间的运算规律不一样,并且不经过反向传播的修改。如图
 

2*2的kernel对4*4的数据进行扫描,每次移动两步,那么算出来的值也就是一个2*2大小的数据。

 因此池化层的作用就是保证特征不变,因为每次都还是会采样,保留重要的特征,其次就是特征降维,当特征量太多,我们会选择将一些没有用的特征丢掉,只保留有用的特征。

3.1.3全连接层

全连接层的 作用就是分类,具体描述在我上一篇博客,并且还附有代码。

3.2构建CNN与代码实现

导入数据,并且查看数据,MINIST数据集包含train和test数据集,我们直接用train和test一个做训练集一个做测试集。

batch_size = 512

train_loader = torch.utils.data.DataLoader(
        torchvision.datasets.MNIST('mnist_data', train=True, download=True,
                                   transform=torchvision.transforms.Compose([
                                       torchvision.transforms.ToTensor(),
                                       torchvision.transforms.Normalize(
                                           (0.1307,), (0.3081,))
                                   ])),
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值