<!-- DISABLE-FRONTMATTER-SECTIONS -->

# 章末小测验 [[章末小测验]]

让我们测试一下你在本章学到的东西!

### 1.应该按照什么顺序读取 Python 回溯？
<Question
	choices={[
		{
			text: "从上到下",
			explain: "再试一次——尽管大多数其他编程语言在顶部打印异常，但 Python 在这方面是特殊的。"
		},
		{
			text: "自下而上",
			explain: "正确！在底部显示异常的 Python 回溯的一个优点是，在终端中工作时更容易调试，这是你看到的最后一行。",
			correct: true
		}
	]}
/>

### 2.什么是最小可再生示例？
<Question
	choices={[
		{
			text: "来自一篇研究文章一个简单的 Transformer 体系结构的实现",
			explain: "虽然从头开始实现你自己的 Transformer 模型是非常有教育意义的，但这不是我们在这里讨论的内容。"
		},
		{
			text: "一种紧凑且自包含的代码块，可以在不依赖于私有文件或数据的情况下运行",
			explain: "正确！查看你的数据几乎总是你应该做的第一件事，以确保文本被适当地编码，具有预期的特性，等等。",
			correct: true
		},
		{
			text: "Python 回溯的屏幕截图",
			explain: "再试一次 -- 尽管在提交问题时, 很容易包含您所面临错误的屏幕截图, 但这使得其他人很难重现错误。"
		},
		{
			text: "一个记录整个分析的笔记本，包括与错误无关的部分",
			explain: "不完全 -- 尽管共享一个显示错误的GoogleColab笔记本会很有帮助, 但要确保它简短, 并且只包含相关代码。 "
		}
	]}
/>

### 3.假设你尝试运行以下代码，它抛出一个错误:
```py
from transformers import GPT3ForSequenceClassification

# ImportError: cannot import name 'GPT3ForSequenceClassification' from 'transformers' (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)
# ---------------------------------------------------------------------------
# ImportError                               Traceback (most recent call last)
# /var/folders/28/k4cy5q7s2hs92xq7_h89_vgm0000gn/T/ipykernel_30848/333858878.py in <module>
# ----> 1 from transformers import GPT3ForSequenceClassification

# ImportError: cannot import name 'GPT3ForSequenceClassification' from 'transformers' (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)
```

以下哪项可能是论坛主题标题寻求帮助的好选择?

<Question
	choices={[
		{
			text: "导入错误:无法从'transformers'导入名称'GPT3GPT3ForSequenceClassification'(/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/_ init _. py) ",
			explain: "包含回溯的最后一行可以是描述性的，但这最好保留给主题的主体部分。再试一次！"
		},
		{
			text: "从transformers导入 gpt3forsequeclassification 时出现问题",
			explain: "再试一次——尽管这提供了有用的信息，但最好还是保留在文本的主体部分。",
		},
		{
			text: "为什么我不能导入 < code > GPT3ForSequenceClassification </code > ?",
			explain: "不错的选择！这个标题是简洁的，并给读者一个线索，什么可能是错误的(即,gpt-3不支持在🤗 Transformers)。",
			correct: true
		},
		{
			text: "Gpt-3在🤗 Transformers中支持吗?",
			explain: "好主意! 用问题作为主题标题是向社区传达问题的好方法。",
			correct: true
		}
	]}
/>

### 4.假设您试图运行 'trainer.train ()'，但是遇到了一个神秘的错误，这个错误不能准确地告诉您错误来自哪里。下列哪一项是您应该首先在您的培训管道中寻找错误的地方？
<Question
	choices={[
		{
			text: "计算梯度并执行反向传播的优化步骤",
			explain: "尽管优化器中可能存在缺陷, 但这通常是训练管道中的几个步骤, 因此首先要检查其他事项。再试一次!"
		},
		{
			text: "计算度量的评估步骤",
			explain: "评估通常是在整个训练期结束后进行的, 因此你应该首先在训练管道的早期检查某个地方。",
		},
		{
			text: "数据集",
			explain: "正确的!查看数据几乎总是您应该做的第一件事, 以确保文本进行了适当的编码, 具有预期的特性, 等等。",
			correct: true
		},
		{
			text: "数据记录器",
			explain: "再试一次---- 这非常接近你应该检查的第一件事。你还记得我们交给数据收集者的是什么东西吗？"
		}
	]}
/>

### 5.调试 CUDA 错误的最好方法是什么？
<Question
	choices={[
		{
			text: "在论坛或 GitHub 上发布错误消息。",
			explain: "这不会帮助任何人, 因为 CUDA 的错误信息通常是非常没有信息。"
		},
		{
			text: "在 CPU 上执行相同的代码。",
			explain: "没错, 这应该会给你一个更好的错误消息!",
			correct: true
		},
		{
			text: "请阅读回溯以找出错误的原因。",
			explain: "对于任何其他错误, 你都会这样做, 但CUDA错误通常不会在发生的地方引发, 因为大多数CUDA操作都是异步的。"
		},
		{
			text: "减少批量。",
			explain: "减少批处理大小通常是处理CUDA内存不足错误的一个好策略, 但不是为这个特定的问题。再试一次！"
		},
		{
			text: "重新启动 Jupyter 内核。",
			explain: "再试一次——重新启动内核不会让错误神奇地消失！",
		}
	]}
/>

### 6.修复 GitHub 上的问题最好的方法是什么？
<Question
	choices={[
		{
			text: "发布这个 bug 的完整可重复的例子。",
			explain: "是的，这是帮助维护人员找到 bug 的最好方法。你还应该做什么？？",
			correct: true
		},
		{
			text: "每天要求更新。",
			explain: "这不太可能给你任何帮助；人们可能会更忽视你。",
		},
		{
			text: "检查错误周围的源代码，并试图找出错误发生的原因。在这期杂志上发布结果。",
			explain: "这肯定会对维护人员有帮助！如果您确实找到了 bug 的来源和修复程序, 甚至可以打开一个 pull 请求。你还应该做些什么？",
			correct: true
		}
	]}
/>

### 7.为什么对一个批处理进行过度调试通常是一种好的调试技术？
<Question
	choices={[
		{
			text: "不是这样的, 过分合身总是不好的, 应该避免。",
			explain: "当对整个数据集进行训练时, 过度拟合确实可能是一个信号, 表明你的模型不能很好地推广到新的示例。但是, 对于调试, 我们通常不会对整个数据集进行训练。再试一次！"
		},
		{
			text: "这使我们能够验证该模型能够将损耗降低到零。",
			explain: "正确! 只需要两个样本的小批量, 我们就可以快速验证模型是否具有学习能力。",
			correct: true
		},
		{
			text: "它允许我们验证我们输入和标签的张量形状是正确的。",
			explain: "再试一次 -- 如果你的张量形状不对齐, 那么你肯定不能训练, 即使是一批。",
		}
	]}
/>

### 8.为什么在 🤗 Transformers 存储库中创建新问题时，使用 transformers-cli env 包含有关计算环境的详细信息是个好主意？
<Question
	choices={[
		{
			text: "它允许维护人员理解你正在使用的库的哪个版本。",
			explain: "正确! 由于库的每个主要版本在API中都可能有更改, 因此了解您正在使用的特定版本有助于缩小问题范围。其他好处是什么?",
			correct: true
		},
		{
			text: "它让维护人员知道你是在 Windows、 macOS 还是 Linux 上运行代码。",
			explain: "正确！错误有时可能是由你正在使用的特定操作系统引起的, 了解这一点有助于维护人员在本地复制这些错误。但这并不是唯一的原因。",
			correct: true
		},
		{
			text: "它允许维护人员知道你是在 GPU 还是 CPU 上运行代码。",
			explain: "正确的！ 正如我们在本章中所见，在 GPU 或 CPU 上运行的代码可能会产生不同的结果或错误，了解您使用的是哪种硬件有助于吸引维护人员的注意力。 但这不是唯一的好处...",
			correct: true
		}
	]}
/>