pytorch如何实现MNIST手写体识别

  介绍

小编给大家分享一下pytorch如何实现MNIST手写体识别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>实验环境

1.4 pytorch Windows 10

python 3.7
cuda 10.1(我笔记本上没有可以使用cuda的显卡)

<强>实验过程

1。确定我们要加载的库

import 火炬   import  torch.nn  as 神经网络   import  torchvision  #这里面直接加载MNIST数据的方法   import  torchvision.transforms  as  transforms  #,将数据转为张量   import  torch.optim  as  optim    import  torch.utils.data.dataloader  as  dataloader

2。加载数据

这里使用所有数据进行训练,再使用所有数据进行测试

train_set =, torchvision.datasets.MNIST (=& # 39;根源。/数据# 39;,,#,文件存储位置=True,火车,   ,变换=transforms.ToTensor (),   下载=True   )      时间=train_dataloader  dataloader.DataLoader(数据集=train_set洗牌=False, batch_size=100) #,数据集可以省      & # 39;& # 39;& # 39;   dataloader返回(图片,标签)   其中,   图像维度:[28]batch_size 1 28日   标签:[batch_size],即图片对应的   & # 39;& # 39;& # 39;      时间=test_set  torchvision.datasets.MNIST (=& # 39;根源。/数据,,=False,火车,   ,变换=transforms.ToTensor (),   下载=True   )      时间=test_dataloader  dataloader.DataLoader (test_set batch_size=100,洗牌=False), #,数据集可以省

3。定义神经网络模型

这里使用全神经网络作为模型

class  NeuralNet (nn.Module):   ,def  __init__(自我、in_num h_num out_num):   ,超级(NeuralNet,自我). __init__ ()=,,self.ln1  nn.Linear (in_num h_num)=,,self.ln2  nn.Linear (h_num out_num)=,,self.relu  nn.ReLU ()   ,   向前,def (自我,x):   ,return  self.ln2 (self.relu (self.ln1 (x)))

4。模型训练

in_num =, 784, #,输入维度   h_num =, 500, #,隐藏层维度   时间=out_num  10, #,输出维度   时间=epochs  30, #,迭代次数   learning_rate  0.001=,   时间=USE_CUDA  torch.cuda.is_available(), #,定义是否可以使用cuda      时间=model  NeuralNet (in_num h_num, out_num), #,初始化模型   时间=optimizer  optim.Adam (model.parameters (), lr=learning_rate), #,使用亚当   时间=loss_fn  nn.CrossEntropyLoss(), #,损失函数      for  e 拷贝范围(时代):   ,for 我data 拷贝列举(train_dataloader):   ,(图片,标签)=数据=,,images  images.reshape (1、28 * 28), #, (batch_size, 784)   ,if  USE_CUDA:   时间=images 才能;images.cuda(), #,使用cuda   时间=labels 才能;labels.cuda(), #,使用cuda   ,,=,y_pred 模型(图像),#,预测=,,loss  loss_fn (y_pred、标签),#,计算损失   ,   ,optimizer.zero_grad ()   ,loss.backward ()   ,optimizer.step ()   ,=,,n  e  *小姐:+ 1   100年,if  n  %,,==, 0:   打印才能(n, & # 39;失:& # 39;,loss.item ())

训练模型的损失部分截图如下:

 pytorch如何实现MNIST手写体识别

5。测试模型

with  torch.no_grad ():   total =, 0   correct =, 0   ,for (图片,标签),拷贝test_dataloader:=,,images  images.reshape (1、28 * 28)   ,if  USE_CUDA:   时间=images 才能;images.cuda ()   时间=labels 才能;labels.cuda ()   ,,=,result 模型(图像)=,,prediction  torch.max(结果,1)[1],#,这里需要有[1],因为它返回了概率还有标签   +=,total  labels.size (0)   +=,correct  (prediction ==,标签).sum () .item ()   ,   ,print (“, accuracy  of  total {},图片:,{}%“.format(,, 100, *,正确/总数))

<强>实验结果

最终实验的正确率达到:98.22%

 pytorch如何实现MNIST手写体识别

pytorch的优点

1. pytorch是相当简洁且高效快速的框架;2。设计追求最少的封装;3。设计符合人类思维,它让用户尽可能地专注于实现自己的想法;4。与谷歌的Tensorflow类似,公平的支持足以确保pytorch获得持续的开发更新;5。PyTorch作者亲自维护的论坛供用户交流和求教问题6。入门简单

pytorch如何实现MNIST手写体识别