介绍
小编给大家分享一下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 ())
训练模型的损失部分截图如下:
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的优点
1. pytorch是相当简洁且高效快速的框架;2。设计追求最少的封装;3。设计符合人类思维,它让用户尽可能地专注于实现自己的想法;4。与谷歌的Tensorflow类似,公平的支持足以确保pytorch获得持续的开发更新;5。PyTorch作者亲自维护的论坛供用户交流和求教问题6。入门简单