【笔记】花书——第二章 预备知识

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
前言 第一章 深度学习简介
第二章 预备知识


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

二、预备知识

在动⼿学习之前,我们需要获取本书的代码,并安装运⾏本书的代码所需要的软件。作为动⼿学深度学习的基础,我们还需要了解如何对内存中的数据进⾏操作,以及对函数求梯度的⽅法。最后,我们应养成主动查阅⽂档来学习代码的良好习惯。

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 = 2xx 求关于列向量 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 = 2xx关于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函数来查看。

小结

提示:这里对文章进行总结:

• 为了能够动⼿学深度学习,需要获取本书的代码并安装运⾏环境
• 建议⼤家定期更新代码和运⾏环境

练习

提示:这里进行练习:
在这里插入图片描述

2.4 xx

  • 36
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值