本博客为OUC2022秋季软件工程第四次作业
一、猫狗大战VGG模型的迁移学习
关键步骤:
这个是 pytorch 支持的将数据发送到 GPU,之后的运算都在 GPU 上进行。然后用定义好的 VGG 模型训练输入得到输出。
将 VGG 输出的结果转化为对每一类的预测概率,把结果输入到 Softmax 函数,即将结果进行归一化处理,维度是1,每个结果的范围都在 [0, 1] 中,和为1。
屏蔽预训练模型的权重,只训练最后一层的全连接的权重。最后一层的添加,是通过
model_vgg_new.classifier._modules['6'] = nn.Linear(4096, 2)
来实现的,LogSoftmax 即对 Softmax 的结果取 log。
采用随机梯度下降法来训练模型的好处是每个训练步骤要快得多,也更加随机,可以帮助算法跳出局部最小值。
二、利用fine-tune的VGG模型进行测试
附上一些重要的步骤
1、下载数据并解压数据集
# 下载并解压当前目录
! wget https://static.leiphone.com/cat_dog.rar
! unrar x cat_dog.rar
2、数据处理
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
vgg_format = transforms.Compose([
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize,
])
data_dir = './cat_dog'
dsets = {x: datasets.ImageFolder(os.path.join(data_dir, x), vgg_format)
for x in ['train','val', 'test']}
dset_sizes = {x: len(dsets[x]) for x in ['train', 'val', 'test']}
dset_classes = dsets['train'].classes
这里注意通过上面方式解压好的代码不能直接用,需要新建一个文件来存放图片,否则会报错,如下:
3、利用训练好的模型进行测试:
4、保存在 csv 文件中并提交
三、心得体会
通过这次实验,我们小组的同学都体会到了训练模型、运用模型的整个过程,途中出现了很多bug,集着小组的力量一一解决,十分有意义的一次实验!