实验任务:使用预训练resnet18实现CIFAR-10分类
数据集:https://links.jianshu.com/go?to=https%3A%2F%2Fwww.cs.toronto.edu%2F%7Ekriz%2Fcifar-10-python.tar.gz
数据集:CIFAR-10数据集
使用Pytorch高层API中的Resnet18进行图像分类实验。
torchvision.models.resnet18()
什么是“预训练模型”?什么是“迁移学习”?
比较“使用预训练模型”和“不使用预训练模型”的效果。
resnet = models.resnet18(pretrained=True)
resnet = models.resnet18(pretrained=False)
损失函数:交叉熵
优化器:Adam优化器,Adam优化器的介绍参考NNDL第7.2.4.3节
评价指标:准确率
1.1数据读取
在本实验中,将原始训练集拆分成了train_set、dev_set两个部分,分别包括40 000条和10 000条样本。将data_batch_1到data_batch_4作为训练集,data_batch_5作为验证集,test_batch作为测试集。 最终的数据集构成为:
- 训练集:40 000条样本。
- 验证集:10 000条样本。
- 测试集:10 000条样本。
读取一个batch数据的代码如下所示:
import os
import pickle
import numpy as np
def load_cifar10_batch(folder_path, batch_id=1, mode='train'):
if mode == 'test':
file_path = os.path.join(folder_path, 'test_batch')
else:
file_path = os.path.join(folder_path, 'data_batch_'+str(batch_id))
#加载数据集文件
with open(file_path, 'rb') as batch_file:
batch = pickle.load(batch_file, encoding = 'latin1')
imgs = batch['data'].reshape((len(batch['data']),3,32,32)) / 255.
labels = batch['labels']
return np.array(imgs, dtype='float32'), np.array(labels)
imgs_batch, labels_batch = load_cifar10_batch(folder_path=r'C:\Users\320\PycharmProjects\pythonProject/cifar-10-batches-py',