Skip to content

Commit e42ebff

Browse files
authored
Merge pull request #1182 from d2l-ai/master
Release 2.0.0-beta1
2 parents 450277f + 47f7d28 commit e42ebff

File tree

38 files changed

+85
-80
lines changed

38 files changed

+85
-80
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[![Build Status](http://ci.d2l.ai/job/d2l-zh/job/master/badge/icon)](http://ci.d2l.ai/job/d2l-zh/job/master/)
44

5-
[第一版:zh-v1.D2L.ai](https://zh-v1.d2l.ai/) | [第二版预览版:zh.D2L.ai](https://zh.d2l.ai) | 安装和使用书中源代码:[第一版](https://zh-v1.d2l.ai/chapter_prerequisite/install.html) [第二版](https://zh.d2l.ai/chapter_installation/index.html) | 当前版本: v2.0.0-alpha2
5+
[第一版:zh-v1.D2L.ai](https://zh-v1.d2l.ai/) | [第二版预览版:zh.D2L.ai](https://zh.d2l.ai) | 安装和使用书中源代码:[第一版](https://zh-v1.d2l.ai/chapter_prerequisite/install.html) [第二版](https://zh.d2l.ai/chapter_installation/index.html) | 当前版本: v2.0.0-beta1
66

77
<h5 align="center"><i>理解深度学习的最佳方法是学以致用。</i></h5>
88

chapter_appendix-tools-for-deep-learning/aws.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
1. 安装CUDA(或使用预装CUDA的Amazon机器映像)。
88
1. 安装深度学习框架和其他库以运行本书的代码。
99

10-
此过程也适用于其他实例(和其他云),尽管需要一些细微的修改。在继续操作之前,你需要创建一个aws帐户,有关更多详细信息,请参阅 :numref:`sec_sagemaker`
10+
此过程也适用于其他实例(和其他云),尽管需要一些细微的修改。在继续操作之前,你需要创建一个AWS帐户,有关更多详细信息,请参阅 :numref:`sec_sagemaker`
1111

1212
## 创建和运行EC2实例
1313

chapter_attention-mechanisms/self-attention-and-positional-encoding.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
:label:`sec_self-attention-and-positional-encoding`
33

44
在深度学习中,我们经常使用卷积神经网络(CNN)或循环神经网络(RNN)对序列进行编码。
5-
想象一下,有了注意力机制之后,我们将词元序列输入注意力池化中
5+
想象一下,有了注意力机制之后,我们将词元序列输入注意力汇聚中
66
以便同一组词元同时充当查询、键和值。
77
具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。
88
由于查询、键和值来自同一组输入,因此被称为
@@ -43,7 +43,7 @@ $\mathbf{y}_1, \ldots, \mathbf{y}_n$,其中:
4343

4444
$$\mathbf{y}_i = f(\mathbf{x}_i, (\mathbf{x}_1, \mathbf{x}_1), \ldots, (\mathbf{x}_n, \mathbf{x}_n)) \in \mathbb{R}^d$$
4545

46-
根据 :eqref:`eq_attn-pooling`中定义的注意力池化函数$f$。
46+
根据 :eqref:`eq_attn-pooling`中定义的注意力汇聚函数$f$。
4747
下面的代码片段是基于多头注意力对一个张量完成自注意力的计算,
4848
张量的形状为(批量大小,时间步的数目或词元序列的长度,$d$)。
4949
输出与输入的张量形状相同。

chapter_computer-vision/anchor.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def multibox_prior(data, sizes, ratios):
5959
ratio_tensor = d2l.tensor(ratios, ctx=device)
6060
6161
# 为了将锚点移动到像素的中心,需要设置偏移量。
62-
# 因为一个像素的的高为1且宽为1,我们选择偏移我们的中心0.5
62+
# 因为一个像素的高为1且宽为1,我们选择偏移我们的中心0.5
6363
offset_h, offset_w = 0.5, 0.5
6464
steps_h = 1.0 / in_height # 在y轴上缩放步长
6565
steps_w = 1.0 / in_width # 在x轴上缩放步长
@@ -101,15 +101,15 @@ def multibox_prior(data, sizes, ratios):
101101
ratio_tensor = d2l.tensor(ratios, device=device)
102102
103103
# 为了将锚点移动到像素的中心,需要设置偏移量。
104-
# 因为一个像素的的高为1且宽为1,我们选择偏移我们的中心0.5
104+
# 因为一个像素的高为1且宽为1,我们选择偏移我们的中心0.5
105105
offset_h, offset_w = 0.5, 0.5
106106
steps_h = 1.0 / in_height # 在y轴上缩放步长
107107
steps_w = 1.0 / in_width # 在x轴上缩放步长
108108
109109
# 生成锚框的所有中心点
110110
center_h = (torch.arange(in_height, device=device) + offset_h) * steps_h
111111
center_w = (torch.arange(in_width, device=device) + offset_w) * steps_w
112-
shift_y, shift_x = torch.meshgrid(center_h, center_w)
112+
shift_y, shift_x = torch.meshgrid(center_h, center_w, indexing='ij')
113113
shift_y, shift_x = shift_y.reshape(-1), shift_x.reshape(-1)
114114
115115
# 生成“boxes_per_pixel”个高和宽,
@@ -324,8 +324,8 @@ def assign_anchor_to_bbox(ground_truth, anchors, device, iou_threshold=0.5):
324324
anchors_bbox_map = np.full((num_anchors,), -1, dtype=np.int32, ctx=device)
325325
# 根据阈值,决定是否分配真实边界框
326326
max_ious, indices = np.max(jaccard, axis=1), np.argmax(jaccard, axis=1)
327-
anc_i = np.nonzero(max_ious >= 0.5)[0]
328-
box_j = indices[max_ious >= 0.5]
327+
anc_i = np.nonzero(max_ious >= iou_threshold)[0]
328+
box_j = indices[max_ious >= iou_threshold]
329329
anchors_bbox_map[anc_i] = box_j
330330
col_discard = np.full((num_anchors,), -1)
331331
row_discard = np.full((num_gt_boxes,), -1)
@@ -352,8 +352,8 @@ def assign_anchor_to_bbox(ground_truth, anchors, device, iou_threshold=0.5):
352352
device=device)
353353
# 根据阈值,决定是否分配真实边界框
354354
max_ious, indices = torch.max(jaccard, dim=1)
355-
anc_i = torch.nonzero(max_ious >= 0.5).reshape(-1)
356-
box_j = indices[max_ious >= 0.5]
355+
anc_i = torch.nonzero(max_ious >= iou_threshold).reshape(-1)
356+
box_j = indices[max_ious >= iou_threshold]
357357
anchors_bbox_map[anc_i] = box_j
358358
col_discard = torch.full((num_anchors,), -1)
359359
row_discard = torch.full((num_gt_boxes,), -1)

chapter_computer-vision/image-augmentation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,11 +203,11 @@ test_augs = torchvision.transforms.Compose([
203203
```
204204

205205
:begin_tab:`mxnet`
206-
接下来,我们定义了一个辅助函数,以便于读取图像和应用图像增广。Gluon数据集提供的`transform_first`函数将图像增广应用于每个训练示例的第一个元素(图像和标签),即图像顶部的元素。有关`DataLoader`的详细介绍,请参阅 :numref:`sec_fashion_mnist`
206+
接下来,我们定义了一个辅助函数,以便于读取图像和应用图像增广。Gluon数据集提供的`transform_first`函数将图像增广应用于每个训练样本的第一个元素(由图像和标签组成),即应用在图像上。有关`DataLoader`的详细介绍,请参阅 :numref:`sec_fashion_mnist`
207207
:end_tab:
208208

209209
:begin_tab:`pytorch`
210-
接下来,我们[**定义一个辅助函数,以便于读取图像和应用图像增广**]。PyTorch数据集提供的`transform`函数应用图像增广来转化图像。有关`DataLoader`的详细介绍,请参阅 :numref:`sec_fashion_mnist`
210+
接下来,我们[**定义一个辅助函数,以便于读取图像和应用图像增广**]。PyTorch数据集提供的`transform`参数应用图像增广来转化图像。有关`DataLoader`的详细介绍,请参阅 :numref:`sec_fashion_mnist`
211211
:end_tab:
212212

213213
```{.python .input}

chapter_computer-vision/rcnn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ rois = torch.Tensor([[0, 0, 0, 20, 20], [0, 0, 10, 30, 30]])
8989
```
9090

9191
由于`X`的高和宽是输入图像高和宽的$1/10$,因此,两个提议区域的坐标先按`spatial_scale`乘以0.1。
92-
然后,在`X`上分别标出这两个兴趣区域`X[:, :, 1:4, 0:4]``X[:, :, 1:4, 0:4]`
92+
然后,在`X`上分别标出这两个兴趣区域`X[:, :, 0:3, 0:3]``X[:, :, 1:4, 0:4]`
9393
最后,在$2\times 2$的兴趣区域汇聚层中,每个兴趣区域被划分为子窗口网格,并进一步抽取相同形状$2\times 2$的特征。
9494

9595
```{.python .input}

chapter_convolutional-modern/batch-norm.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ $$\begin{aligned} \hat{\boldsymbol{\mu}}_\mathcal{B} &= \frac{1}{|\mathcal{B}|}
7070
### 全连接层
7171

7272
通常,我们将批量规范化层置于全连接层中的仿射变换和激活函数之间。
73-
设全连接层的输入为u,权重参数和偏置参数分别为$\mathbf{W}$和$\mathbf{b}$,激活函数为$\phi$,批量规范化的运算符为$\mathrm{BN}$。
73+
设全连接层的输入为x,权重参数和偏置参数分别为$\mathbf{W}$和$\mathbf{b}$,激活函数为$\phi$,批量规范化的运算符为$\mathrm{BN}$。
7474
那么,使用批量规范化的全连接层的输出的计算详情如下:
7575

7676
$$\mathbf{h} = \phi(\mathrm{BN}(\mathbf{W}\mathbf{x} + \mathbf{b}) ).$$

chapter_convolutional-neural-networks/lenet.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ LeNet被广泛用于自动取款机(ATM)机中,帮助识别处理支票的
2727
![LeNet中的数据流。输入是手写数字,输出为10种可能结果的概率。](../img/lenet.svg)
2828
:label:`img_lenet`
2929

30-
每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层。请注意,虽然ReLU和最大汇聚层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用$5\times 5$卷积核和一个sigmoid激活函数。这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有6个输出通道,而第二个卷积层有16个输出通道。每个$2\times2$池操作(步骤2)通过空间下采样将维数减少4倍。卷积的输出形状由批量大小、通道数、高度、宽度决定。
30+
每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层。请注意,虽然ReLU和最大汇聚层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用$5\times 5$卷积核和一个sigmoid激活函数。这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有6个输出通道,而第二个卷积层有16个输出通道。每个$2\times2$池操作(步幅2)通过空间下采样将维数减少4倍。卷积的输出形状由批量大小、通道数、高度、宽度决定。
3131

3232
为了将卷积块的输出传递给稠密块,我们必须在小批量中展平每个样本。换言之,我们将这个四维输入转换成全连接层所期望的二维输入。这里的二维表示的第一个维度索引小批量中的样本,第二个维度给出每个样本的平面向量表示。LeNet的稠密块有三个全连接层,分别有120、84和10个输出。因为我们在执行分类任务,所以输出层的10维对应于最后输出结果的数量。
3333

chapter_convolutional-neural-networks/padding-and-strides.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ conv2d = tf.keras.layers.Conv2D(1, kernel_size=(3,5), padding='valid',
182182
comp_conv2d(conv2d, X).shape
183183
```
184184

185-
为了简洁起见,当输入高度和宽度两侧的填充数量分别为$p_h$和$p_w$时,我们称之为填充$(p_h, p_w)$。当$p_h = p_w = p$时,填充是$p$。同理,当高度和宽度上的步幅分别为$s_h$和$s_w$时,我们称之为步幅$(s_h, s_w)$。当时的步幅为$s_h = s_w = s$时,步幅为$s$。默认情况下,填充为0,步幅为1。在实践中,我们很少使用不一致的步幅或填充,也就是说,我们通常有$p_h = p_w$和$s_h = s_w$。
185+
为了简洁起见,当输入高度和宽度两侧的填充数量分别为$p_h$和$p_w$时,我们称之为填充$(p_h, p_w)$。当$p_h = p_w = p$时,填充是$p$。同理,当高度和宽度上的步幅分别为$s_h$和$s_w$时,我们称之为步幅$(s_h, s_w)$。特别地,当$s_h = s_w = s$时,我们称步幅为$s$。默认情况下,填充为0,步幅为1。在实践中,我们很少使用不一致的步幅或填充,也就是说,我们通常有$p_h = p_w$和$s_h = s_w$。
186186

187187
## 小结
188188

chapter_deep-learning-computation/model-construction.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ class MySequential(nn.Module):
295295
super().__init__()
296296
for idx, module in enumerate(args):
297297
# 这里,module是Module子类的一个实例。我们把它保存在'Module'类的成员
298-
# 变量_modules中。module的类型是OrderedDict
298+
# 变量_modules中。_module的类型是OrderedDict
299299
self._modules[str(idx)] = module
300300
301301
def forward(self, X):

0 commit comments

Comments
 (0)