MNIST 数据集,其包含70000 个28×28 的手写数字的数据集,其中又分为60000 个训练样本与10000 个测试样本。
安装实验用到的包
anaconda promt 安装python包, 首先在开始界面打开prompt
进入到相应的虚拟环境中,下面的python38你自己创建的虚拟环境名称。
# 激活虚拟环境,venv是你python虚拟环境名字
activate python38
安装package,依次输入下面的指令
# 安装package
pip install torch
pip install numpy
pip install torchvision
pip install matplotlib
pip install opencv-python
最后一行显示 successfully代表安装成功。
Ⅰ. 数据读取器
import torch
from torch import nn
from torch import optim
from torch.nn.parameter import Parameter
import torchvision
import torchvision.transforms as transforms
import torch.nn.functional as F
import random
import matplotlib.pyplot as plt
import numpy as np
import os
# 在需要生成随机数的程序中,确保每次运行程序所生成的随机数都是固定的,使得实验结果一致
#torch.manual_seed(1)
batch_size_train = 64
batch_size_valid = 64
batch_size_test = 1000
1.1 训练集
下载训练集
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size_train)
1.2. 验证集和测试集
官方的MNIST 数据集当中是没有划分验证集的,但为了使训练结果更加直观,选择将10000 个测试样本当中的5000 个划分为验证集,剩下5000 个依然为测试集。在此需要使用torch.utils.data.sampler.SubsetRandomSampler() 函数进行抽样。
首先获取测试样本的索引
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
indices = range(len(testset))
然后对该索引进行划分,前5000 个样本作为验证集,后5000 个作为测试集
# 测试集中再取出一半作为验证集
indices_valid = indices[:5000]
sampler_valid = torch.utils.data.sampler.SubsetRandomSampler(indices_valid)
validloader = torch.utils.data.DataLoader(testset, batch_size=batch_size_valid, sampler=samp