fast.ai course-v3 笔记
fast.ai 介绍
fastai 库可以说是深度学习包 pytorch 最佳实践,简化了快速准确的神经网络训练,几乎做到“开箱即用”的支持 vision,text,tabular,和 collab(协同过滤)的模型,实现了常见的模型结构,诸如 resnet34,resnet50 等。基本可用完成 10 行代码进行模型训练、评估等,非常适合快速上手和深度学习入门
代码结构
pre-lesson
在哪儿进行 fast.ai course-v3 的学习呢
course-v3 主体部分是 jupyter notebook,因此,需要一台有 GPU+jupyter 的服务器。
但很多数据集和预训练的模型都在 aws 或者 Dropbox 上,如果使用国内的服务器,没有高带宽的 ss 是很吃亏的。之前在公司的双卡服务器上进行了尝试,1m/s 的网速,1080Ti 的训练速度,进行 lesson1 简直欲仙欲死。
因此推荐几个官方解决方案,在数据获取和模型训练速度上,拥有质的变化。
CoLab
优点:网速飞快,训练飞快
缺点:墙,需要梯子。
-
登录 Colab 点击, 点击 GITHUB 选项卡,输入
fastai/course-v3
,就能加载当前项目的 ipynb。 -
修改运行时环境:点击 runtime,选择 GPU,save。
-
运行
!curl -s https://course.fast.ai/setup/colab | bash
,初始化 notebook -
疯狂点确定。存储备份在自己的 drive 上。
官网参考 here。
Crestle.ai
参考 crestle.ai
没使用过
Kaggle Kernels
优点:只要有 kaggle 账户就能直接使用,没被墙
缺点:访问速度一般~~;训练速度较慢,K80,据说 resnet34 40 分钟
lesson 1 What's your pet
图像分类初级课程,快速构建 resnet34 的图片分类器。
课程设置
·该课程由 Jeremy Howard 和 Rachel Thomas 教授。
·本课程的先决条件是“高中数学 + 1 年编码经验”。Python 编码知识是一个优势。
·该课程包括 7 节课,每节课约 1.5 至 2 小时,每周工作 8-10 小时。建议您通过完整的课程/视频,而不是尝试理解/谷歌一切。
数据集说明
Oxford-IIIT Pet Dataset,2012 年的分类准确率 59.21%。
37 个不同的宠物类别。每个类约有 200 张图像。它有 12 只猫和 25 种犬种。本课程的早期版本使用了“猫与狗”数据集,这些数据集多年来使用易于获得的模型变得过于容易。Oxford-IIIT 宠物数据集分类是细粒度分类的问题(即类似类别之间的分类)。
·标签是预测过程的目标。在数据集中,各个图像的名称格式为:'path_label_extension.jpg'。正则表达式用于从文本中提取标签。
·图像大小:在本课程中,使用的图像是方形(即高度=宽度),大小为 224 x 224.不同形状/大小的图像会根据大小调整大小并进行裁剪。深度学习模型的缺点之一是它们需要相同大小的图像。可变尺寸图像在课程的第 2 部分的范围内。
·databunch 对象:包含培训和验证数据
·图像的标准化:单个像素值的范围从 0 到 255.它们被标准化以使值为平均值 0 和标准差 1.图像增强:从现有图像生成新图像。有助于避免过度贴合。填充:将在后续课程中讨论的概念。
notebook 说明
untar_data
把 url 的数据 fname 下载并解压到 dest。
ImageDataBunch
fastai 定义的图片数据结构
模型
CNN(卷积神经网络)需要 train2 件事:数据和模型结构
resnet34
cnn 中有一些在很多任务上表现很好很稳定的模型结构,例如 resnet34,resnet50,我们可以直接使用预定义好的 resnet34 的模型,进行快速的模型训练。
调用的时候会使用在 imagenet 预训练好权重的 resnet34,进行 fine-tune。预训练好的模型是针对 1000+ 类图片进行分类,因此本来就对 pet 数据会有一定的效果。 resnet50 也是很好的选择,但需要更多的计算能力。更多的图像模型效果参考 Stanfor 的 benchmark
为什么选择 resnet34
因为在图片相关的训练任务重,resnet34,resnet50 都取得了几乎最好的结果(参考 stanford 的 dawn benchmark)。而对于深度学习图像分类而言,从 0 开始训练图像分类,不如从已有 pre-trained 模型进行 fine-tune 得到的结果更好、更高效。Know something to anything, instead of knows nothing.
·** ResNet vs Inception:** resnet 获得了更好的结果。
Lower layers vs higher layers
-
更低层:更多的是基础的模式。比如第一层一般是水平线、垂线、对角线等
-
第二层是把第一层的特征结合起来
-
由于基本的模式或者几何图形大致相同,因此无需大量训练低层模型,也给模型的迁移提供了基础
-
与未训练的模型相比,unfreeze 所有层会导致准确性的丢失,因为底层的权重收到了干扰。不同的层也给出了不同的语义复杂度。因此更早的层应该以更低的学习率 fine tune 或者不训练
-
可以查看这篇文章,观察每层 cnn 获取的特征 Zeiler and Fergus paper on visualizing CNN
-
lr_finder. 传入不同的学习率,可以查看参数更新的速率。
调用的时候会使用在 imagenet 预训练好权重的 resnet34,进行 fine-tune。预训练好的模型是针对 1000+ 类图片进行分类,因此本来就对 pet 数据会有一定的效果。
验证集验证,error_rate 评估_
fit_one_cycle
之后会有文章专门讲 fit one cycle 这件事。
老师在课程中说到,尽管去跑代码,知道你要做的任务的输入是什么,输出什么样的结果。多跑了代码,就会慢慢开始对自己要做的事情有所了解。如果你花 70 个小时沉浸在书里,最终获得的收益反而不如先上手 deep learning,再补充理论基础。
runing code, knows what goes in and what comes out. Run the code, you'd know how it works out.
suggest a potential breakthrough, with more robust language models can help researchers tackle a range of unsolved problems.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于