Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
69e3ce16
D
d2l-zh
项目概览
OpenDocCN
/
d2l-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
69e3ce16
编写于
12月 19, 2018
作者:
A
Aston Zhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.5.0b20181215
上级
bb91c566
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
23 addition
and
19 deletion
+23
-19
build/env.yml
build/env.yml
+1
-1
chapter_appendix/aws.md
chapter_appendix/aws.md
+1
-1
chapter_computer-vision/image-augmentation.md
chapter_computer-vision/image-augmentation.md
+1
-1
chapter_computer-vision/ssd.md
chapter_computer-vision/ssd.md
+0
-2
chapter_deep-learning-computation/read-write.md
chapter_deep-learning-computation/read-write.md
+3
-3
chapter_introduction/how-to-use.md
chapter_introduction/how-to-use.md
+1
-1
chapter_natural-language-processing/similarity-analogy.md
chapter_natural-language-processing/similarity-analogy.md
+6
-5
chapter_natural-language-processing/word2vec-gluon.md
chapter_natural-language-processing/word2vec-gluon.md
+8
-3
chapter_prerequisite/install.md
chapter_prerequisite/install.md
+1
-1
environment.yml
environment.yml
+1
-1
未找到文件。
build/env.yml
浏览文件 @
69e3ce16
...
...
@@ -10,7 +10,7 @@ dependencies:
-
nbsphinx==0.3.5
-
recommonmark==0.4.0
-
https://github.com/mli/notedown/tarball/master
-
mxnet-cu92==1.
2.0
-
mxnet-cu92==1.
5.0b20181215
-
gluonbook==0.8.5
-
jieba==0.39
-
awscli
chapter_appendix/aws.md
浏览文件 @
69e3ce16
...
...
@@ -147,7 +147,7 @@ source activate gluon
```
pip uninstall mxnet
pip install mxnet-cu90==
1.2.0 # 指定
本书代码依赖的版本号。
pip install mxnet-cu90==
X.Y.Z # X.Y.Z 应替换为
本书代码依赖的版本号。
```
## 运行Jupyter记事本
...
...
chapter_computer-vision/image-augmentation.md
浏览文件 @
69e3ce16
...
...
@@ -228,7 +228,7 @@ def train_with_data_aug(train_augs, test_augs, lr=0.001):
loss = gloss.SoftmaxCrossEntropyLoss()
train_iter = load_cifar10(True, train_augs, batch_size)
test_iter = load_cifar10(False, test_augs, batch_size)
train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs=
10
)
train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs=
8
)
```
### 有关图像增广的对比实验
...
...
chapter_computer-vision/ssd.md
浏览文件 @
69e3ce16
...
...
@@ -194,8 +194,6 @@ print('output bbox preds:', bbox_preds.shape)
```
{.python .input n=14}
batch_size = 32
train_data, test_data = gb.load_data_pikachu(batch_size)
# 为保证 GPU 计算效率,这里为每张训练图像填充了两个标签为 -1 的边界框。
train_data.reshape(label_shape=(3, 5))
```
在皮卡丘数据集中,目标的类别数为1。定义好模型以后,我们需要初始化模型参数并定义优化算法。
...
...
chapter_deep-learning-computation/read-write.md
浏览文件 @
69e3ce16
...
...
@@ -42,7 +42,7 @@ mydict2
## 读写Gluon模型的参数
除了NDArray以外,我们还可以读写Gluon模型的参数。Gluon的Block类提供了
`save_param
s`
和
`load_params`
函数来读写模型参数(较新版本的MXNet,如1.2.1版,则使用
`save_parameters`
和
`load_parameters`
函数)
。为了演示方便,我们先创建一个多层感知机,并将其初始化。回忆
[
“模型参数的延后初始化”
](
deferred-init.md
)
一节,由于延后初始化,我们需要先运行一次前向计算才能实际初始化模型参数。
除了NDArray以外,我们还可以读写Gluon模型的参数。Gluon的Block类提供了
`save_param
eters`
和
`load_parameters`
函数来读写模型参数
。为了演示方便,我们先创建一个多层感知机,并将其初始化。回忆
[
“模型参数的延后初始化”
](
deferred-init.md
)
一节,由于延后初始化,我们需要先运行一次前向计算才能实际初始化模型参数。
```
{.python .input n=6}
class MLP(nn.Block):
...
...
@@ -64,14 +64,14 @@ y = net(x)
```
{.python .input}
filename = 'mlp.params'
net.save_params(filename)
net.save_param
eter
s(filename)
```
接下来,我们再实例化一次定义好的多层感知机。跟随机初始化模型参数不同,我们在这里直接读取保存在文件里的参数。
```
{.python .input n=8}
net2 = MLP()
net2.load_params(filename)
net2.load_param
eter
s(filename)
```
因为这两个实例都有同样的模型参数,那么对同一个输入
`x`
的计算结果将会是一样。我们来验证一下。
...
...
chapter_introduction/how-to-use.md
浏览文件 @
69e3ce16
...
...
@@ -28,7 +28,7 @@
本书的一大特点是每一节的代码都是可以运行的。你可以改动代码后重新运行,并通过运行结果进一步理解改动所带来的影响。我们认为这种交互式的学习体验对于学习深度学习非常重要。因为深度学习目前并没有很好的理论解释框架,很多论断只可意会。文字解释在这时候可能比较苍白无力,而且不足以覆盖所有细节。你需要通过不断改动代码、观察运行结果并进行经验总结,逐步领悟和掌握深度学习。
本书的代码基于Apache MXNet实现。MXNet是一个开源的深度学习框架。它是AWS(亚马逊云计算服务)首选的深度学习框架,也被众多学校和公司使用。
本书所有代码已在MXNet 1.2.0下测试通过。但由于深度学习发展极为迅速,未来版本的MXNet可能会造成书中部分代码无法正常运行。遇到类似问题可参考
[
“获取和运行本书代码”
](
../chapter_prerequisite/install.md
)
一节来更新代码和运行环境。此外,为避免重复描述,我们将本书中多次使用的函数和类封装在版本号为1.0.0的
`gluonbook`
包中。这些函数和类的定义所在章节已在附录
[
“gluonbook包索引”
](
../chapter_appendix/gluonbook.md
)
里列出
。
本书的代码基于Apache MXNet实现。MXNet是一个开源的深度学习框架。它是AWS(亚马逊云计算服务)首选的深度学习框架,也被众多学校和公司使用。
为避免重复描述,我们将本书中多次使用的函数和类封装在
`gluonbook`
包中。这些函数和类的定义所在章节已在附录
[
“gluonbook包索引”
](
../chapter_appendix/gluonbook.md
)
里列出。由于深度学习发展极为迅速,未来版本的MXNet可能会造成书中部分代码无法正常运行。遇到相关问题可参考
[
“获取和运行本书代码”
](
../chapter_prerequisite/install.md
)
一节来更新代码和运行环境。如果你想了解运行本书代码所依赖的MXNet和
`gluonbook`
包的版本号,也可参考
[
“获取和运行本书代码”
](
../chapter_prerequisite/install.md
)
一节
。
本书可以作为MXNet入门教程使用。但我们提供代码的主要目的在于增加一个在文字、图像和公式外的学习深度学习算法的方式,以及一个便于理解各算法在真实数据上实际效果的交互式环境。书中只使用了MXNet的
`ndarray`
、
`autograd`
、
`gluon`
等模块的基础功能,使你尽可能了解深度学习算法的实现细节。即便你在研究和工作中使用了其他深度学习框架,书中的代码也能帮助你更好地理解深度学习算法。
...
...
chapter_natural-language-processing/similarity-analogy.md
浏览文件 @
69e3ce16
...
...
@@ -48,8 +48,9 @@ glove_6b50d.token_to_idx['beautiful'], glove_6b50d.idx_to_token[3367]
```
{.python .input}
def knn(W, x, k):
# 添加的 1e-9 是为了数值稳定性。
cos = nd.dot(W, x.reshape((-1,))) / (
nd.sum(W * W, axis=1
).sqrt() * nd.sum(x * x).sqrt())
(nd.sum(W * W, axis=1) + 1e-9
).sqrt() * nd.sum(x * x).sqrt())
topk = nd.topk(cos, k=k, ret_typ='indices').asnumpy().astype('int32')
return topk, [cos[i].asscalar() for i in topk]
```
...
...
@@ -59,8 +60,8 @@ def knn(W, x, k):
```
{.python .input}
def get_similar_tokens(query_token, k, embed):
topk, cos = knn(embed.idx_to_vec,
embed.get_vecs_by_tokens([query_token]), k+
2
)
for i, c in zip(topk[
2:], cos[2:]): # 除去输入词和未知
词。
embed.get_vecs_by_tokens([query_token]), k+
1
)
for i, c in zip(topk[
1:], cos[1:]): # 除去输入
词。
print('cosine sim=%.3f: %s' % (c, (embed.idx_to_token[i])))
```
...
...
@@ -88,8 +89,8 @@ get_similar_tokens('beautiful', 3, glove_6b50d)
def get_analogy(token_a, token_b, token_c, embed):
vecs = embed.get_vecs_by_tokens([token_a, token_b, token_c])
x = vecs[1] - vecs[0] + vecs[2]
topk, cos = knn(embed.idx_to_vec, x,
2
)
return embed.idx_to_token[topk[
1]] # 除去未知词。
topk, cos = knn(embed.idx_to_vec, x,
1
)
return embed.idx_to_token[topk[
0]]
```
验证下“男-女”类比。
...
...
chapter_natural-language-processing/word2vec-gluon.md
浏览文件 @
69e3ce16
...
...
@@ -6,6 +6,7 @@
```
{.python .input n=1}
import collections
import gluonbook as gb
import math
from mxnet import autograd, gluon, nd
from mxnet.gluon import data as gdata, loss as gloss, nn
...
...
@@ -285,13 +286,15 @@ net.add(nn.Embedding(input_dim=len(idx_to_token), output_dim=embed_size),
```
{.python .input n=23}
def train(net, lr, num_epochs):
net.initialize(force_reinit=True)
ctx = gb.try_gpu()
net.initialize(ctx=ctx, force_reinit=True)
trainer = gluon.Trainer(net.collect_params(), 'adam',
{'learning_rate': lr})
for epoch in range(num_epochs):
start_time, train_l_sum = time.time(), 0
for batch in data_iter:
center, context_negative, mask, label = batch
center, context_negative, mask, label = [
data.as_in_context(ctx) for data in batch]
with autograd.record():
pred = skip_gram(center, context_negative, net[0], net[1])
# 使用掩码变量 mask 来避免填充项对损失函数计算的影响。
...
...
@@ -319,7 +322,8 @@ train(net, 0.005, 3)
def get_similar_tokens(query_token, k, embed):
W = embed.weight.data()
x = W[token_to_idx[query_token]]
cos = nd.dot(W, x) / nd.sum(W * W, axis=1).sqrt() / nd.sum(x * x).sqrt()
# # 添加的 1e-9 是为了数值稳定性。
cos = nd.dot(W, x) / (nd.sum(W * W, axis=1) * nd.sum(x * x) + 1e-9).sqrt()
topk = nd.topk(cos, k=k+1, ret_typ='indices').asnumpy().astype('int32')
for i in topk[1:]: # 除去输入词。
print('cosine sim=%.3f: %s' % (cos[i].asscalar(), (idx_to_token[i])))
...
...
@@ -336,6 +340,7 @@ get_similar_tokens('chip', 3, net[0])
## 练习
*
在创建
`nn.Embedding`
实例时设参数
`sparse_grad=True`
,训练是否可以加速?查阅MXNet文档,了解该参数的意义。
*
我们用
`batchify`
函数指定
`DataLoader`
实例中小批量的读取方式,并打印了读取的第一个批量中各个变量的形状。这些形状该如何计算得到?
*
试着找出其他词的近义词。
*
调一调超参数,观察并分析实验结果。
...
...
chapter_prerequisite/install.md
浏览文件 @
69e3ce16
...
...
@@ -28,7 +28,7 @@ conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk
conda config --prepend channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
```
接下来使用conda创建虚拟(运行)环境并安装本书需要的软件。这里
`environment.yml`
是放置在代码压缩包中的文件,它指定了
执行本书代码所需要的软件
。
接下来使用conda创建虚拟(运行)环境并安装本书需要的软件。这里
`environment.yml`
是放置在代码压缩包中的文件,它指定了
运行本书(代码压缩包中)代码所依赖的软件及版本号
。
```
conda env create -f environment.yml
...
...
environment.yml
浏览文件 @
69e3ce16
...
...
@@ -6,5 +6,5 @@ dependencies:
-
pandas=0.23.2
-
pip
:
-
requests==2.18.4
-
mxnet==1.
2.0
-
mxnet==1.
5.0b20181215
-
gluonbook==0.8.5
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录