系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
前言 第一章 深度学习简介
第二章 预备知识
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
二、预备知识
在动⼿学习之前,我们需要获取本书的代码,并安装运⾏本书的代码所需要的软件。作为动⼿学深度学习的基础,我们还需要了解如何对内存中的数据进⾏操作
,以及对函数求梯度的⽅法
。最后,我们应养成主动查阅⽂档来学习代码的良好习惯。
2.1 获取和运⾏本书的代码
2.1.1 获取代码并安装运⾏环境
本书的内容和代码均可在⽹上免费获取。我们推荐使⽤conda
来安装运⾏代码所依赖的软件。conda是⼀个流⾏的Python包管理软件
。Windows(如下)
和Linux/macOS⽤⼾(自己翻书吧)
可分别参照以下步骤。
Windows⽤⼾
第⼀次运⾏需要完整完成下⾯5个步骤。如果是再次运⾏,可以忽略前⾯3步的下载和安装,直接跳转到第四步和第五步。
第⼀步是根据操作系统下载并安装Miniconda
,在安装过程中需要勾选“Add Anaconda to the system PATH environment variable”选项(如当conda版本为4.6.14时)。
第⼆步是 下载包含本书全部代码的压缩包(my 夸克云收藏)
我们可以在浏览器的地址栏中输⼊ https://zh.d2l.ai/d2l-zh-1.0.zip
并按回⻋键进⾏下载。
下载完成后,创建⽂件夹“d2l-zh”并将以上压缩包解压到这个⽂件夹。在该⽬录⽂件资源管理器的地址栏输⼊cmd进⼊命令⾏模式。
第三步是使⽤conda创建虚拟(运⾏)环境
。conda和pip默认使⽤国外站点来下载软件,我们可以配置国内镜像来加速下载(国外⽤⼾⽆须此操作)。
# 配置清华PyPI镜像(如⽆法运⾏,将pip版本升级到>=10.0.0)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
接下来使⽤conda创建虚拟环境并安装本书需要的软件。这⾥environment.yml是放置在代码压缩包中的⽂件。使⽤⽂本编辑器打开该⽂件,即可查看运⾏压缩包中本书的代码所依赖的软件(如MXNet和d2lzh包)及版本号。
conda env create -f environment.yml
若使⽤国内镜像后出现安装错误,⾸先取消PyPI镜像配置,即执⾏命令pip config unset global.index-url
。然后重试命令conda env create -f environment.yml
。
第四步是激活之前创建的环境
。激活该环境是能够运⾏本书的代码的前提。如需退出虚拟环境,可使⽤命令conda deactivate
(若conda版本低于4.4,使⽤命令deactivate)。
conda activate gluon
# 若conda版本低于4.4,使⽤命令activate gluon
第五步是打开Jupyter记事本
。
jupyter notebook
这时在浏览器打开 http://localhost:8888 (通常会⾃动打开)就可以查看和运⾏本书中每⼀节的代码了。
本书中若⼲章节的代码会⾃动下载数据集和预训练模型,并默认使⽤美国站点下载。我们可以在运⾏Jupyter前指定MXNet使⽤国内站点下载书中的数据和模型(国外⽤⼾⽆须此操作)。
set MXNET_GLUON_REPO=https://apache-mxnet.s3.cn-north-1.amazonaws.com.cn/ jupyter notebook
2.1.2 更新代码和运行环境
为了适应深度学习和MXNet的快速发展,本书的开源内容将定期发布新版本。我们推荐⼤家定期更新本书的开源内容(如代码)和相应的运⾏环境(如新版MXNet)。以下是更新的具体步骤。
第⼀步是重新下载最新的包含本书全部代码的压缩包。下载地址为 https://zh.d2l.ai/d2l-zh.zip 。
解压后进⼊⽂件夹“d2l-zh”。
第⼆步是使⽤下⾯的命令更新运⾏环境:
conda env update -f environment.yml
之后的激活环境和运⾏Jupyter步骤跟本节前⾯介绍的⼀致。
2.1.3 使⽤GPU版的MXNe
。。。
小结
提示:这里对文章进行总结:
• 为了能够动⼿学深度学习,需要获取本书的代码并安装运⾏环境
。
• 建议⼤家定期更新代码和运⾏环境
练习
提示:这里进行练习:
2.2 数据操作
在深度学习中,我们通常会频繁地对数据进⾏操作。作为动⼿学深度学习的基础,本节将介绍如何对内存中的数据进⾏操作
。
在MXNet中,NDArray
是⼀个类,也是存储和变换数据的主要⼯具。为了简洁,本书常将NDArray实例直接称作NDArray。如果你之前⽤过NumPy,你会发现NDArray和NumPy的多维数组非常类似。然而,NDArray提供GPU计算和⾃动求梯度等更多功能
,这些使NDArray更加适合深度学习
。
2.2.1 创建NDArray
from mxnet import nd
x = nd.arange(12) #⽤arange函数创建⼀个⾏向量。
x
Out[2]:
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.]
<NDArray 12 @cpu(0)
#它是⻓度为12的⼀维数组,且被创建在CPU使⽤的内存上。其中“@cpu(0)”⾥的0没有特别的意义,并不代表特定的核。
x.shape # 获取NDArray实例的形状
x.size # 得到NDArray实例中元素(element)的总数
X = x.reshape((3, 4)) # 把⾏向量x的形状改为(3, 4),也就是⼀个3⾏4列的矩阵
nd.zeros((2, 3, 4)) # 创建⼀个各元素为0,形状为(2, 3, 4)的张量
nd.ones((3, 4)) # 创建各元素为1的张量。
# 通过Python的列表(list)指定需要创建的NDArray中每个元素的值。
Y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
# 随机⽣成NDArray中每个元素的值。
# 下⾯我们创建⼀个形状为(3,4)的NDArray。它的每个元素都随机采样于均值为0、标准差为1的正态分布。
nd.random.normal(0, 1, shape=(3, 4))
2.2.2 运算
2.2.3 ⼴播机制
2.2.4 索引
2.2.5 运算的内存开销
2.2.6 NDArray和NumPy相互变换
2.3 ⾃动求梯度
使⽤MXNet提供的autograd模块
来⾃动求梯度。如果对本节中的数学概念(如梯度)不是很熟悉,可以参阅附录中“数学基础”⼀节。
from mxnet import autograd, nd
例⼦:对函数 y = 2x⊤x 求关于列向量 x 的梯度。
1、调⽤attach_grad函数来申请存储梯度所需要的内存
x.attach_grad()
2、调⽤record函数来要求MXNet记录与求梯度有关的计算。
with autograd.record():
y = 2 * nd.dot(x.T, x)
3、调⽤backward函数⾃动求梯度。
——需要注意的是,如果y不是⼀个标量,MXNet将默认先对y中元素求和得到新的变量,再求该变量有关x的梯度。
y.backward()
4、函数 y = 2x⊤x关于x 的梯度应为4x。现在我们来验证⼀下求出来的梯度是正确的。
In [2]: x
Out[2]:
[[0.]
[1.]
[2.]
[3.]]<NDArray 4x1 @cpu(0)>
In [6]: assert (x.grad - 4 * x).norm().asscalar() == 0
x.grad
Out[6]:
[[ 0.]
[ 4.]
[ 8.]
[12.]]<NDArray 4x1 @cpu(0)>
2.3.2 训练模式和预测模式
从上⾯可以看出,在调⽤record函数后,MXNet会记录并计算梯度
。
此外,默认情况下autograd还会将运⾏模式从预测模式转为训练模式
。这可以通过调⽤is_training函数来查看。
…
小结
提示:这里对文章进行总结:
• 为了能够动⼿学深度学习,需要获取本书的代码并安装运⾏环境
。
• 建议⼤家定期更新代码和运⾏环境
练习
提示:这里进行练习: