2k 2 分钟

# 读写文件 到目前为止,我们讨论了如何处理数据, 以及如何构建、训练和测试深度学习模型。 然而,有时我们希望保存训练的模型, 以备将来在各种环境中使用(比如在部署中进行预测)。 此外,当运行一个耗时较长的训练过程时, 最佳的做法是定期保存中间结果, 以确保在服务器电源被不小心断掉时,我们不会损失几天的计算结果。 因此,现在是时候学习如何加载和存储权重向量和整个模型了。 # (加载和保存张量) 对于单个张量,我们可以直接调用 load 和 save 函数分别读写它们。 这两个函数都要求我们提供一个名称, save 要求将要保存的变量作为输入。 import torchfrom torch...
5k 5 分钟

# 图像分类数据集 🏷 sec_fashion_mnist (MNIST 数据集) :cite: LeCun.Bottou.Bengio.ea.1998 (是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的 Fashion-MNIST 数据集) :cite: Xiao.Rasul.Vollgraf.2017 。 %matplotlib inlineimport torchimport torchvisionfrom torch.utils import datafrom torchvision import transformsfrom d2l...
1.4k 1 分钟

# 安装 🏷 chap_installation 我们需要配置一个环境来运行 Python、Jupyter Notebook、相关库以及运行本书所需的代码,以快速入门并获得动手学习经验。 # 安装 Miniconda 最简单的方法就是安装依赖 Python 3.x 的 Miniconda。 如果已安装 conda,则可以跳过以下步骤。访问 Miniconda 网站,根据 Python3.x 版本确定适合的版本。 如果我们使用 macOS,假设 Python 版本是 3.9(我们的测试版本),将下载名称包含字符串 “MacOSX” 的 bash 脚本,并执行以下操作: # 以 Intel...
391 1 分钟

# 线性神经网络 🏷 chap_linear 在介绍深度神经网络之前,我们需要了解神经网络训练的基础知识。 本章我们将介绍神经网络的整个训练过程, 包括:定义简单的神经网络架构、数据处理、指定损失函数和如何训练模型。 为了更容易学习,我们将从经典算法 ———— 线性神经网络开始,介绍神经网络的基础知识。 经典统计学习技术中的线性回归和 softmax...
4k 4 分钟

# 线性回归的简洁实现 🏷 sec_linear_concise 在过去的几年里,出于对深度学习强烈的兴趣, 许多公司、学者和业余爱好者开发了各种成熟的开源框架。 这些框架可以自动化基于梯度的学习算法中重复性的工作。 在 :numref: sec_linear_scratch 中,我们只运用了: (1)通过张量来进行数据存储和线性代数; (2)通过自动微分来计算梯度。 实际上,由于数据迭代器、损失函数、优化器和神经网络层很常用, 现代深度学习库也为我们实现了这些组件。 本节将介绍如何 (通过使用深度学习框架来简洁地实现) :numref: sec_linear_scratch 中的...
7.6k 7 分钟

# softmax 回归的从零开始实现 🏷 sec_softmax_scratch (就像我们从零开始实现线性回归一样,) 我们认为 softmax 回归也是重要的基础,因此 (应该知道实现 softmax 回归的细节)。 本节我们将使用刚刚在 :numref: sec_fashion_mnist 中引入的 Fashion-MNIST 数据集, 并设置数据迭代器的批量大小为 256。 import torchfrom IPython import displayfrom d2l import torch as d2lbatch_size = 256train_iter, test_iter...
3.4k 3 分钟

# softmax 回归的简洁实现 🏷 sec_softmax_concise 在 :numref: sec_linear_concise 中, 我们发现 (通过深度学习框架的高级 API 能够使实现) (softmax) 线性 (回归变得更加容易)。 同样,通过深度学习框架的高级 API 也能更方便地实现 softmax 回归模型。 本节如在 :numref: sec_softmax_scratch 中一样, 继续使用 Fashion-MNIST 数据集,并保持批量大小为 256。 import torchfrom torch import nnfrom d2l import torch...
12k 11 分钟

# 线性回归 🏷 sec_linear_regression 回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。 在机器学习领域中的大多数任务通常都与预测(prediction)有关。 当我们想预测一个数值时,就会涉及到回归问题。 常见的例子包括:预测价格(房屋、股票等)、预测住院时间(针对住院病人等)、 预测需求(零售销量等)。 但不是所有的预测都是回归问题。 在后面的章节中,我们将介绍分类问题。分类问题的目标是预测数据属于一组类别中的哪一个。 # 线性回归的基本元素 线性回归(linear...
5.9k 5 分钟

# 前向传播、反向传播和计算图 🏷 sec_backprop 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时,我们只考虑了通过前向传播(forward propagation)所涉及的计算。 在计算梯度时,我们只调用了深度学习框架提供的反向传播函数,而不知其所以然。 梯度的自动计算(自动微分)大大简化了深度学习算法的实现。 在自动微分之前,即使是对复杂模型的微小调整也需要手工重新计算复杂的导数, 学术论文也不得不分配大量页面来推导更新规则。 本节将通过一些基本的数学和计算图, 深入探讨反向传播的细节。 首先,我们将重点放在带权重衰减(L2L_2L2​...
5.7k 5 分钟

# 线性回归的从零开始实现 🏷 sec_linear_scratch 在了解线性回归的关键思想之后,我们可以开始通过代码来动手实现线性回归了。 在这一节中,(我们将从零开始实现整个方法, 包括数据流水线、模型、损失函数和小批量随机梯度下降优化器)。 虽然现代的深度学习框架几乎可以自动化地进行所有这些工作,但从零开始实现可以确保我们真正知道自己在做什么。 同时,了解更细致的工作原理将方便我们自定义模型、自定义层或自定义损失函数。 在这一节中,我们将只使用张量和自动求导。 在之后的章节中,我们会充分利用深度学习框架的优势,介绍更简洁的实现方式。 %matplotlib inlineimport...