第四次作业:猫狗大战挑战赛

本博客为OUC2022秋季软件工程第四次作业

一、猫狗大战VGG模型的迁移学习

关键步骤:

 这个是 pytorch 支持的将数据发送到 GPU,之后的运算都在 GPU 上进行。然后用定义好的 VGG 模型训练输入得到输出。

 将 VGG 输出的结果转化为对每一类的预测概率,把结果输入到 Softmax 函数,即将结果进行归一化处理,维度是1,每个结果的范围都在 [0, 1] 中,和为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

这里注意通过上面方式解压好的代码不能直接用,需要新建一个文件来存放图片,否则会报错,如下:

第四次作业:猫狗大战挑战赛_第2张图片

 3、利用训练好的模型进行测试:

第四次作业:猫狗大战挑战赛_第3张图片

 4、保存在 csv 文件中并提交

第四次作业:猫狗大战挑战赛_第4张图片

 第四次作业:猫狗大战挑战赛_第5张图片

 三、心得体会

通过这次实验,我们小组的同学都体会到了训练模型、运用模型的整个过程,途中出现了很多bug,集着小组的力量一一解决,十分有意义的一次实验!

你可能感兴趣的:(软件工程)