本文的示例代码为GPU版,如若需要CPU版代码,请自行删去代码中关于device的部分。
一个全连接神经网络就想当于是一个多层感知机,接下来我将从零开始构造一个全连接神经网络,包括:结点参数,损失函数,优化方法等。
由于大部分模型都能在传统的MNIST数据集上取得比较好的分类性能,我将使用Fashion-MNIST数据集来进行我们的实验。这个数据集一共包含10个类别,数据集大小只有几十M。
我们在导入函数时一律将数据转化为Tensor类型,transforms.ToTensor
将数据转化为了torch.float32类型且位于[0.0,1.0]的tensor。
1 导入数据集
## 导入数据集
import torch
import torchvision as tv
from torchvision import transforms
from IPython import display
display.set_matplotlib_formats('svg')
mn_train = tv.datasets.FashionMNIST(root = '~/Datasets/FashionMNIST', train=True, download=True, transform = transforms.ToTensor())
mn_test = tv.datasets.FashionMNIST(root = '~/Datasets/FashionMNIST', train=False, download=True, transform = transforms.ToTensor())
print(len(mn_train), len(mn_test))
print(mn_train[0][0].shape, mn_train[0][1])
device = torch.device('cuda')##在GPU上训练
这段代码的输出是:
60000 10000
torch.Size([1, 28, 28]) 9
从上面的输出可以看到,数据集是一张张28*28尺寸的图片,其中9是第一张图片的标签。接下来我们看看数据具体长啥样。
2 查看数据
## 绘图
%matplotlib inline
import matplotlib.pyplot as plt
labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
imgs, y = [], []
for i in range(10):
imgs.append(mn_train[i][0])
y.append(mn_train[i][1])
labels = [labels[int(i)] for i in y]
plt.rcParams['figure.figsize'] = (12,