第四周作业:卷积神经网络(Part2)

Part1: 李沐课程 卷积神经网络 部分

《动手学深度学习》之现代卷积神经网络

Part2: AI研习社 “猫狗大战” 比赛

本周在上周学习的基础,继续对猫狗大战进行代码的学习。

  1. 首先,将VGG网络替换成李沐课程里讲过的ResNet,进行训练,最终提交结果到AI研习社。
class conv_net(nn.Module):
    def __init__(self):
        super(conv_net,self).__init__()
        self.net = nn.Sequential(b1, b2, b3, b4, b5,
                    nn.AdaptiveAvgPool2d((1,1)),
                    nn.Flatten(), nn.Linear(512, 2))

    def forward(self,x):
        x = F.LogSoftmax(self.net(x), dim=1)
        return x

:网上资料说,LogSoftmax能够解决函数overflow和underflow,加快运算速度,提高数据稳定性。其中最重要的一点,是适用于损失函数是 NLLLoss() ,原因可以查看博客。如果使用CrossEntropyLoss()损失函数,则使用SoftMax即可。

第四周作业:卷积神经网络(Part2)_第1张图片

最终结果:
在这里插入图片描述

  1. 其次,使用ResNet-50跟ResNet-152进行迁移学习。

本次代码,图片处理成 224 × 224 × 3 224\times 224 \times 3 224×224×3 的大小,同时进行归一化处理,每个batch_size设置成了64,学习率0.001。

在使用ResNet进行迁移学习时,只需要PyTorch加载预训练模型

resnet50 = models.resnet50(pretrained=True)

大多数参数已经训练好了,需要冻结前面层的参数,因此设置 。

requires_grad = False

最后根据自己的任务调整ResNet最后一层即可,由于猫狗大战属于二分类的任务,所以只需要将ResNet的最后一层替换为。

 nn.Linear(256, 2)

ResNet50在测试集上,1个epoch准确率能到95.8%,10个epoch能到97.75%。
在这里插入图片描述
在这里插入图片描述

提交AI研习社的结果如下:第四周作业:卷积神经网络(Part2)_第2张图片

你可能感兴趣的:(人工智能,深度学习,神经网络,深度学习,pytorch)