fast.ai 深度学习笔记(一)(1)

简介: fast.ai 深度学习笔记(一)

深度学习 2:第 1 部分第 1 课

原文:medium.com/@hiromi_suenaga/deep-learning-2-part-1-lesson-1-602f73869197

译者:飞龙

协议:CC BY-NC-SA 4.0

来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢 JeremyRachel 给了我这个学习的机会。

第一课

开始 [0:00]:

  • 为了训练神经网络,您几乎肯定需要图形处理单元(GPU) —— 具体来说是 NVIDIA GPU,因为它是唯一支持 CUDA(几乎所有深度学习库和从业者使用的语言和框架)的 GPU。
  • 有几种租用 GPU 的方法:Crestle [04:06], Paperspace [06:10]

Jupyter Notebook 和 猫狗分类简介 [12:39]

  • 您可以通过选择单元格并按shift+enter来运行单元格(您可以按住shift并多次按enter以继续向下移动单元格),或者您可以点击顶部的运行按钮。一个单元格可以包含代码、文本、图片、视频等。
  • Fast.ai 需要 Python 3
%reload_ext autoreload
%autoreload 2
%matplotlib inline*
# This file contains all the main external libs we'll use
from fastai.imports import *
from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *
PATH = "data/dogscats/"
sz=224

首先看图片 [15:39]

!ls {PATH}
'''
models  sample  test1  tmp  train  valid
'''
  • ! 告诉使用 bash(shell)而不是 python
  • 如果您不熟悉训练集和验证集,请查看实用机器学习课程(或阅读Rachel 的博客
!ls {PATH}valid
'''
cats  dogs
'''
files = !ls {PATH}valid/cats | head
files
'''
['cat.10016.jpg',
 'cat.1001.jpg',
 'cat.10026.jpg',
 'cat.10048.jpg',
 'cat.10050.jpg',
 'cat.10064.jpg',
 'cat.10071.jpg',
 'cat.10091.jpg',
 'cat.10103.jpg',
 'cat.10104.jpg']
'''
  • 这个文件夹结构是共享和提供图像分类数据集的最常见方法。每个文件夹告诉您标签(例如dogscats)。
img = plt.imread(f{PATH}valid/cats/{files[0]}')
plt.imshow(img);

  • f’{PATH}valid/cats/{files[0]}’ — 这是 Python 3.6. 格式化字符串,是一种方便的格式化字符串的方法。
img.shape
'''
(198, 179, 3)
'''
img[:4,:4]
'''
array([[[ 29,  20,  23],
        [ 31,  22,  25],
        [ 34,  25,  28],
        [ 37,  28,  31]],**[[ 60,  51,  54],
        [ 58,  49,  52],
        [ 56,  47,  50],
        [ 55,  46,  49]],**[[ 93,  84,  87],
        [ 89,  80,  83],
        [ 85,  76,  79],
        [ 81,  72,  75]],**[[104,  95,  98],
        [103,  94,  97],
        [102,  93,  96],
        [102,  93,  96]]], dtype=uint8)*
  • img 是一个三维数组(也称为秩为 3 的张量)。
  • 这三个项目(例如[29, 20, 23])代表介于 0 和 255 之间的红绿蓝像素值。
  • 这个想法是拿这些数字并使用它们来预测这些数字是否代表一只猫还是一只狗,基于查看大量猫和狗的图片。
  • 这个数据集来自Kaggle 竞赛,当它发布时(2013 年),最先进的技术准确率为 80%。

让我们训练一个模型 [20:21]

这是训练模型所需的三行代码:

data = ImageClassifierData.from_paths(PATH, tfms=tfms_from_model(resnet34, sz))
learn = ConvLearner.pretrained(resnet34, data, precompute=True)
learn.fit(0.01, 3)
'''
[ 0\.       0.04955  0.02605  0.98975]                         
[ 1\.       0.03977  0.02916  0.99219]                         
[ 2\.       0.03372  0.02929  0.98975]
'''
  • 这将进行 3 ,这意味着它将三次查看整个图像集。
  • 输出中的三个数字中的最后一个是验证集上的准确率。
  • 前两个是训练集和验证集的损失函数值(在本例中是交叉熵损失)。
  • 起始(例如0.1.)是轮数。
  • 我们在 17 秒内用 3 行代码实现了约 99% 的准确率(这在 2013 年将赢得 Kaggle 竞赛)![21:49]
  • 很多人认为深度学习需要大量时间、资源和数据 —— 总的来说,这并不是真的!

Fast.ai 库 [22:24]

  • 该库采用了他们能找到的所有最佳实践和方法 —— 每次有一篇看起来有趣的论文出来时,他们会测试它,如果它在各种数据集上表现良好并且他们能够找出如何调整它,那么它就会被实现在库中。
  • Fast.ai 为您整理了所有这些最佳实践并打包起来,大多数情况下,会自动找出最佳处理方式。
  • Fast.ai 建立在一个名为 PyTorch 的库之上,这是一个由 Facebook 编写的非常灵活的深度学习、机器学习和 GPU 计算库。
  • 大多数人对 TensorFlow 比 PyTorch 更熟悉,但 Jeremy 现在认识的大多数顶尖研究人员已经转向 PyTorch。
  • Fast.ai 非常灵活,您可以根据需要使用所有这些精心策划的最佳实践。您可以轻松地在任何时候连接并编写自己的数据增强、损失函数、网络架构等,我们将在本课程中学习所有这些。

分析结果[24:21]

这是验证数据集标签(将其视为正确答案)的样子:

data.val_y
'''
array([0, 0, 0, ..., 1, 1, 1])
'''

这些 0 和 1 代表什么?

data.classes
'''
['cats', 'dogs']
'''
  • data包含验证和训练数据
  • learn包含模型

让我们对验证集进行预测(预测以对数刻度表示):

log_preds = learn.predict()
log_preds.shape
'''
(2000, 2)
'''
log_preds[:10]
'''
array([[ -0.00002, -11.07446],
       [ -0.00138,  -6.58385],
       [ -0.00083,  -7.09025],
       [ -0.00029,  -8.13645],
       [ -0.00035,  -7.9663 ],
       [ -0.00029,  -8.15125],
       [ -0.00002, -10.82139],
       [ -0.00003, -10.33846],
       [ -0.00323,  -5.73731],
       [ -0.0001 ,  -9.21326]], dtype=float32)
'''
  • 输出表示对猫的预测和对狗的预测
preds = np.argmax(log_preds, axis=1)  # from log probabilities to 0 or 1
probs = np.exp(log_preds[:,1])        # pr(dog)
  • 在 PyTorch 和 Fast.ai 中,大多数模型返回预测的对数而不是概率本身(我们将在课程中稍后学习原因)。现在,只需知道要获得概率,您必须执行np.exp()

  • 确保您熟悉 numpy(np
# 1\. A few correct labels at random
plot_val_with_title(rand_by_correct(True), "Correctly classified")
  • 图像上方的数字是狗的概率
# 2\. A few incorrect labels at random
plot_val_with_title(rand_by_correct(False), "Incorrectly classified")

plot_val_with_title(most_by_correct(0, True), "Most correct cats")

plot_val_with_title(most_by_correct(1, True), "Most correct dogs")

更有趣的是,以下是模型认为肯定是狗的东西,但结果是猫,反之亦然:

plot_val_with_title(most_by_correct(0, False), "Most incorrect cats")

plot_val_with_title(most_by_correct(1, False), "Most incorrect dogs")

most_uncertain = np.argsort(np.abs(probs -0.5))[:4]
plot_val_with_title(most_uncertain, "Most uncertain predictions")

  • 为什么查看这些图像很重要?Jeremy 在构建模型后的第一件事是找到一种可视化其构建内容的方法。因为如果他想让模型更好,那么他需要利用做得好的事情并修复做得不好的事情。
  • 在这种情况下,我们已经了解了数据集本身的一些信息,即这里有一些可能不应该存在的图像。但很明显,这个模型还有改进的空间(例如数据增强 - 我们将在以后学习)。
  • 现在,您已经准备好构建自己的图像分类器(用于常规照片 - 也许不是 CT 扫描)!例如,这里是一个学生的示例。
  • 查看此论坛帖子以了解不同的可视化结果方式(例如,当存在超过 2 个类别时等)

自上而下 vs 自下而上[30:52]

自下而上:学习您需要的每个构建块,最终将它们组合在一起

  • 难以保持动力
  • 难以了解“全局图景”
  • 难以知道您实际需要哪些部分

fast.ai:让学生立即使用神经网络,尽快获得结果

  • 逐渐剥开层,修改,查看内部

课程结构[33:53]

  1. 使用深度学习的图像分类器(代码行数最少)
  2. 多标签分类和不同类型的图像(例如卫星图像)
  3. 结构化数据(例如销售预测)- 结构化数据来自数据库或电子表格
  4. 语言:NLP 分类器(例如电影评论分类)
  5. 协同过滤(例如推荐引擎)
  6. 生成语言模型:如何逐个字符从头开始编写您自己的尼采哲学
  7. 回到计算机视觉 - 不仅识别猫照片,还要找到照片中的猫所在位置(热图),并学习如何从头开始编写我们自己的架构(ResNet)

图像分类器示例:

图像分类算法对许多事物非常有用。

  • 例如,AlphaGo[42:20]查看了成千上万个围棋棋盘,每个棋盘上都有一个标签,说明这个棋盘最终是赢家还是输家。因此,它学会了一种能够查看围棋棋盘并判断它是好还是坏的图像分类——这是打好围棋最重要的一步:知道哪一步走得更好。
  • 另一个例子是一个早期的学生创建了一个鼠标移动图像分类器并检测到欺诈交易。

深度学习≠机器学习[44:26]

  • 深度学习是一种机器学习
  • 机器学习是由 Arthur Samuel 发明的。在 50 年代末,他让 IBM 大型机比他更擅长下棋,发明了机器学习。他让大型机反复对弈,并找出导致胜利的种种因素,然后利用这些因素,以某种方式编写自己的程序。1962 年,Arthur Samuel 说,未来绝大多数计算机软件将使用这种机器学习方法编写,而不是手工编写。
  • C-Path(计算病理学家)[45:42]是传统机器学习方法的一个例子。他拍摄了乳腺癌活检的病理学切片,咨询了许多病理学家关于与长期生存相关的模式或特征可能是什么。然后,他们编写了专家算法来计算这些特征,通过逻辑回归进行运算,并预测了生存率。它胜过了病理学家,但需要领域专家和计算机专家多年的工作才能构建。

fast.ai 深度学习笔记(一)(2)https://developer.aliyun.com/article/1482674

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
25天前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
65 3
|
2月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
107 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
27天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
84 9
|
2月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
63 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
2月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
69 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
2月前
|
机器学习/深度学习 并行计算 PyTorch
深度学习环境搭建笔记(一):detectron2安装过程
这篇博客文章详细介绍了在Windows环境下,使用CUDA 10.2配置深度学习环境,并安装detectron2库的步骤,包括安装Python、pycocotools、Torch和Torchvision、fvcore,以及对Detectron2和PyTorch代码的修改。
169 1
深度学习环境搭建笔记(一):detectron2安装过程
|
2月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
198 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
26天前
|
机器学习/深度学习 人工智能 算法
AI在医疗:深度学习在医学影像诊断中的最新进展
【10月更文挑战第27天】本文探讨了深度学习技术在医学影像诊断中的最新进展,特别是在卷积神经网络(CNN)的应用。文章介绍了深度学习在识别肿瘤、病变等方面的优势,并提供了一个简单的Python代码示例,展示如何准备医学影像数据集。同时强调了数据隐私和伦理的重要性,展望了AI在医疗领域的未来前景。
57 2
|
2月前
|
机器学习/深度学习 自然语言处理 并行计算
深度学习笔记(十四):Transormer知识总结
关于深度学习中Transformer模型的知识总结,涵盖了Self-attention机制、QKV、Multi-head attention、位置编码和并行运算等关键概念,以及如何在PyTorch中实现Self-attention。
62 1
|
2月前
|
机器学习/深度学习 vr&ar
深度学习笔记(十):深度学习评估指标
关于深度学习评估指标的全面介绍,涵盖了专业术语解释、一级和二级指标,以及各种深度学习模型的性能评估方法。
41 0
深度学习笔记(十):深度学习评估指标