fastai2019深度学习课堂笔记

本文是fastai2019深度学习课程的重点笔记,涵盖数据处理、模型构建、训练与评估等方面。介绍了数据增强、迁移学习、Res块、优化器Adam等关键概念,并分享了实战中遇到的问题及解决办法,如GPU内存溢出、Broken pipe错误。适合深度学习初学者参考。
摘要由CSDN通过智能技术生成

作为自学党,走入深度学习所面临的主要问题不是理论知识多少,而是怎样理论结合实际,也就是说:怎么写代码。为此,基于pytorch高度封装的fastai是很好的选择,其相关课程内容也注重代码,能够比较好地帮助初学者学以致用,迅速上手。当然,fastai的学习不是深度学习的唯一亦或终点,但是对于新手来说,无疑是一个难度适中,不容易劝退,同时也能够收获满满的选择。

本文收录自认为fastai practical deep learning v3中的重点方法、经验、概念和自己的总结以及心得。

时间宝贵,笔记只起一个总结和帮助回忆的辅助作用而且其中很多详细的理论内容看吴恩达的深度学习系列课程效果会好得多,原课程内容以及实战应用才是重点。当然,也期待以后能有更加全面美观的笔记内容出现~

本文会随着fastai的更新以及我对课程的内容回顾而不断调整内容。

如果对fastai感兴趣欢迎关注百度贴吧fastai,一起交流讨论,我和其他人包括课程负责人会持续在上面发布内容帮助所有感兴趣的人学习深度学习,以及最新的课程资源等等。

在这里插入图片描述

deep learning pipeline

总的而言,深度学习的pipeline和机器学习是类似的:

  1. 获得源数据
  2. 数据处理
  3. 模型构建

以下三步重复进行,知道获得满意的结果

  1. 模型训练
  2. 模型评估
  3. 模型调试

接下来,我将根据pipeline中的各项步骤对其进行逐一的细分,总结并且注明注意事项。

获得源数据

  1. 下载
  2. 解码(一般是解码)
  3. 读取

关于数据源的获取,第一堂课后的笔记有相信的介绍,各取所需即可。

数据处理

数据处理可以说是fastai中最tricky,最繁琐的一个阶段。其特性在深度学习中普遍适用。

处理源数据

获得的源数据不满足深度学习的条件时,我们需要先进行一定的处理,使其具有统一的格式以及可用于训练检验的标签。

data segmentation

对于图片识别问题而言,是要对图片中的每一个像素进行分类,同类(往往就是同一种物体)通过整形的像素值表示成统一的颜色,分类后的图片单独保存,其中每种颜色的像素区域(亦即颜色)起到监督学习中标签的作用,实际大概是这样:

注意:使用data segmentation处理后的图像使用unet模型更好

progressive resizing

往往用于图像训练,其实是属于图像迁移学习的一部分。

  1. 使用缩小后的数据集进行训练(往往缩小1/2,比如256的图片缩成128,64意义不大)
  2. 进行模型调试,获得满意结果
  3. 迁移到原图片进行训练。所谓迁移,其实就是使用原大小的图片再训练几轮即可~

作用是在“不”影响模型表现得情况下极大地缩短时间成本。

normalization归一化

一般而言,imagenet数据集就应该使用imagenet.stats进行归一化。自己的归一操作很有可能消去原有图片的一些特征

processors & transformers

出现在第四课处理表格数据

  • 前者多用于文本处理,尤其是表格数据;后者多用于图片。
  • processors在整个训练过程中只出现一次,而且只在模型训练之前;transformers可以在训练过程中做多次变形,多次使用,可以在训练之前,也可以在训练期间。

datablocks

datablocks是fastai中数据处理的重要概念,前提是我们已经获得了统一数据形式且拥有标签来源的数据。

使用均方根误差RMSPE

均方根误差广泛使用于人口预测,销售额预测等长尾分布的,在意比值差异而非精确数值或绝对值差异的数据集中。

在label_from_df方法中加入log=True即可使用RMSPE

具体内容待补充。

数据增强

  • 提供更多的数据
  • 提供正则化的效果

数据增强常用于计算机视觉领域,包括对比度、曝光度、旋转、对称、亮度等等,fastai对于图片处理是具有相当优势的。而如何将数据增强应用到其他领域也是下载广泛关注的一个问题。

fastai中数据增强最好的padding_mode是reflection,因为填充了黑边从而使图形更接近现实情况。

模型构建

16位浮点运算

在这里插入图片描述
建模时一步即可,前提是NVidia显卡+cuda驱动~,使用16位浮点计算可以显著降低GPU负担,甚至获得更好的分类模型!原理大概是泛化运算减缓了32位精确运算中的过拟合,增强模型的通用性。

wd - 正则化惩罚参数

参数越多模型越复杂?事实不是这样的,如果有大量的接近于0的参数,那么模型仍不容易过拟合,且能够拟合复杂的曲线,这是深度学习解决实际问题所需要的。

所以应该如何评价模型参数的复杂度呢?求他们的平方和,然后就可以通过将他们限定在一定的范围内。而wd就是对这个平方和值进行惩罚的参数,即机器学习正则化中的 l a m b d a lambda lambda

一般能够提供较好表现的wd=0.1,然而默认为0.001,这也能够提供较好的模型效果。

Adam

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值