这部分利用pytorch搭建一个神经网络模型来实现书写数字识别
代码基于python3.7, pytorch 1.0,cuda 10.0 .
手写数字识别
先使用已经提供的训练数据对搭建好的神经网络模型进行训练并完成参数优化;
然后使用优化好的模型对测试数据进行预测,对比预测值和真实值之间的损失
值,同时计算出结果预测的准确率。在将要搭建的模型中会用到卷积神经网络
模型,下面让我们开始吧。
import torch
import numpy
import torchvision
import matplotlib.pyplot as plt
%matplotlib inline
from torchvision import datasets, transforms # torchvision包的主要功能是实现数据的处理、导入和预览等
from torch.autograd import Variable
在torch.transforms中有大量的数据变换类,其中有很大一部分可以用于实现数据增强(Data Argumentation)。若在我们需要解决的问题上
能够参与到模型训练中的图片数据非常有限,则这时就要通过对有限的图片数据进行各种变换,来生成新的训练集了,这些变换可以是缩小或
者放大图片的大小、对图片进行水平或者垂直翻转等,都是数据增强的方法
# transform用于指定导入数据集时需要对数据进行哪种变换操作,在后面会介绍详细的变换操作类型,注意,要提前定义这些变换操作
transform = transforms.Compose([transforms.ToTensor(),
transforms.Lambda(lambda x: x.repeat(3,1,1)),
transforms.Normalize(mean = [0.5,0.5,0.5], std = [0.5,0.5,0.5])])
我们可以将以上代码中的torchvision.transforms.Compose类看作一种容器,它能够同时对多种数据变换进行组合。传入的参数是一个列表,
列表中的元素就是对载入的数据进行的各种变换操作。在以上代码中,在 torchvision.transforms.Compose中只使用了一个类型的转换变换transforms.ToTensor和一个数据标准化变换transforms.Normalize。(特别注意,这里由于图片的格式是单通道的,因此通过transforms.Lambda(lambda x: x.repeat(3,1,1))复制使其达到3通道)这里使用的标准化变换也叫作标准差变换法,这种方法需要使用原始数
据的均值(Mean)和标准差(StandardDeviation)来进行数据的标准化,在经过标准化变换之后,数据全部符合均值为0、标准差为1的标准
正态分布。计算公式如下: x n o r m = ( x − m e a n ) / s t d x_norm = (x - mean)/std xnorm=(x−mean)/std
不过我们在这里偷了一个懒,均值和标准差的值并非来自原始数据的,而是自行定义了一个,不过仍然能够达到
我们的目的。