动手学深度学习Pytorch版本学习笔记 Task 08

1.数据增强

图像增强算是训练cv模型的标配操作了,尤其是随机裁剪(randomCrop)和水平翻转两种增强方法,几乎是一定会带来效果提升的。其它的数据增强方法还有很多,并不都一定有效,需要结合实际情况,更多的还是通过对比实验,交叉验证来尝试。

2.模型微调

现实世界中,假定要使我们的模型识别一种新物体(以椅子为例)的模型时,我们需各种椅子各个角度的图片,然后训练,但我们会遇到以下问题:

  1. 如果原始数据集的规模像ImageNet那么大,则可能会过拟合。
  2. 解决问题1,需要搜集更多的数据,花费更多时间和金钱成本。
    因此,本节主要介绍迁移学习(transfer learning)的一种常用技术:微调(fine tuning),用来解决上述问题。
    a. 我们直接使用原始模型的参数,对新的数据集进行训练,需要修改的是输入数据集和输出层。
    b. 虽然原始数据集中其余的图像和椅子无关,但是从原始模型中也能学习到识别边缘、纹理、形状和物体组成等特性,这些特征对识别椅子一样有效。
    c. 使用这种方法能快速得到精度较好的模型。
    使用resnet预训练模型核心代码如下:
# 加载预训练模型
pretrained_net = models.resnet18(pretrained=False)
pretrained_net.load_state_dict(torch.load('/home/kesci/input/resnet185352/resnet18-5c106cde.pth'))
# 修改输出层
pretrained_net.fc = nn.Linear(512, 2)
# 初始化参数
# 输出参数
output_params = list(map(id, pretrained_net.fc.parameters()))
# 特征参数(中间层参数,继承预训练模型参数)
feature_params = filter(lambda p: id(p) not in output_params, pretrained_net.parameters()) 
# 需要注意到的是,特征参数由于是微调,学习率设置的小于输出参数
lr = 0.01
optimizer = optim.SGD([{'params': feature_params},
                       {'params': pretrained_net.fc.parameters(), 'lr': lr * 10}],
                       lr=lr, weight_decay=0.001)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值