深度学习导论(5)手写数字识别问题步骤
深度学习导论(5)手写数字识别问题步骤
- 手写数字识别分类问题具体步骤(Training an handwritten digit classification)
- 加载数据
- 显示训练集中的图片
- 定义神经网络模型(DNN)
- 定义损失函数
- 训练网络模型
- 保存训练模型
- 测试模型
- 对整个测试集进行测试
- 判断各个类(0~9)的正确率
手写数字识别分类问题具体步骤(Training an handwritten digit classification)
- Load and normalizing the MNIST training and test datasets using torchvision;
使用torchvision加载并对MNIST数据集规格化; - Define a Convolution Neural Network
定义卷积神经网络; - Define a loss function
定义损失函数; - Train the network on the training data
利用数据经过反复迭代(多轮epoch),训练网络,得到一组最优的(或者局部最优的)网络参数(w和b); - Test the network on the test data
得到网络参数(w和b)后,模型就有了,就可以利用测试集数据去测试网络模型。
加载数据
- MNIST数据集在datasets包里面;
- transforms是应用于对数据集的变换(且一般应用于对图像的变换),通过transforms将图像的数据转换成tensor的数据;
- MNIST已经规格化成[0, 1],因此不需要进行规格化,但也可以规格化成[-1, 1];
- ‘./data’是定义一个目录,会将下载后的数据放入到本地的‘./data’目录里; ‘train = True’表示下载的是训练数据; ‘download = True’表示数据将下载到本地; ‘transform = transform’表示将数据做transform变换(即前边定义的transform = transforms.Compose([transforms.ToTensor]));
- train_loader = torch.utils.data.DataLoader(trainset, batch_size=5)表示将数据封装成可以直接送入到网络中的数据,batch_size = 5表示每一批数据会送入5个样本;
- 采样同样的方法,对测试集进行封装;
- 定义标签[0~9],方便输出和显示。
显示训练集中的图片
- imshow: 显示单张图片;
- imshowGridImages: 显示多张图片(以网格的形式);
定义神经网络模型(DNN)
- Net(nn.Module): 定义神经网络的类,基于nn.Module模块定义的;
- __init__函数中定义了“层”;
- forward函数将__init__函数中定义的“层”串接起来;
定义损失函数
- nn.CrossEntropyLoss框架中已经准备好了一些损失函数,直接调用即可;
- SGD为优化器,随机梯度下降法;
训练网络模型
- 定义循环epoch;
- running_loss为自己定义的损失值;
- enumerate(train_loader)表示将训练好的数据分批次取出来;
- inputs, labels = data中的data实际上是batch,即一批数据,而不是单独的样本;
- view(inputs.size(0), -1)表示将矩阵“抻平”成一个向量;
- optimizer.zero_grad()表示将优化器中的参数w和b梯度的值初始化成0;
- criterion为前边定义的损失函数;
- 通过调用loss.backword()方法可以计算w和b的偏导数;
- 输入层为28*28=784维,中间层有512维,输出层有10维,那么:
(1) 隐藏层h_1的参数: w_1=784×512, b_1=512, h_1有几个神经元,b_1就有几个分量。所以h_1:784×512+512;
(2) 输出层o的参数: w_2=512×10, b_2=10。所以o:512×10+10; - 通过optimizer.step()方法可以自动地更新w和b;
保存训练模型
- 保存后,日后就可以对一些模型进行测试;
测试模型
- iter为迭代器;
- net.load_state_dict(torch.load(PATH))表示将之前保存的数据加载到模型当中去(实际上加载的就是w和b);
对整个测试集进行测试
- no_grad表示不需要加入梯度计算,因为测试时只有前向过程,在训练的时候才会有前向和反向的过程;
判断各个类(0~9)的正确率
深度学习导论(5)手写数字识别问题步骤相关推荐
- 深度学习数字仪表盘识别_【深度学习系列】手写数字识别实战
上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...
- 深度学习项目实战——手写数字识别项目
摘要 本文将介绍的有关于的paddle的实战的相关的问题,并分析相关的代码的阅读和解释.并扩展有关于的python的有关的语言.介绍了深度学习步骤: 1. 数据处理:读取数据 和 预处理操作 2. 模 ...
- 深度学习入门实践学习——手写数字识别(百度飞桨平台)——上篇
一.项目平台 百度飞桨 二.项目框架 1.数据处理: 2.模型设计:网络结构,损失函数: 3.训练配置:优化器,资源配置: 4.训练过程: 5.保存加载. 三.手写数字识别任务 1.构建神经网络流程: ...
- 【第一个深度学习模型应用-手写数字识别】
基于BP神经网络的手写数字识别报告 基于BP神经网络的手写数字识别报告 一.任务描述 二.数据集来源 三.方法 3.1 数据集处理方法 3.2.模型结构设计 3.3.模型算法 四.实验 4.1.实验环 ...
- [深度学习-1]神经网络-手写数字识别
Date:2018年9月29记 数据及彭亮给出的数据集和源码在下面网址: https://github.com/mnielsen/neural-networks-and-deep-learning 在 ...
- AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理
AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...
- 【学习日记】手写数字识别及神经网络基本模型
2021.10.7 [学习日记]手写数字识别及神经网络基本模型 1 概述 张量(tensor)是数字的容器,是矩阵向任意维度的推广,其维度称为轴(axis).深度学习的本质是对张量做各种运算处理,其分 ...
- 深度学习,实现手写字体识别(大数据人工智能公司)
手写字体识别是指给定一系列的手写字体图片以及对应的标签,构建模型进行学习,目标是对于一张新的手写字体图片能够自动识别出对应的文字或数字.通过深度学习构建普通神经网络和卷积神经网络,处理手写字体数据.通 ...
- CNN学习MNIST实现手写数字识别
CNN的实现 我们之前已经实现了卷积层和池化层,现在来组合这些层,搭建进行手写数字识别的CNN. # 初始化权重 self.params = {'W1': weight_init_std * np.r ...
最新文章
- 可微分的「OpenCV」:这是基于PyTorch的可微计算机视觉库
- P1332,nssl1316-血色先锋军【bfs】
- Mysql优化(三):优化order by
- Git---命令行语法
- python的追加_Python追加添加相同的数据
- 【转】Loss Function View
- IOS ViewController 生命周期
- sicily 1282. Computer Game
- 字符串匹配代码C语言,KMP字符串匹配算法C语言实现
- iOS中分段控制器与UIScrollView结合使用
- Linux 字体库复制安装
- 华为模拟器eNSP将防火墙配置成三层核心交换机
- stm32f405rgt6芯片手册
- jsp、html通过添加注册表打开本地应用
- Linux内核regulator架构和编写
- c语言小鱼的游泳时间,信息学奥林匹克竞赛-小鱼的游泳时间
- linux驱动程序的测试,Linux驱动学习笔记(4)字符设备驱动测试
- VHD轉換VHDX格式
- IT项目开发团队建设与管理总结(转)
- Golang 项目配置文件读取之 viper 实践