Part1: 李沐课程 卷积神经网络 部分
《动手学深度学习》之现代卷积神经网络
Part2: AI研习社 “猫狗大战” 比赛
本周在上周学习的基础,继续对猫狗大战进行代码的学习。
- 首先,将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即可。
最终结果:
- 其次,使用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研习社的结果如下:
|