![7aaabbbe787046e6433298d2e104b74d.png](https://i-blog.csdnimg.cn/blog_migrate/23d285e183d4ef677ac7aca5b1710d26.jpeg)
原文链接:
https://nextjournal.com/gkoehler/pytorch-mnistnextjournal.com欢迎关注公众号:xfxuezhang
hello大家好!我又来搬文章了!
![7e74e282e4ae274d4152549215313eb8.png](https://i-blog.csdnimg.cn/blog_migrate/d46cffcbdb1aef7841cbd1cce5f89e51.jpeg)
MNIST可以说是机器学习入门的hello word了!导师一般第一个就让你研究MNIST,研究透了,也算基本入门了。好的,今天就来扯一扯学一学。
![68a60fb776a77111faf12e23b7493fd5.png](https://i-blog.csdnimg.cn/blog_migrate/f29921374fd2faa0554e12c5c8cadfe0.jpeg)
在本文中,我们将在PyTorch中构建一个简单的卷积神经网络,并使用MNIST数据集训练它识别手写数字。在MNIST数据集上训练分类器可以看作是图像识别的“hello world”。
MNIST包含70,000张手写数字图像: 60,000张用于培训,10,000张用于测试。图像是灰度的,28x28像素的,并且居中的,以减少预处理和加快运行。
设置环境
在本文中,我们将使用PyTorch训练一个卷积神经网络来识别MNIST的手写数字。PyTorch是一个非常流行的深度学习框架,比如Tensorflow、CNTK和caffe2。但是与其他框架不同的是,PyTorch具有动态执行图,这意味着计算图是动态创建的。
先去官网上根据指南在PC上装好PyTorch环境,然后引入库。
import torch
import torchvision
from torch.utils.data import DataLoader
准备数据集
导入就绪后,我们可以继续准备将要使用的数据。但在那之前,我们将定义超参数,我们将使用的实验。在这里,epoch的数量定义了我们将循环整个训练数据集的次数,而learning_rate和momentum是我们稍后将使用的优化器的超参数。
n_epochs = 3
batch_size_train = 64
batch_size_test = 1000
learning_rate = 0.01
momentum = 0.5
log_interval = 10
random_seed = 1
torch.manual_seed(random_seed)
对于可重复的实验,我们必须为任何使用随机数产生的东西设置随机种子——如numpy和random!
现在我们还需要数据集的dataloader。这就是TorchVision发挥作用的地方。它让我们用一种方便的方式来加载MNIST数据集。我们将使用batch_size=64进行训练,并使用size=1000对这个数据集进行测试。下面的Normalize()转换使用的值0.1307和0.3081是MNIST数据集的全局平均值和标准偏差,这里我们将它们作为给定值。
TorchVision提供了许多方便的转换,比如裁剪或标准化。
train_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST('./data/', train=True, download=True,
transform=torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(
(0.1307,), (0.3081,))
])),
batch_size=batch_size_train, shuffle=True)
test_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST('./data/&