文章目录
恭喜!你成功了!如果您已经完成了所有的笔记本,那么您就加入了这个规模虽小但不断壮大的团队,他们能够利用深度学习的力量来解决实际问题。你可能没有那种感觉——事实上,你可能没有。我们一次又一次地看到,完成 fast.ai 课程的学生大大低估了他们作为深度学习从业者的效率。我们还看到,这些人往往被其他具有经典学术背景的人低估。因此,如果你想超越自己和他人的期望,那么在关闭本书之后你接下来要做的事情甚至比你为达到这一点所做的事情更重要。
最重要的是保持势头。事实上,正如您从对优化器的研究中了解到的那样,动量是可以建立在自身之上的东西!所以想一想你现在可以做些什么来维持和加速你的深度学习之旅。图 20-1可以给你一些想法。
图 20-1。接下来做什么
我们在本文中多次讨论了写作的价值,无论是代码还是散文。但也许到目前为止你还没有像你希望的那样写那么多。没关系!现在是扭转局面的好机会。在这一点上你有很多话要说。也许您已经在一个数据集上尝试了一些实验,而其他人似乎并没有以完全相同的方式看待这些数据集。告诉全世界吧!或者您可能正在考虑尝试在阅读时想到的一些想法——现在正是将这些想法转化为代码的好时机。
如果您想分享您的想法,一个相当低调的地方就是fast.ai 论坛。你会发现那里的社区非常 支持和帮助,所以请务必过来告诉我们您的最新动态。或者看看您是否可以为那些比您更早开始旅程的人回答几个问题。
如果您在深度学习之旅中取得了一些或大或小的成功,请务必告诉我们!在论坛上发布关于他们的信息特别有用,因为了解其他学生的成功可以极大地激励他们。
对于许多人来说,与他们的学习之旅保持联系的最重要方法可能是围绕它建立一个社区。例如,您可以尝试在您当地的社区或学习小组中组织一个小型的深度学习聚会,甚至提议在当地的聚会上就您到目前为止学到的知识或您感兴趣的某些特定方面进行演讲. 你还不是世界领先的专家也没关系——重要的是要记住,你现在知道很多其他人不知道的东西,所以他们很可能会欣赏你的观点。
许多人认为有用的另一个社区活动是定期的读书俱乐部或论文阅读俱乐部。您可能已经在附近找到了一些,如果没有,您可以尝试开始使用。即使只有一个人和你一起做,它也会给你支持和鼓励,让你继续前进。
如果您所在的位置不方便与志同道合的人亲自见面,请访问论坛,因为人们总是在启动虚拟学习小组。这些通常涉及一群人每周一次通过视频聊天聚在一起讨论深度学习主题。
希望到此为止,您已将一些小项目放在一起并进行了实验。我们对您下一步的建议是选择其中一个,并尽可能地把它做得好。真正把它打磨成你能做到的最好的作品——一件你真正引以为豪的作品。这将迫使你更深入地研究一个主题,这将测试你的理解力,并让你有机会看到当你下定决心去做时你能做些什么。
此外,您可能还想看一下 涵盖与本书相同材料的fast.ai 免费在线课程。有时候看到一样 两种方式的材料确实可以帮助使想法具体化。事实上,人类学习研究人员发现,学习材料的最佳方式之一就是从不同的角度、以不同的方式描述同一事物。
各章问题
第1章:深度学习之旅
-
深度学习需要这些吗?
-
很多数学 T/F
-
大量数据 T/F
-
很多昂贵的电脑 T/F
-
A PhD T/F
-
-
说出深度学习现在是世界上最好的工具的五个领域。
-
第一个基于人工神经元原理的装置叫什么名字?
-
基于同名书籍,并行分布式处理 (PDP) 的要求是什么?
-
阻碍神经网络领域发展的两个理论误解是什么?
-
什么是 GPU?
-
打开笔记本并执行包含以下内容的单元格:
1+1
。怎么了? -
仔细阅读本章精简版笔记本的每个单元格。在执行每个单元之前,猜测会发生什么。
-
为什么很难使用传统的计算机程序来识别照片中的图像?
-
塞缪尔所说的“权重分配”是什么意思?
-
我们通常在深度学习中使用什么术语来表示 Samuel 所说的“权重”?
-
画一张图来概括 Samuel 对机器学习模型的看法。
-
为什么很难理解为什么深度学习模型会做出特定的 预测?
-
表明神经网络可以以任意精度解决任意数学问题的定理名称是什么?
-
训练模型需要什么?
-
反馈回路如何影响预测性警务模型的推出?
-
我们是否总是必须将 224×224 像素的图像与猫识别模型一起使用?
-
分类和回归有什么区别?
-
什么是验证集?什么是测试集?为什么我们需要它们?
-
如果你不提供验证集,fastai 会做什么?
-
我们可以始终使用随机样本作为验证集吗?为什么或者为什么不?
-
什么是过拟合?举个例子。
-
什么是指标?它与损失有何不同?
-
预训练模型如何提供帮助?
-
模型的“头”是什么?
-
CNN 的早期层发现了哪些特征?后面几层呢?
-
图像模型只对照片有用吗?
-
什么是架构?
-
什么是分割?
-
有什么
y_range
用?我们什么时候需要它? -
什么是超参数?
-
在组织中使用 AI 时避免失败的最佳方法是什么?
第2章:从模型到生产
-
文本模型目前主要存在哪些不足?
-
文本生成模型可能带来哪些负面社会影响?
-
在模型可能出错的情况下,而这些错误可能是有害的,什么是自动化流程的良好替代方案?
-
深度学习特别擅长什么样的表格数据?
-
直接将深度学习模型用于推荐系统的主要缺点是什么?
-
传动系统方法的步骤是什么?
-
Drivetrain Approach 的步骤如何映射到推荐系统?
-
使用您整理的数据创建图像识别模型,并将其部署在 Web 上。
-
是什么
DataLoaders
? -
我们需要告诉 fastai 创建哪四件事
DataLoaders
? -
splitter
参数是做什么的DataBlock
? -
我们如何确保随机拆分总是给出相同的验证集?
-
通常使用哪些字母来表示自变量和因变量?
-
crop、pad 和 squish 调整大小方法之间有什么区别?你什么时候可以选择一个而不是其他的?
-
什么是数据增强?为什么需要它?
-
提供一个示例,说明由于训练数据的结构或风格差异,熊分类模型在生产中可能效果不佳。
-
item_tfms
和 和有什么不一样batch_tfms
? -
什么是混淆矩阵?
-
保存什么
export
? -
当我们使用模型进行预测而不是 训练时,这叫做什么?
-
什么是 IPython 小部件?
-
什么时候使用 CPU 进行部署?什么时候 GPU 会更好?
-
将您的应用程序部署到服务器而不是客户端(或边缘)设备(例如手机或 PC)有什么缺点?
-
在实践中推出熊警告系统时可能出现的三个问题示例是什么?
-
什么是域外数据?
-
什么是域转移?
-
部署过程中的三个步骤是什么?
第3章:数据伦理
-
伦理学是否提供了一份“正确答案”的清单?
-
在考虑道德问题时,与不同背景的人合作有何帮助?
-
IBM 在纳粹德国扮演什么角色?公司为什么要参加呢?工人为什么参加?
-
大众柴油车丑闻中入狱的第一人起什么作用?
-
加州执法官员维护的可疑帮派成员数据库存在什么问题?
-
为什么 YouTube 的推荐算法会向恋童癖者推荐部分穿着衣服的儿童视频,即使谷歌没有员工编写此功能?
-
指标的中心性存在哪些问题?
-
为什么 Meetup.com 在其技术聚会推荐系统中不包括性别?
-
根据 Suresh 和Guttag的说法,机器学习中的六种偏见是 什么?
-
举两个美国历史种族偏见的例子。
-
ImageNet 中的大多数图像来自哪里?
-
在论文“Does Machine Learning Automate Moral Hazard and Error?”中 为什么发现鼻窦炎预示着中风?
-
什么是表征偏差?
-
就决策用途而言,机器和人有何不同 ?
-
虚假信息等同于“假新闻”吗?
-
为什么通过自动生成的文本传播虚假信息是一个特别重要的问题?
-
Markkula 中心描述的五个道德镜头是什么?
-
政策在哪些方面是解决数据伦理问题的适当工具?
第4章:底层:训练数字分类器
-
灰度图像在计算机上是如何表示的?彩色图像怎么样?
-
数据集中的文件和文件夹是如何
MNIST_SAMPLE
构建的?为什么? -
解释“像素相似性”方法如何对数字进行分类。
-
什么是列表理解?现在创建一个从列表中选择奇数并将它们加倍的方法。
-
什么是三阶张量?
-
张量秩和形状有什么区别?你如何从形状中获得等级?
-
什么是 RMSE 和 L1 范数?
-
您如何一次对数千个数字进行计算,比 Python 循环快数千倍?
-
创建一个包含从 1 到 9 的数字的 3×3 张量或数组。将其加倍。选择右下角的四个数字。
-
什么是广播?
-
指标一般是用训练集还是验证集计算出来的?为什么?
-
什么是新加坡元?
-
为什么 SGD 使用小批量?
-
SGD 中用于机器学习的七个步骤是什么?
-
我们如何初始化模型中的权重?
-
什么是损失?
-
为什么我们不能总是使用高学习率?
-
什么是渐变?
-
您需要知道如何自己计算梯度吗?
-
为什么我们不能将准确性用作损失函数?
-
绘制 sigmoid 函数。它的形状有什么特别之处?
-
损失函数和度量之间有什么区别?
-
使用学习率计算新权重的函数是什么?
-
DataLoader
班级做什么? -
编写伪代码,显示 SGD 每个时期所采取的基本步骤。
-
创建一个函数,如果传递两个参数
[1,2,3,4]
和'abcd'
,则返回[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
。该输出数据结构有何特殊之处? -
在 PyTorch 中做什么
view
? -
神经网络中的偏置参数是什么?为什么我们需要它们?
-
@
运算符在 Python 中做什么? -
该
backward
方法有什么作用? -
为什么我们必须将梯度归零?
-
我们必须传递什么信息
Learner
? -
显示训练循环的基本步骤的 Python 或伪代码。
-
什么是 ReLU?
-2
为从到的值绘制它的图+2
。 -
什么是激活函数?
-
F.relu
和 和有什么不一样nn.ReLU
? -
万能逼近定理表明,任何函数都可以仅使用一种非线性来尽可能接近地逼近。那么为什么我们通常使用更多呢?
第5章:图像分类
-
为什么我们先在 CPU 上调整到大尺寸,然后在 GPU 上调整到小尺寸?
-
如果你不熟悉正则表达式,找一个正则表达式教程和一些习题集,把它们补完。查看本书的网站以获取建议。
-
大多数深度学习数据集最常用的两种数据提供方式是什么?
-
查看文档
L
并尝试使用它添加的一些新方法。 -
查找 Python
pathlib
模块的文档并尝试使用Path
该类的一些方法。 -
举两个例子说明图像变换会降低数据质量。
-
fastai提供什么方法查看a中的数据
DataLoaders
? -
fastai 提供了哪些方法来帮助你调试一个
DataBlock
? -
在彻底清理数据之前,是否应该推迟训练模型?
-
PyTorch 中组合成交叉熵损失的两部分是什么?
-
softmax 确保激活的两个属性是什么?为什么这很重要?
-
您什么时候希望您的激活不具有这两个属性?
-
自己计算图 5-3
exp
的列和softmax
列(即,在电子表格中,使用计算器,或在笔记本中)。 -
为什么我们不能
torch.where
为标签可以有两个以上类别的数据集创建损失函数? -
log(–2) 的值是多少?为什么?
-
从学习率查找器中选择学习率的两个好的经验法则是什么?
-
该方法执行哪两个步骤
fine_tune
? -
在 Jupyter Notebook 中,如何获取方法或函数的源代码?
-
什么是判别学习率?
-
slice
当作为学习率传递给 fastai时,如何解释 Python对象? -
为什么在使用 1cycle 训练时提前停止是一个糟糕的选择?
-
resnet50
和 和有什么不一样resnet101
? -
做什么
to_fp16
?
第6章:其他计算机视觉问题
-
多标签分类如何提高熊分类器的可用性?
-
我们如何对多标签分类 问题中的因变量进行编码?
-
如何像访问矩阵一样访问 DataFrame 的行和列?
-
如何从 DataFrame 中按名称获取列?
-
Dataset
和有什么区别DataLoader
? -
Datasets
对象通常包含什么? -
DataLoaders
对象通常包含什么? -
在 Python 中做什么
lambda
? -
使用数据块 API 自定义自变量和因变量的创建方式有哪些方法?
-
为什么在使用单热编码目标时 softmax 不是合适的输出激活函数?
-
为什么
nll_loss
在使用单热编码目标时没有合适的损失函数? -
nn.BCELoss
和 和有什么不一样nn.BCEWithLogitsLoss
? -
为什么我们不能在多标签问题中使用常规精度?
-
什么时候可以在验证集上调整超参数?
-
y_range
fastai是如何实现的?(看看能不能自己实现,不用偷看就测试一下!) -
什么是回归问题?对于这样的问题,你应该使用什么损失函数?
-
你需要做什么来确保 fastai 库对你的输入图像和目标点坐标应用相同的数据增强?
第7章:训练SOTA的模型
-
ImageNet 和 Imagenetette 有什么区别?什么时候用一个比另一个更好?
-
什么是标准化?
-
为什么我们在使用预训练模型时不必关心规范化?
-
什么是渐进式调整大小?
-
在您自己的项目中实施渐进式调整大小。有帮助吗?
-
什么是测试时间增加?你如何在 fastai 中使用它?
-
在推理中使用 TTA 比常规推理慢还是快?为什么?
-
什么是混合?你如何在 fastai 中使用它?
-
为什么 Mixup 可以防止模型过于自信?
-
为什么使用 Mixup 训练五个 epoch 的结果比没有使用 Mixup 的训练更差?
-
标签平滑背后的想法是什么?
-
标签平滑可以帮助解决数据中的哪些问题?
-
当对五个类别使用标签平滑时,与索引 1 关联的目标是什么?
-
当您想在新数据集上进行快速实验原型时,第一步要采取什么?
第8章:协同过滤深入探讨
-
协同过滤解决什么问题?
-
它是如何解决的?
-
为什么协同过滤预测模型可能无法成为非常有用的推荐系统?
-
协同过滤数据的交叉表表示是什么样的?
-
编写代码以创建 MovieLens 数据的交叉表表示(您可能需要进行一些网络搜索!)。
-
什么是潜在因素?为什么会“潜伏”?
-
什么是点积?使用带有列表的纯 Python 手动计算点积。
-
做什么
pandas.DataFrame.merge
? -
什么是嵌入矩阵?
-
嵌入和单热编码向量矩阵之间的关系是什么?
-
Embedding
如果我们可以对同一件事使用单热编码向量,为什么我们需要? -
在我们开始训练之前嵌入包含什么(假设我们没有使用预训练模型)?
-
创建一个类(如果可能,不要偷看!)并使用它。
-
返回什么
x[:,0]
? -
重写
DotProduct
类(如果可能,不要偷看!)并用它训练模型。 -
用于 MovieLens 的良好损失函数是什么?为什么?
-
如果我们对 MovieLens 使用交叉熵损失会发生什么?我们需要如何更改模型?
-
点积模型中的偏差有什么用?
-
重量衰减的另一个名称是什么?
-
写出重量衰减的方程式(不要偷看!)。
-
写出权重衰减梯度的方程。为什么它有助于减轻体重?
-
为什么减少权重会导致更好的泛化?
-
在 PyTorch 中做什么
argsort
? -
对电影偏见进行排序是否会产生与按电影平均电影总体评分相同的结果?为什么/为什么不?
-
如何打印模型中层的名称和细节?
-
协同过滤中的“自举问题”是什么?
-
您如何处理新用户的引导问题?为了新电影?
-
反馈循环如何影响协同过滤系统?
-
在协同过滤中使用神经网络时,为什么电影和用户可以有不同数量的因素?
-
为什么模型中有
nn.Sequential
一个CollabNN
? -
如果我们想将有关用户和项目的元数据或日期和时间等信息添加到协同过滤模型中,我们应该使用什么样的模型?
第9章:表格建模深入探讨
-
什么是连续变量?
-
什么是分类变量?
-
提供两个用于分类变量可能值的词。
-
什么是致密层?
-
实体嵌入如何减少内存使用并加速神经网络?
-
实体嵌入对哪些类型的数据集特别有用?
-
机器学习算法的两大类是什么?
-
为什么某些分类列需要在其类别中进行特殊排序?你如何在熊猫中做到这一点?
-
总结决策树算法的作用。
-
为什么日期不同于常规的分类变量或连续变量,您如何对其进行预处理以允许在模型中使用它?
-
你应该在推土机比赛中选择一个随机验证集吗?如果不是,你应该选择什么样的验证集?
-
什么是泡菜,它有什么用?
-
本章绘制的决策树中
mse
、samples
、 和是如何计算的?values
-
在构建决策树之前我们如何处理异常值?
-
我们如何处理决策树中的分类变量?
-
什么是装袋?
-
max_samples
创建随机森林之间和max_features
创建随机森林时有什么区别? -
如果你增加到
n_estimators
一个非常高的值,那会导致过度拟合吗?为什么或者为什么不? -
在“创建随机森林”部分中,在图 9-7之后,为什么
preds.mean(0)
给出了与我们的随机森林相同的结果? -
什么是包外错误?
-
列出模型的验证集错误可能比 OOB 错误更严重的原因。你如何检验你的假设?
-
解释为什么随机森林非常适合回答以下每个问题:
-
我们对使用特定数据行的预测有多大信心?
-
对于特定行数据的预测,最重要的因素是什么,它们如何影响该预测?
-
哪些列是最强的预测因子?
-
当我们改变这些列时,预测如何变化?
-
-
删除不重要的变量的目的是什么?
-
显示树解释器结果的好类型是什么?
-
什么是外推问题?
-
如何判断测试集或验证集的分布方式是否与训练集不同?
-
为什么我们要确保它
saleElapsed
是一个连续变量,即使它的不同值少于 9,000 个? -
什么是助推?
-
我们如何在随机森林中使用嵌入?我们希望这会有所帮助吗?
-
为什么我们不总是使用神经网络进行表格建模?
第10章:NLP 深入探讨:RNN
-
什么是自监督学习?
-
什么是语言模型?
-
为什么语言模型被认为是自我监督的?
-
自监督模型通常用于什么?
-
为什么我们要微调语言模型?
-
创建最先进的文本分类器的三个步骤是什么?
-
50,000 条未标记的电影评论如何帮助为 IMDb 数据集创建更好的文本分类器?
-
为语言模型准备数据的三个步骤是什么?
-
什么是代币化?我们为什么需要它?
-
说出三种标记化方法。
-
是什么
xxbos
? -
列出 fastai 在标记化过程中应用于文本的四个规则。
-
为什么将重复字符替换为显示重复次数和重复字符的标记?
-
什么是数值化?
-
为什么有些词会被替换为“未知词”标记?
-
批量大小为 64 时,表示第一批的张量的第一行包含数据集的前 64 个标记。该张量的第二行包含什么?第二批的第一行包含什么?(小心——学生经常弄错这个!一定要在本书的网站上检查你的答案。)
-
为什么我们需要填充来进行文本分类?为什么我们不需要它来进行语言建模?
-
NLP 的嵌入矩阵包含什么?它的形状是什么?
-
什么是困惑?
-
为什么我们必须将语言模型的词汇传递给分类器数据块?
-
什么是逐步解冻?
-
为什么文本生成总是可能领先于机器生成文本的自动识别?
第11章:使用 fastai 的中级 API 进行数据处理
-
为什么我们说 fastai 有一个“分层”的 API?这是什么意思?
-
为什么a
Transform
有decode
方法?它有什么作用? -
为什么a
Transform
有setup
方法?它有什么作用? -
Transform
在元组上调用时如何工作? -
编写自己的时需要实现哪些方法
Transform
? -
编写一个
Normalize
完全规范化项目的转换(减去平均值并除以数据集的标准差),并且可以解码该行为。尽量不要偷看! -
编写一个
Transform
对标记化文本进行数字化的程序(它应该根据看到的数据集自动设置其词汇并有一个decode
方法)。如果需要帮助,请查看 fastai 的源代码。 -
什么是
Pipeline
? -
什么是
TfmdLists
? -
什么是
Datasets
?它与 a 有何不同TfmdLists
? -
为什么
TfmdLists
用Datasets
“s”命名? -
您如何
DataLoaders
从 aTfmdLists
或 a 构建 aDatasets
? -
您如何通过
item_tfms
以及batch_tfms
何时DataLoaders
从 aTfmdLists
或 a 构建 aDatasets
? -
当您想让自定义项目使用
show_batch
或之类的方法时,您需要做什么show_results
? -
为什么我们可以轻松地将 fastai 数据增强转换应用于
SiamesePair
我们构建的模型?
第12章:从零开始的语言模型
-
如果您的项目的数据集如此庞大和复杂,以至于处理它需要花费大量时间,您应该怎么办?
-
为什么我们在创建语言模型之前连接数据集中的文档?
-
要使用标准的全连接网络在给定前三个词的情况下预测第四个词,我们需要对模型进行哪两项调整?
-
我们如何在 PyTorch 中跨多个层共享权重矩阵?
-
编写一个模块,根据句子的前两个词预测第三个词,而不用偷看。
-
什么是递归神经网络?
-
什么是隐藏状态?
-
中隐藏状态的等价物是什么
LMModel1
? -
为了维护 RNN 中的状态,为什么按顺序将文本传递给模型很重要?
-
什么是 RNN 的“展开”表示?
-
为什么在 RNN 中保持隐藏状态会导致内存和性能问题?我们如何解决这个问题?
-
什么是BPTT?
-
编写代码打印出前几批验证集,包括将令牌 ID 转换回英文字符串,如我们在第 10 章中展示的 IMDb 数据批次。
-
回调有什么作用
ModelResetter
?我们为什么需要它? -
为每三个输入词预测一个输出词有什么缺点?
-
为什么我们需要自定义损失函数
LMModel4
? -
为什么训练
LMModel4
不稳定? -
在展开的表示中,我们可以看到循环神经网络有很多层。那么为什么我们需要堆叠 RNN 以获得更好的结果呢?
-
绘制堆叠(多层)RNN 的表示。
-
如果调用
detach
次数较少,为什么我们应该在 RNN 中获得更好的结果?为什么在实践中使用简单的 RNN 不会发生这种情况? -
为什么深度网络会导致非常大或非常小的激活?为什么这很重要?
-
在计算机的数字浮点表示中,哪些数字最精确?
-
为什么梯度消失会阻碍训练?
-
为什么在 LSTM 架构中有两个隐藏状态有帮助?每一个的目的是什么?
-
这两种状态在 LSTM 中叫什么?
-
什么是 tanh,它与 sigmoid 有什么关系?
-
这段代码的目的是什么
LSTMCell
:h = torch.cat([h, input], dim=1)
-
在 PyTorch 中做什么
chunk
? -
仔细研究重构版本,
LSTMCell
以确保您了解它如何以及为何与非重构版本做同样的事情。 -
为什么我们可以使用更高的学习率
LMModel6
? -
AWD-LSTM 模型中使用的三种正则化技术是什么?
-
什么是辍学?
-
为什么我们用 dropout 来缩放激活?这是否应用于训练、推理或两者?
-
此行的目的是什么
Dropout
:if not self.training: return x
-
尝试
bernoulli_
了解它是如何工作的。 -
如何在 PyTorch 中将模型设置为训练模式?在评估模式?
-
写出激活正则化的方程式(根据您的喜好,用数学或代码)。它与体重衰减有何不同?
-
写出时间激活正则化的方程式(根据您的喜好,用数学或代码)。为什么我们不将其用于计算机视觉问题?
-
什么是语言模型中的权重绑定?
第13章:卷积神经网络
-
什么是特征?
-
写出顶部边缘检测器的卷积核矩阵。
-
写出 3×3 内核应用于图像中单个像素的数学运算。
-
应用于 3×3 零矩阵的卷积核的值是多少?
-
什么是填充?
-
什么是步幅?
-
创建嵌套列表理解来完成您选择的任何任务。
-
PyTorch 的二维卷积的
input
和参数的形状是什么?weight
-
什么是频道?
-
卷积和矩阵乘法之间有什么关系?
-
什么是卷积神经网络?
-
重构部分神经网络定义有什么好处?
-
是什么
Flatten
?MNIST CNN 哪里需要包含?为什么? -
NCHW 是什么意思?
-
为什么 MNIST CNN 的第三层有
7*7*(1168-16)
乘法? -
什么是感受野?
-
两次 stride-2 卷积后激活的感受野大小是多少?为什么?
-
自己运行conv-example.xlsx并试验跟踪先例。
-
查看 Jeremy 或 Sylvain 最近的 Twitter“点赞”列表,看看您是否能从中找到任何有趣的资源或想法。
-
彩色图像如何表示为张量?
-
卷积如何处理颜色输入?
-
我们可以使用什么方法查看其中的数据
DataLoaders
? -
为什么我们在每个 stride-2 conv 之后将过滤器的数量加倍?
-
为什么我们在 MNIST 的第一个 conv 中使用更大的内核(with
simple_cnn
)? -
ActivationStats
每层保存什么信息? -
我们如何在训练后访问学习者的回调?
-
绘制的三个统计数据是
plot_layer_stats
什么?x轴代表什么? -
为什么激活接近于零有问题?
-
大批量训练的优缺点是什么?
-
为什么我们应该避免在训练开始时使用高学习率?
-
什么是1cycle训练?
-
高学习率训练有什么好处?
-
为什么我们要在训练结束时使用低学习率?
-
什么是周期动量?
-
什么回调在训练期间跟踪超参数值(以及其他信息)?
-
图中的一列像素
color_dim
代表什么? -
“糟糕的训练”是什么样子的
color_dim
?为什么? -
批量归一化层包含哪些可训练参数?
-
在训练过程中使用哪些统计数据来规范化批量规范化?验证期间如何?
-
为什么具有批量归一化层的模型泛化效果更好?
第14章:ResNet
-
在前面的章节中,我们如何获得用于 MNIST 的 CNN 中的单个激活向量?为什么它不适合 Imagenette?
-
我们为 Imagenette 做什么呢?
-
什么是自适应池化?
-
什么是平均池化?
-
为什么我们需要
Flatten
自适应平均池化层? -
什么是跳过连接?
-
为什么跳过连接允许我们训练更深层次的模型?
-
图 14-1显示了什么?那是如何导致跳过连接的想法的呢?
-
什么是身份映射?
-
ResNet 块的基本方程是什么(忽略 batchnorm 和 ReLU 层)?
-
ResNets 与残差有什么关系?
-
当有stride-2卷积时,我们如何处理skip connection?当过滤器的数量发生变化时怎么样?
-
我们如何用向量点积表示 1×1 卷积?
-
F.conv2d
使用或创建 1×1 卷积nn.Conv2d
并将其应用于图像。图像的形状发生了什么变化? -
noop
函数返回什么? -
解释图 14-3中显示的内容。
-
什么时候 top-5 准确率比 top-1 准确率更好?
-
CNN 的“主干”是什么?
-
为什么我们在 CNN 主干中使用普通卷积而不是 ResNet 块?
-
瓶颈块与普通 ResNet 块有何不同?
-
为什么瓶颈块更快?
-
全卷积网络(以及一般具有自适应池的网络)如何允许渐进调整大小?
第15章:深入探讨应用程序架构
-
什么是神经网络的头部?
-
神经网络的主体是什么?
-
什么是“切割”神经网络?为什么我们需要为迁移学习这样做?
-
是什么
model_meta
?尝试打印它看看里面有什么。 -
阅读源代码
create_head
并确保您了解每一行的作用。 -
查看的输出
create_head
并确保您了解每一层的原因,以及create_head
来源如何创建它。 -
弄清楚如何更改 dropout、层大小和创建的层数
cnn_learner
,看看您是否可以从宠物识别器中找到更准确的值。 -
做什么
AdaptiveConcatPool2d
? -
什么是最近邻插值?它如何用于上采样卷积激活?
-
什么是转置卷积?它的另一个名字是什么?
-
创建一个转换层
transpose=True
并将其应用于图像。检查输出形状。 -
绘制 U-Net 架构。
-
什么是用于文本分类的 BPTT (BPT3C)?
-
我们如何处理 BPT3C 中不同长度的序列?
-
尝试
TabularModel.forward
在笔记本中分别运行每一行,每个单元格一行,并查看每一步的输入和输出形状。 -
如何
self.layers
定义TabularModel
? -
防止过拟合的五个步骤是什么?
-
为什么我们不在尝试其他方法来防止过度拟合之前降低架构的复杂性?
第16章:训练过程
-
在数学或代码(如您所愿)中,SGD 步长的方程式是什么?
-
我们传递什么
cnn_learner
来使用非默认优化器? -
什么是优化器回调?
-
在优化器中做什么
zero_grad
? -
在优化器中做什么
step
?它是如何在通用 优化器中实现的? -
重写
sgd_cb
以使用+=
运算符,而不是add_
. -
什么是势头?写出方程式。
-
什么是动量的物理类比?它如何应用于我们的模型训练设置?
-
更大的动量值对梯度有什么影响?
-
1cycle 训练的默认动量值是多少?
-
什么是 RMSProp?写出方程式。
-
梯度的平方值表示什么?
-
Adam 与动量和 RMSProp 有何不同?
-
写出亚当的等式。
-
计算几批虚拟值的
unbias_avg
和的值。w.avg
-
eps
对亚当有很高的影响是什么? -
通读 fastai 仓库中的优化器笔记本并执行它。
-
在什么情况下像 Adam 这样的动态学习率方法会改变权重衰减的行为?
-
训练循环的四个步骤是什么?
-
为什么使用回调比为每个要添加的调整编写新的训练循环更好?
-
fastai 的回调系统设计的哪些方面使其像复制和粘贴代码一样灵活?
-
编写回调时如何获得可用的事件列表?
-
编写
ModelResetter
回调(不偷看)。 -
如何在回调中访问训练循环的必要属性?您什么时候可以使用或不使用它们附带的快捷方式?
-
回调如何影响训练循环的控制流?
-
编写
TerminateOnNaN
回调(如果可能,不要偷看)。 -
您如何确保您的回调在另一个回调之后或之前运行?
第17章:基础神经网络
-
编写 Python 代码来实现单个神经元。
-
编写 Python 代码来实现 ReLU。
-
根据矩阵乘法为密集层编写 Python 代码。
-
在纯 Python 中为密集层编写 Python 代码(即,使用 Python 内置的列表理解和功能)。
-
层的“隐藏大小”是多少?
-
该
t
方法在 PyTorch 中的作用是什么? -
为什么用普通 Python 编写的矩阵乘法非常慢?
-
在
matmul
,为什么是ac==br
? -
在 Jupyter Notebook 中,您如何测量单个单元格 执行所花费的时间?
-
什么是逐元素算术?
-
编写 PyTorch 代码来测试 的每个元素是否都
a
大于 的对应元素b
。 -
什么是 0 阶张量?如何将其转换为普通的 Python 数据类型?
-
这会返回什么,为什么?
tensor([1,2]) + tensor([1])
-
这会返回什么,为什么?
tensor([1,2]) + tensor([1,2,3])
-
elementwise 算术如何帮助我们加快速度
matmul
? -
广播规则是什么?
-
是什么
expand_as
?展示如何使用它来匹配广播结果的示例。 -
如何
unsqueeze
帮助我们解决某些广播问题? -
我们如何使用索引来执行与 相同的操作
unsqueeze
? -
我们如何显示用于张量的内存的实际内容?
-
将大小为 3 的向量添加到大小为 3×3 的矩阵时,向量的元素是添加到矩阵的每一行还是每一列?(一定要在笔记本上运行这段代码来检查你的答案。)
-
广播并
expand_as
导致内存使用增加吗?为什么或者为什么不? -
matmul
使用爱因斯坦求和实现。 -
左侧重复的索引字母代表
einsum
什么? -
爱因斯坦求和符号的三个规则是什么?为什么?
-
什么是神经网络的正向传播和反向传播?
-
为什么我们需要在前向传递中存储一些为中间层计算的激活值?
-
激活标准差离 1 太远有什么坏处?
-
权重初始化如何帮助避免这个问题?
-
初始化权重的公式是什么,这样我们就可以得到标准偏差为 1 的普通线性层,以及后跟 ReLU 的线性层?
-
为什么我们有时必须使用
squeeze
损失函数中的方法? -
该方法的参数有什么作用
squeeze
?为什么包含这个参数很重要,即使 PyTorch 不需要它? -
什么是链式法则?以本章介绍的两种形式之一显示方程。
-
展示如何
mse(lin(l2, w2, b2), y)
使用链式法则计算 的梯度。 -
ReLU的梯度是多少?用数学或代码显示它。(你不应该需要记住这个 - 尝试使用你对函数形状的了解来计算它。)
-
我们需要以什么顺序调用
*_grad
反向传递中的函数?为什么? -
是什么
__call__
? -
我们在编写一个时必须实现哪些方法
torch.autograd.Function
? -
nn.Linear
从头开始编写并测试它是否有效。 -
nn.Module
和 fastai's有什么区别Module
?
第18章:使用 CAM 进行 CNN 解释
-
PyTorch 中的钩子是什么?
-
CAM 使用哪一层的输出?
-
为什么 CAM 需要挂钩?
-
查看
ActivationStats
类的源代码,看看它是如何使用钩子的。 -
编写一个钩子来存储模型中给定层的激活(如果可能,不要偷看)。
-
为什么我们
eval
在获得激活之前打电话?我们为什么使用no_grad
? -
用于
torch.einsum
计算模型主体最后一次激活中每个位置的“狗”或“猫”分数。 -
你如何检查类别的顺序(即索引→类别的对应关系)?
-
为什么我们
decode
在显示输入图像时使用? -
什么是上下文管理器?需要定义什么特殊方法来创建一个?
-
为什么我们不能在网络的内层使用普通 CAM?
-
为什么我们需要在向后传递上注册一个钩子才能进行 Grad-CAM?
-
为什么我们不能调用
output.backward
whenoutput
是每个类别每个图像的输出激活的 rank-2 张量?
第19章:从零开始的 fastai 学习者
-
是什么
glob
? -
如何使用 Python 图像库打开图像?
-
做什么
L.map
? -
做什么
Self
? -
是什么
L.val2idx
? -
您需要实施哪些方法来创建自己的
Dataset
? -
为什么我们
convert
在打开来自 Imagenette 的图像时调用? -
做什么
~
?它对拆分训练集和验证集有何用处? -
~
与班级一起工作吗L
?Tensor
NumPy 数组、Python 列表或 Pandas DataFrames 怎么样? -
是什么
ProcessPoolExecutor
? -
如何
L.range(self.ds)
工作? -
是什么
__iter__
? -
是什么
first
? -
是什么
permute
?为什么需要它? -
什么是递归函数?它如何帮助我们定义
parameters
方法? -
编写一个递归函数,返回斐波那契数列的前 20 项。
-
是什么
super
? -
为什么子类
Module
需要覆盖forward
而不是定义__call__
? -
在
ConvLayer
,为什么init
依赖act
? -
为什么
Sequential
需要调用register_modules
? -
编写一个钩子来打印每一层激活的形状。
-
什么是 LogSumExp?
-
为什么
log_softmax
有用? -
是什么
GetAttr
?它对回调有何帮助? -
Callback
在不继承or的情况下重新实现本章中的回调之一GetAttr
。 -
做什么
Learner.__call__
? -
是什么
getattr
?(注意大小写的区别GetAttr
!) -
为什么里面有
try
块fit
? -
我们为什么要
model.training
入住one_batch
? -
是什么
store_attr
? -
的目的是
TrackResults.before_epoch
什么? -
做什么
model.cuda
?它是如何工作的? -
为什么我们需要登记
model.training
入住LRFinder
?OneCycle
-
在 中使用余弦退火
OneCycle
。