本篇博客站在复现的角度,讲解每一步可能遇到的问题。但并不会逐一对每句代码进行讲解,因此至少需要理解pytorch训练神经网络的过程(如何求梯度并更新参数)。
你可以狠狠的戳这里,直接查看pytorch官网原项目:
我使用的环境:
- pytorch 1.4+cpu
- python 3.7‘
CIFAR10数据样式
我们跳过一些展示图片的过程,直入主题。
首先,要下载CIFAR10数据库。注意:
1、torchvision数据集输出的是PIL类,且值取值范围是[0,1]。因此首先要将PIL转换为Tensor类。pytorch官网上又将其值归一化到[-1,1],这一步跳过也可以。
推荐阅读:
知乎:什么时候对数据进行[0,1]归一化,什么时候[-1,1]归一化,二者分别在什么场景?
博客:为什么一些机器学习模型需要对数据进行归一化?
2、要是运行出错就把num_workers 这个选项设为0。关于num_wokers作用:
num_workers:使用多进程加载的进程数,0代表不使用多进程
import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
testset = torchvision