Skip to content

Commit 69e3ce1

Browse files
committed
1.5.0b20181215
1 parent bb91c56 commit 69e3ce1

File tree

10 files changed

+23
-19
lines changed

10 files changed

+23
-19
lines changed

build/env.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ dependencies:
1010
- nbsphinx==0.3.5
1111
- recommonmark==0.4.0
1212
- https://github.com/mli/notedown/tarball/master
13-
- mxnet-cu92==1.2.0
13+
- mxnet-cu92==1.5.0b20181215
1414
- gluonbook==0.8.5
1515
- jieba==0.39
1616
- awscli

chapter_appendix/aws.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ source activate gluon
147147

148148
```
149149
pip uninstall mxnet
150-
pip install mxnet-cu90==1.2.0 # 指定本书代码依赖的版本号
150+
pip install mxnet-cu90==X.Y.Z # X.Y.Z 应替换为本书代码依赖的版本号
151151
```
152152

153153
## 运行Jupyter记事本

chapter_computer-vision/image-augmentation.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ def train_with_data_aug(train_augs, test_augs, lr=0.001):
228228
loss = gloss.SoftmaxCrossEntropyLoss()
229229
train_iter = load_cifar10(True, train_augs, batch_size)
230230
test_iter = load_cifar10(False, test_augs, batch_size)
231-
train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs=10)
231+
train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs=8)
232232
```
233233

234234
### 有关图像增广的对比实验

chapter_computer-vision/ssd.md

-2
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,6 @@ print('output bbox preds:', bbox_preds.shape)
194194
```{.python .input n=14}
195195
batch_size = 32
196196
train_data, test_data = gb.load_data_pikachu(batch_size)
197-
# 为保证 GPU 计算效率,这里为每张训练图像填充了两个标签为 -1 的边界框。
198-
train_data.reshape(label_shape=(3, 5))
199197
```
200198

201199
在皮卡丘数据集中,目标的类别数为1。定义好模型以后,我们需要初始化模型参数并定义优化算法。

chapter_deep-learning-computation/read-write.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ mydict2
4242

4343
## 读写Gluon模型的参数
4444

45-
除了NDArray以外,我们还可以读写Gluon模型的参数。Gluon的Block类提供了`save_params``load_params`函数来读写模型参数(较新版本的MXNet,如1.2.1版,则使用`save_parameters``load_parameters`函数)。为了演示方便,我们先创建一个多层感知机,并将其初始化。回忆[“模型参数的延后初始化”](deferred-init.md)一节,由于延后初始化,我们需要先运行一次前向计算才能实际初始化模型参数。
45+
除了NDArray以外,我们还可以读写Gluon模型的参数。Gluon的Block类提供了`save_parameters``load_parameters`函数来读写模型参数。为了演示方便,我们先创建一个多层感知机,并将其初始化。回忆[“模型参数的延后初始化”](deferred-init.md)一节,由于延后初始化,我们需要先运行一次前向计算才能实际初始化模型参数。
4646

4747
```{.python .input n=6}
4848
class MLP(nn.Block):
@@ -64,14 +64,14 @@ y = net(x)
6464

6565
```{.python .input}
6666
filename = 'mlp.params'
67-
net.save_params(filename)
67+
net.save_parameters(filename)
6868
```
6969

7070
接下来,我们再实例化一次定义好的多层感知机。跟随机初始化模型参数不同,我们在这里直接读取保存在文件里的参数。
7171

7272
```{.python .input n=8}
7373
net2 = MLP()
74-
net2.load_params(filename)
74+
net2.load_parameters(filename)
7575
```
7676

7777
因为这两个实例都有同样的模型参数,那么对同一个输入`x`的计算结果将会是一样。我们来验证一下。

chapter_introduction/how-to-use.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
本书的一大特点是每一节的代码都是可以运行的。你可以改动代码后重新运行,并通过运行结果进一步理解改动所带来的影响。我们认为这种交互式的学习体验对于学习深度学习非常重要。因为深度学习目前并没有很好的理论解释框架,很多论断只可意会。文字解释在这时候可能比较苍白无力,而且不足以覆盖所有细节。你需要通过不断改动代码、观察运行结果并进行经验总结,逐步领悟和掌握深度学习。
3030

31-
本书的代码基于Apache MXNet实现。MXNet是一个开源的深度学习框架。它是AWS(亚马逊云计算服务)首选的深度学习框架,也被众多学校和公司使用。本书所有代码已在MXNet 1.2.0下测试通过。但由于深度学习发展极为迅速,未来版本的MXNet可能会造成书中部分代码无法正常运行。遇到类似问题可参考[“获取和运行本书代码”](../chapter_prerequisite/install.md)一节来更新代码和运行环境。此外,为避免重复描述,我们将本书中多次使用的函数和类封装在版本号为1.0.0的`gluonbook`包中。这些函数和类的定义所在章节已在附录[“gluonbook包索引](../chapter_appendix/gluonbook.md)里列出
31+
本书的代码基于Apache MXNet实现。MXNet是一个开源的深度学习框架。它是AWS(亚马逊云计算服务)首选的深度学习框架,也被众多学校和公司使用。为避免重复描述,我们将本书中多次使用的函数和类封装在`gluonbook`包中。这些函数和类的定义所在章节已在附录[“gluonbook包索引”](../chapter_appendix/gluonbook.md)里列出。由于深度学习发展极为迅速,未来版本的MXNet可能会造成书中部分代码无法正常运行。遇到相关问题可参考[“获取和运行本书代码”](../chapter_prerequisite/install.md)一节来更新代码和运行环境。如果你想了解运行本书代码所依赖的MXNet和`gluonbook`包的版本号,也可参考[“获取和运行本书代码](../chapter_prerequisite/install.md)一节
3232

3333
本书可以作为MXNet入门教程使用。但我们提供代码的主要目的在于增加一个在文字、图像和公式外的学习深度学习算法的方式,以及一个便于理解各算法在真实数据上实际效果的交互式环境。书中只使用了MXNet的`ndarray``autograd``gluon`等模块的基础功能,使你尽可能了解深度学习算法的实现细节。即便你在研究和工作中使用了其他深度学习框架,书中的代码也能帮助你更好地理解深度学习算法。
3434

chapter_natural-language-processing/similarity-analogy.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ glove_6b50d.token_to_idx['beautiful'], glove_6b50d.idx_to_token[3367]
4848

4949
```{.python .input}
5050
def knn(W, x, k):
51+
# 添加的 1e-9 是为了数值稳定性。
5152
cos = nd.dot(W, x.reshape((-1,))) / (
52-
nd.sum(W * W, axis=1).sqrt() * nd.sum(x * x).sqrt())
53+
(nd.sum(W * W, axis=1) + 1e-9).sqrt() * nd.sum(x * x).sqrt())
5354
topk = nd.topk(cos, k=k, ret_typ='indices').asnumpy().astype('int32')
5455
return topk, [cos[i].asscalar() for i in topk]
5556
```
@@ -59,8 +60,8 @@ def knn(W, x, k):
5960
```{.python .input}
6061
def get_similar_tokens(query_token, k, embed):
6162
topk, cos = knn(embed.idx_to_vec,
62-
embed.get_vecs_by_tokens([query_token]), k+2)
63-
for i, c in zip(topk[2:], cos[2:]): # 除去输入词和未知词
63+
embed.get_vecs_by_tokens([query_token]), k+1)
64+
for i, c in zip(topk[1:], cos[1:]): # 除去输入词
6465
print('cosine sim=%.3f: %s' % (c, (embed.idx_to_token[i])))
6566
```
6667

@@ -88,8 +89,8 @@ get_similar_tokens('beautiful', 3, glove_6b50d)
8889
def get_analogy(token_a, token_b, token_c, embed):
8990
vecs = embed.get_vecs_by_tokens([token_a, token_b, token_c])
9091
x = vecs[1] - vecs[0] + vecs[2]
91-
topk, cos = knn(embed.idx_to_vec, x, 2)
92-
return embed.idx_to_token[topk[1]] # 除去未知词。
92+
topk, cos = knn(embed.idx_to_vec, x, 1)
93+
return embed.idx_to_token[topk[0]]
9394
```
9495

9596
验证下“男-女”类比。

chapter_natural-language-processing/word2vec-gluon.md

+8-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
```{.python .input n=1}
88
import collections
9+
import gluonbook as gb
910
import math
1011
from mxnet import autograd, gluon, nd
1112
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),
285286

286287
```{.python .input n=23}
287288
def train(net, lr, num_epochs):
288-
net.initialize(force_reinit=True)
289+
ctx = gb.try_gpu()
290+
net.initialize(ctx=ctx, force_reinit=True)
289291
trainer = gluon.Trainer(net.collect_params(), 'adam',
290292
{'learning_rate': lr})
291293
for epoch in range(num_epochs):
292294
start_time, train_l_sum = time.time(), 0
293295
for batch in data_iter:
294-
center, context_negative, mask, label = batch
296+
center, context_negative, mask, label = [
297+
data.as_in_context(ctx) for data in batch]
295298
with autograd.record():
296299
pred = skip_gram(center, context_negative, net[0], net[1])
297300
# 使用掩码变量 mask 来避免填充项对损失函数计算的影响。
@@ -319,7 +322,8 @@ train(net, 0.005, 3)
319322
def get_similar_tokens(query_token, k, embed):
320323
W = embed.weight.data()
321324
x = W[token_to_idx[query_token]]
322-
cos = nd.dot(W, x) / nd.sum(W * W, axis=1).sqrt() / nd.sum(x * x).sqrt()
325+
# # 添加的 1e-9 是为了数值稳定性。
326+
cos = nd.dot(W, x) / (nd.sum(W * W, axis=1) * nd.sum(x * x) + 1e-9).sqrt()
323327
topk = nd.topk(cos, k=k+1, ret_typ='indices').asnumpy().astype('int32')
324328
for i in topk[1:]: # 除去输入词。
325329
print('cosine sim=%.3f: %s' % (cos[i].asscalar(), (idx_to_token[i])))
@@ -336,6 +340,7 @@ get_similar_tokens('chip', 3, net[0])
336340

337341
## 练习
338342

343+
* 在创建`nn.Embedding`实例时设参数`sparse_grad=True`,训练是否可以加速?查阅MXNet文档,了解该参数的意义。
339344
* 我们用`batchify`函数指定`DataLoader`实例中小批量的读取方式,并打印了读取的第一个批量中各个变量的形状。这些形状该如何计算得到?
340345
* 试着找出其他词的近义词。
341346
* 调一调超参数,观察并分析实验结果。

chapter_prerequisite/install.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk
2828
conda config --prepend channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
2929
```
3030

31-
接下来使用conda创建虚拟(运行)环境并安装本书需要的软件。这里`environment.yml`是放置在代码压缩包中的文件,它指定了执行本书代码所需要的软件
31+
接下来使用conda创建虚拟(运行)环境并安装本书需要的软件。这里`environment.yml`是放置在代码压缩包中的文件,它指定了运行本书(代码压缩包中)代码所依赖的软件及版本号
3232

3333
```
3434
conda env create -f environment.yml

environment.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ dependencies:
66
- pandas=0.23.2
77
- pip:
88
- requests==2.18.4
9-
- mxnet==1.2.0
9+
- mxnet==1.5.0b20181215
1010
- gluonbook==0.8.5

0 commit comments

Comments
 (0)