摘要
本日志记录我初次用pytorch搭建卷积神经网络,参考了很多别人的经验和代码,主要是根据https://blog.youkuaiyun.com/jining11/article/details/89114502这篇博客,按照博客上的内容一步步弄下来的,加强了我对CNN的理解,并明白了如何使用torch搭建神经网络。(在这里十分建议看懂之后在自己写代码,而不是直接ctrl+c/ctrl+v)
CNN
卷积神经网络之前学习的时候就接触过,在图像识别领域用的比较频繁。之前上数字图像处理课程的时候,最后一个实验是识别麻将和交通标志。如果使用卷积神经网络进行训练识别,会要比简单的对比准确率高。为了熟悉CNN。特意从csdn上找了一篇博客进行仿写。博客链接: 原博客地址。
数据集介绍
CIFAR-10数据集可以在官网下载链接: link不过网速很慢,我会附上我下载好的python版本。CIFAR中50000个作为train数据,10000作为test数据。这些图片中不存在类的重叠。更加详细的介绍上链接。官网介绍的很详细。
CIFAR有10个类别,60000个32*32像素的图片,如下图为部分展示
代码实现
代码可以分为搭建神经网络,写fit函数,读取数据集合3个部分,下面将分别介绍
读取数据集合
关于数据读取之后,转换成torch的张量形式,和超参数的选择代码。
cifar10_mean = (0.49,0.48,0.45)
cifar10_std = (0.25,0.24,0.26)
#define transform operations
train_transform = transforms.Compose([
#data augmentation
transforms.Pad(4),
transforms.RandomHorizontalFlip(),
transforms.RandomCrop(32),
transforms.ToTensor(),
transforms.Normalize(cifar10_mean,cifar10_std)
])
test_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(cifar10_mean,cifar10_std)
])
#load data读取数据
train_dataset = torchvision.datasets.CIFAR10(root='./data/',
train=True,
transform=train_transform,
download=True)
test_dataset = torchvision.datasets.CIFAR10(root='./data',
train=False,
transform=test_transform,
)
#将训练集分为校验和训练
num_train = int(0.9*len(train_dataset))
num_val = int(0.1*