前情提要
上一篇文章我们讲了搭建一个神经网络模型,不知道大家有没有注意到,代码里面其实是多了两个与网络结构图中不一样的地方,就是这样的两行代码。
//__init__
self.drop1 = nn.Dropout(0.5)
//forward
x = self.drop1(x)
其实这是一种优化神经网络的思想,叫做丢弃一部分参数。也就是说,随机地在一层网络中选取一定数量的参数,不让它们参与下一层网络的计算。由于每次选取的参数都是随机的,所以它能够在一定程度上避免网络进入一种“过拟合”的状态。
何为过拟合?
意思就是模型在测试集上的数据太漂亮了,准确率高达99.9%!但是在测试集上的结果却不是令人满意的。而这往往就是因为网络中一些参数的权重过大,导致影响了网络的结果造成的。
所以采用dropout的方法,随机的弃用一些参数,这样可以使得我们的模型在训练集和测试集上都能有个不错的效果。
加载数据集数据
训练一个网络模型,我把它简要的分为以下几个步骤:搭建网络、加载数据集、训练网络/测试网络、保存模型、验证模型。上一篇文章我们已经搭建了网络,那么这一章我们就来讲讲如何加载数据集。
针对数据集加载,其实torch内置了一些比较流行的官方数据集,直接用torchvision就可以使用并且加载,例如MNIST、Cifar、Fashion-MNIST等。
import torch.utils.data
import torchvision
train_data = torchvision.datasets.MNIST(root="../dataset/train_set", train=True, transform=torchvision.transforms.ToTensor(),
download=False)
test_data = torchvision.datasets.MNIST(root="../dataset/test_set", train=False, transform=torchvision.transforms.ToTensor(),
download=False)
train_data_size = len(train_data)
test_data_size = len(test_data)
print("训练数据集的大小为:{}".format(train_data_size)