摘要:
本文在 PyTorch 框架下搭建了 AlexNet ,并在 CIFAR10 上完成了图片分类。同时,更正了一些原论文中的小错误(如:输入图像尺寸)。由于 CIFAR10 没有验证集,本文将训练集的 10% 当作验证集。
完整代码已上传至 GitHub:https://github.com/TiezhuXing01/AlexNet_in_PyTorch
1. 引入库
import torch
import torch.nn as nn
import numpy as np
from torchvision import datasets
from torchvision import transforms
from torch.utils.data.sampler import SubsetRandomSampler
SubsetRandomSampler
是 PyTorch 中的一个采样器(sampler)。
具体可以看这篇文章:SubsetRandomSampler 是什么?
2. 选择设备
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
通常情况下,我们都会选择在GPU上训练网络模型,因为神经网络的训练需要大量的计算,而英伟达的GPU提供了CUDA(一个加速计算库)。但如果你的电脑显卡是AMD的,那么有很大概率不支持使用CUDA,此时只能用CPU训练。但在CPU上训练模型是十分缓慢的。如果你暂时没法换电脑,那我建议你去租一个服务器。或者使用阿里云、百度飞桨、谷歌Colab等平台。
3. 加载数据集
CIFAR-10 是一个经典的计算机视觉数据集,用于图像分类任务。它包含了来自 10 个不同类别的 60,000 张彩色图像,每个类别有 6,000 张图像。数据集被分为训练集和测试集,其中训练集包含 50,000 张图像,测试集包含 10,000 张图像。本文拿出训练集的 10% 作为验证集。
3.1 定义获取训练集和验证集的数据加载器
def get_train_val_loader(data_dir, batch_size, augment,
random_seed, valid_size = 0.1, shuffle = True):
# ------------- 设置图像变换 ------------- #
# (1) 归一化
normalize = transforms.Normalize(mean = [0.4914, 0.4822, 0.4465],
std = [0.2023, 0.1994, 0.2010])
# (2) 验证集图像变换
val_transform = transforms.Compose([transforms.Resize(227),
transforms.ToTensor(),
normalize])
# (3) 训练集是否数据增强
if augment:
train_transform = transforms.Compose([transforms.RandomHorizontalFlip(),
transforms.Resize(227),
transforms.ToTensor(),
normalize])
else:
train_transform = transforms.Compose([transforms.Resize(227),
transforms.ToTensor(),
normalize])
# ----------
标签:从零开始,nn,self,loader,PyTorch,train,out,AlexNet,size
From: https://www.cnblogs.com/xing9/p/18002038/AlexNet-PyTorch