使用数据增强加迁移学习处理CIFAR10数据集

只是用卷积网络对CIFAR10数据集进行处理很难取得良好的效果,一味的增加网络深度会使得数据计算量大幅增加,很容易产生过拟合现象。所以我们使用数据增强和迁移学习的方法对数据集进行处理。

1 数据增强

在对图像进行处理时,增加样本数据会减小过拟合现象的影响。但是我们继续采集样本又是一件费时费力的事情,所以我们对原来的数据进行变换,在不改变图像属性的前提下增加数据量。具体代码如下:

transforms.RandomResizedCrop(size=256, scale=(0.8, 1.0)), # 将原始图像resize
transforms.RandomRotation(degrees=15),# 将图像在-15-15之间随机旋转
transforms.ColorJitter(),# 修改修改亮度、对比度和饱和度
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(), # 依概率将图像水平翻转 概率默认为0.5

通过以上代码我们对训练数据中的图像进行剪裁,旋转,修改亮度,对比度和饱和度,并做随机水平翻转。

2 迁移学习

这里我们使用Resnet18网络预训练参数

# 使用预训练的模型
net = models.resnet18(pretrained=True)
# 将最后的全连接层改成十分类
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net.fc = nn.Linear(512, 10)
#net = torch.nn.DataParallel(net)
net.to(device)

将resnet18网络的最后的全连接层改为10分类,并使用GPU进行训练。注意这里我们并没有锁住Resnet18中的参数,也就是说在梯度下降进行更新参数时是会更新Resnet18网络中的参数的。
在使用数据增强加迁移学习的条件下,仅仅20个epoch就达到了训练集正确率0.828800,测试集正确率为0.938300。可见迁移学习的强大。

你可能感兴趣的:(Pytorch图像处理,深度学习,神经网络)