Skip to content

Commit

Permalink
../../img -> ../img
Browse files Browse the repository at this point in the history
  • Loading branch information
ShusenTang committed Oct 22, 2019
1 parent 33a6fb4 commit 0ce9709
Show file tree
Hide file tree
Showing 48 changed files with 121 additions and 121 deletions.
2 changes: 1 addition & 1 deletion docs/chapter01_DL-intro/deep-learning-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
即使是在中世纪,数学家也热衷于利用统计学来做出估计。例如,在[雅各比·科贝尔(1460--1533)](https://www.maa.org/press/periodicals/convergence/mathematical-treasures-jacob-kobels-geometry)的几何书中记载了使用16名男子的平均脚长来估计男子的平均脚长。

<div align=center>
<img width="600" src="../../img/chapter01/1.1_koebel.jpg"/>
<img width="600" src="../img/chapter01/1.1_koebel.jpg"/>
</div>
<center>图1.1 在中世纪,16名男子的平均脚长被用来估计男子的平均脚长</center>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter02_prerequisite/2.1_install.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Anaconda是Python的一个开源发行版本,主要面向科学计算。我们
## 2.1.2 Jupyter
在没有notebook之前,在IT领域是这样工作的:在普通的 Python shell 或者在IDE(集成开发环境)如Pycharm中写代码,然后在word中写文档来说明你的项目。这个过程很反锁,通常是写完代码,再写文档的时候我还的重头回顾一遍代码。最蛋疼的地方在于,有些数据分析的中间结果,还得重新跑代码,然后把结果弄到文档里给客户看。有了notebook之后,世界突然美好了许多,因为notebook可以直接在代码旁写出叙述性文档,而不是另外编写单独的文档。也就是它可以能将代码、文档等这一切集中到一处,让用户一目了然。如下图所示。
<div align=center>
<img width="500" src="../../img/chapter02/2.1_jupyter.jpg"/>
<img width="500" src="../img/chapter02/2.1_jupyter.jpg"/>
</div>

Jupyter Notebook 已迅速成为数据分析,机器学习的必备工具。因为它可以让数据分析师集中精力向用户解释整个分析过程。
Expand Down
8 changes: 4 additions & 4 deletions docs/chapter03_DL-basics/3.11_underfit-overfit.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ $$
因为高阶多项式函数模型参数更多,模型函数的选择空间更大,所以高阶多项式函数比低阶多项式函数的复杂度更高。因此,高阶多项式函数比低阶多项式函数更容易在相同的训练数据集上得到更低的训练误差。给定训练数据集,模型复杂度和误差之间的关系通常如图3.4所示。给定训练数据集,如果模型的复杂度过低,很容易出现欠拟合;如果模型复杂度过高,很容易出现过拟合。应对欠拟合和过拟合的一个办法是针对数据集选择合适复杂度的模型。

<div align=center>
<img width="350" src="../../img/chapter03/3.11_capacity_vs_error.svg"/>
<img width="350" src="../img/chapter03/3.11_capacity_vs_error.svg"/>
</div>
<div align=center>图3.4 模型复杂度对欠拟合和过拟合的影响</div>

Expand Down Expand Up @@ -168,7 +168,7 @@ weight: tensor([[ 1.1982, -3.3992, 5.6002]])
bias: tensor([5.0014])
```
<div align=center>
<img width="350" src="../../img/chapter03/3.11_output1.png"/>
<img width="350" src="../img/chapter03/3.11_output1.png"/>
</div>


Expand All @@ -187,7 +187,7 @@ weight: tensor([[19.4123]])
bias: tensor([0.5805])
```
<div align=center>
<img width="350" src="../../img/chapter03/3.11_output2.png"/>
<img width="350" src="../img/chapter03/3.11_output2.png"/>
</div>

### 3.11.4.5 训练样本不足(过拟合)
Expand All @@ -205,7 +205,7 @@ weight: tensor([[1.4741, 2.1198, 2.5674]])
bias: tensor([3.1207])
```
<div align=center>
<img width="350" src="../../img/chapter03/3.11_output3.png"/>
<img width="350" src="../img/chapter03/3.11_output3.png"/>
</div>

我们将在接下来的两个小节继续讨论过拟合问题以及应对过拟合的方法。
Expand Down
8 changes: 4 additions & 4 deletions docs/chapter03_DL-basics/3.12_weight-decay.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ fit_and_plot(lambd=0)
L2 norm of w: 15.114808082580566
```
<div align=center>
<img width="350" src="../../img/chapter03/3.12_output1.png"/>
<img width="350" src="../img/chapter03/3.12_output1.png"/>
</div>

### 3.12.3.5 使用权重衰减
Expand All @@ -142,7 +142,7 @@ fit_and_plot(lambd=3)
L2 norm of w: 0.035220853984355927
```
<div align=center>
<img width="350" src="../../img/chapter03/3.12_output2.png"/>
<img width="350" src="../img/chapter03/3.12_output2.png"/>
</div>

## 3.12.4 简洁实现
Expand Down Expand Up @@ -188,7 +188,7 @@ fit_and_plot_pytorch(0)
L2 norm of w: 12.86785888671875
```
<div align=center>
<img width="350" src="../../img/chapter03/3.12_output3.png"/>
<img width="350" src="../img/chapter03/3.12_output3.png"/>
</div>

``` python
Expand All @@ -200,7 +200,7 @@ fit_and_plot_pytorch(3)
L2 norm of w: 0.09631537646055222
```
<div align=center>
<img width="350" src="../../img/chapter03/3.12_output4.png"/>
<img width="350" src="../img/chapter03/3.12_output4.png"/>
</div>

## 小结
Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.13_dropout.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ $$
**丢弃法不改变其输入的期望值**。让我们对图3.3中的隐藏层使用丢弃法,一种可能的结果如图3.5所示,其中$h_2$和$h_5$被清零。这时输出值的计算不再依赖$h_2$和$h_5$,在反向传播时,与这两个隐藏单元相关的权重的梯度均为0。由于在训练中隐藏层神经元的丢弃是随机的,即$h_1, \ldots, h_5$都有可能被清零,输出层的计算无法过度依赖$h_1, \ldots, h_5$中的任一个,从而在训练模型时起到正则化的作用,并可以用来应对过拟合。在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法。

<div align=center>
<img width="350" src="../../img/chapter03/3.13_dropout.svg"/>
<img width="350" src="../img/chapter03/3.13_dropout.svg"/>
</div>
<div align=center> 图3.5 隐藏层使用了丢弃法的多层感知机</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.14_backprop.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ $$J = L + s.$$
我们通常绘制计算图来可视化运算符和变量在计算中的依赖关系。图3.6绘制了本节中样例模型正向传播的计算图,其中左下角是输入,右上角是输出。可以看到,图中箭头方向大多是向右和向上,其中方框代表变量,圆圈代表运算符,箭头表示从输入到输出之间的依赖关系。

<div align=center>
<img width="400" src="../../img/chapter03/3.14_forward.svg"/>
<img width="400" src="../img/chapter03/3.14_forward.svg"/>
</div>
<div align=center> 图3.6 正向传播的计算图</div>

Expand Down
12 changes: 6 additions & 6 deletions docs/chapter03_DL-basics/3.16_kaggle-house-price.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
[Kaggle](https://www.kaggle.com)是一个著名的供机器学习爱好者交流的平台。图3.7展示了Kaggle网站的首页。为了便于提交结果,需要注册Kaggle账号。

<div align=center>
<img width="500" src="../../img/chapter03/3.16_kaggle.png"/>
<img width="500" src="../img/chapter03/3.16_kaggle.png"/>
</div>
<div align=center> 图3.7 Kaggle网站首页</div>

我们可以在房价预测比赛的网页上了解比赛信息和参赛者成绩,也可以下载数据集并提交自己的预测结果。该比赛的网页地址是 https://www.kaggle.com/c/house-prices-advanced-regression-techniques


<div align=center>
<img width="500" src="../../img/chapter03/3.16_house_pricing.png"/>
<img width="500" src="../img/chapter03/3.16_house_pricing.png"/>
</div>
<div align=center> 图3.8 房价预测比赛的网页信息。比赛数据集可通过点击“Data”标签获取</div>
图3.8展示了房价预测比赛的网页信息。
Expand Down Expand Up @@ -67,7 +67,7 @@ test_data.shape # 输出 (1459, 80)
``` python
train_data.iloc[0:4, [0, 1, 2, 3, -3, -2, -1]]
```
<img width="500" src="../../img/chapter03/3.16_output1.png"/>
<img width="500" src="../img/chapter03/3.16_output1.png"/>

可以看到第一个特征是Id,它能帮助模型记住每个训练样本,但难以推广到测试样本,所以我们不使用它来训练。我们将所有的训练数据和测试数据的79个特征按样本连结。

Expand Down Expand Up @@ -210,7 +210,7 @@ fold 3, train rmse 0.237733, valid rmse 0.218747
fold 4, train rmse 0.230720, valid rmse 0.258712
5-fold validation: avg train rmse 0.234155, avg valid rmse 0.241113
```
<img width="400" src="../../img/chapter03/3.16_output2.png"/>
<img width="400" src="../img/chapter03/3.16_output2.png"/>


## 3.16.6 模型选择
Expand Down Expand Up @@ -252,12 +252,12 @@ train_and_pred(train_features, test_features, train_labels, test_data, num_epoch
```
train rmse 0.229943
```
<img width="400" src="../../img/chapter03/3.16_output3.png"/>
<img width="400" src="../img/chapter03/3.16_output3.png"/>

上述代码执行完之后会生成一个submission.csv文件。这个文件是符合Kaggle比赛要求的提交格式的。这时,我们可以在Kaggle上提交我们预测得出的结果,并且查看与测试数据集上真实房价(标签)的误差。具体来说有以下几个步骤:登录Kaggle网站,访问房价预测比赛网页,并点击右侧“Submit Predictions”或“Late Submission”按钮;然后,点击页面下方“Upload Submission File”图标所在的虚线框选择需要提交的预测结果文件;最后,点击页面最下方的“Make Submission”按钮就可以查看结果了,如图3.9所示。

<div align=center>
<img width="500" src="../../img/chapter03/3.16_kaggle_submit.png"/>
<img width="500" src="../img/chapter03/3.16_kaggle_submit.png"/>
</div>
<div align=center> 图3.9 Kaggle预测房价比赛的预测结果提交页面</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.1_linear-regression.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ $$
在深度学习中,我们可以使用神经网络图直观地表现模型结构。为了更清晰地展示线性回归作为神经网络的结构,图3.1使用神经网络图表示本节中介绍的线性回归模型。神经网络图隐去了模型参数权重和偏差。

<div align=center>
<img width="250" src="../../img/chapter03/3.1_linreg.svg"/>
<img width="250" src="../img/chapter03/3.1_linreg.svg"/>
</div>
<div align=center>图3.1 线性回归是一个单层神经网络</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.2_linear-regression-scratch.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ set_figsize()
plt.scatter(features[:, 1].numpy(), labels.numpy(), 1);
```
<div align=center>
<img width="300" src="../../img/chapter03/3.2_output1.png"/>
<img width="300" src="../img/chapter03/3.2_output1.png"/>
</div>

我们将上面的`plt`作图函数以及`use_svg_display`函数和`set_figsize`函数定义在`d2lzh_pytorch`包里。以后在作图时,我们将直接调用`d2lzh_pytorch.plt`。由于`plt``d2lzh_pytorch`包中是一个全局变量,我们在作图前只需要调用`d2lzh_pytorch.set_figsize()`即可打印矢量图并设置图的尺寸。
Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.4_softmax-regression.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ $$
图3.2用神经网络图描绘了上面的计算。softmax回归同线性回归一样,也是一个单层神经网络。由于每个输出$o_1, o_2, o_3$的计算都要依赖于所有的输入$x_1, x_2, x_3, x_4$,softmax回归的输出层也是一个全连接层。

<div align=center>
<img width="350" src="../../img/chapter03/3.4_softmaxreg.svg"/>
<img width="350" src="../img/chapter03/3.4_softmaxreg.svg"/>
</div>
<div align=center> 图3.2 softmax回归是一个单层神经网络</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.5_fashion-mnist.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ show_fashion_mnist(X, get_fashion_mnist_labels(y))
```

<div align=center>
<img width="800" src="../../img/chapter03/3.5_output1.png"/>
<img width="800" src="../img/chapter03/3.5_output1.png"/>
</div>

## 3.5.2 读取小批量
Expand Down
2 changes: 1 addition & 1 deletion docs/chapter03_DL-basics/3.6_softmax-regression-scratch.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ titles = [true + '\n' + pred for true, pred in zip(true_labels, pred_labels)]
d2l.show_fashion_mnist(X[0:9], titles[0:9])
```
<div align=center>
<img width="800" src="../../img/chapter03/3.6_output1.png"/>
<img width="800" src="../img/chapter03/3.6_output1.png"/>
</div>

## 小结
Expand Down
14 changes: 7 additions & 7 deletions docs/chapter03_DL-basics/3.8_mlp.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。图3.3展示了一个多层感知机的神经网络图,它含有一个隐藏层,该层中有5个隐藏单元。

<div align=center>
<img width="350" src="../../img/chapter03/3.8_mlp.svg"/>
<img width="350" src="../img/chapter03/3.8_mlp.svg"/>
</div>
<div align=center> 图3.3 带有隐藏层的多层感知机</div>

Expand Down Expand Up @@ -72,7 +72,7 @@ xyplot(x, y, 'relu')
```

<div align=center>
<img width="350" src="../../img/chapter03/3.8_relu.png"/>
<img width="350" src="../img/chapter03/3.8_relu.png"/>
</div>

显然,当输入为负数时,ReLU函数的导数为0;当输入为正数时,ReLU函数的导数为1。尽管输入为0时ReLU函数不可导,但是我们可以取此处的导数为0。下面绘制ReLU函数的导数。
Expand All @@ -82,7 +82,7 @@ y.sum().backward()
xyplot(x, x.grad, 'grad of relu')
```
<div align=center>
<img width="350" src="../../img/chapter03/3.8_relu_grad.png"/>
<img width="350" src="../img/chapter03/3.8_relu_grad.png"/>
</div>

### 3.8.2.2 sigmoid函数
Expand All @@ -98,7 +98,7 @@ y = x.sigmoid()
xyplot(x, y, 'sigmoid')
```
<div align=center>
<img width="350" src="../../img/chapter03/3.8_sigmoid.png"/>
<img width="350" src="../img/chapter03/3.8_sigmoid.png"/>
</div>

依据链式法则,sigmoid函数的导数
Expand All @@ -114,7 +114,7 @@ y.sum().backward()
xyplot(x, x.grad, 'grad of sigmoid')
```
<div align=center>
<img width="350" src="../../img/chapter03/3.8_sigmoid_grad.png"/>
<img width="350" src="../img/chapter03/3.8_sigmoid_grad.png"/>
</div>

### 3.8.2.3 tanh函数
Expand All @@ -130,7 +130,7 @@ y = x.tanh()
xyplot(x, y, 'tanh')
```
<div align=center>
<img width="350" src="../../img/chapter03/3.8_tanh.png"/>
<img width="350" src="../img/chapter03/3.8_tanh.png"/>
</div>

依据链式法则,tanh函数的导数
Expand All @@ -145,7 +145,7 @@ y.sum().backward()
xyplot(x, x.grad, 'grad of tanh')
```
<div align=center>
<img width="350" src="../../img/chapter03/3.8_tanh_grad.png"/>
<img width="350" src="../img/chapter03/3.8_tanh_grad.png"/>
</div>

## 3.8.3 多层感知机
Expand Down
2 changes: 1 addition & 1 deletion docs/chapter05_CNN/5.11_resnet.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
让我们聚焦于神经网络局部。如图5.9所示,设输入为$\boldsymbol{x}$。假设我们希望学出的理想映射为$f(\boldsymbol{x})$,从而作为图5.9上方激活函数的输入。左图虚线框中的部分需要直接拟合出该映射$f(\boldsymbol{x})$,而右图虚线框中的部分则需要拟合出有关恒等映射的残差映射$f(\boldsymbol{x})-\boldsymbol{x}$。残差映射在实际中往往更容易优化。以本节开头提到的恒等映射作为我们希望学出的理想映射$f(\boldsymbol{x})$。我们只需将图5.9中右图虚线框内上方的加权运算(如仿射)的权重和偏差参数学成0,那么$f(\boldsymbol{x})$即为恒等映射。实际中,当理想映射$f(\boldsymbol{x})$极接近于恒等映射时,残差映射也易于捕捉恒等映射的细微波动。图5.9右图也是ResNet的基础块,即残差块(residual block)。在残差块中,输入可通过跨层的数据线路更快地向前传播。

<div align=center>
<img width="400" src="../../img/chapter05/5.11_residual-block.svg"/>
<img width="400" src="../img/chapter05/5.11_residual-block.svg"/>
</div>
<div align=center>图5.9 普通的网络结构(左)与加入残差连接的网络结构(右)</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter05_CNN/5.12_densenet.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
ResNet中的跨层连接设计引申出了数个后续工作。本节我们介绍其中的一个:稠密连接网络(DenseNet) [1]。 它与ResNet的主要区别如图5.10所示。

<div align=center>
<img width="400" src="../../img/chapter05/5.12_densenet.svg"/>
<img width="400" src="../img/chapter05/5.12_densenet.svg"/>
</div>
<div align=center>图5.10 ResNet(左)与DenseNet(右)在跨层连接上的主要区别:使用相加和使用连结</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter05_CNN/5.1_conv-layer.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
我们用一个具体例子来解释二维互相关运算的含义。如图5.1所示,输入是一个高和宽均为3的二维数组。我们将该数组的形状记为$3 \times 3$或(3,3)。核数组的高和宽分别为2。该数组在卷积计算中又称卷积核或过滤器(filter)。卷积核窗口(又称卷积窗口)的形状取决于卷积核的高和宽,即$2 \times 2$。图5.1中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:$0\times0+1\times1+3\times2+4\times3=19$。

<div align=center>
<img width="250" src="../../img/chapter05/5.1_correlation.svg"/>
<img width="250" src="../img/chapter05/5.1_correlation.svg"/>
</div>
<div align=center>图5.1 二维互相关运算</div>

Expand Down
4 changes: 2 additions & 2 deletions docs/chapter05_CNN/5.2_padding-and-strides.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ $$(n_h-k_h+1) \times (n_w-k_w+1).$$
填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。图5.2里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。图5.2中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:$0\times0+0\times1+0\times2+0\times3=0$。

<div align=center>
<img width="400" src="../../img/chapter05/5.2_conv_pad.svg"/>
<img width="400" src="../img/chapter05/5.2_conv_pad.svg"/>
</div>
<div align=center>图5.2 在输入的高和宽两侧分别填充了0元素的二维互相关计算</div>

Expand Down Expand Up @@ -68,7 +68,7 @@ torch.Size([8, 8])
目前我们看到的例子里,在高和宽两个方向上步幅均为1。我们也可以使用更大步幅。图5.3展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了3行,而在输出第一行第二个元素时卷积窗口向右滑动了2列。当卷积窗口在输入上再向右滑动2列时,由于输入元素无法填满窗口,无结果输出。图5.3中的阴影部分为输出元素及其计算所使用的输入和核数组元素:$0\times0+0\times1+1\times2+2\times3=8$、$0\times0+6\times1+0\times2+0\times3=6$。

<div align=center>
<img width="400" src="../../img/chapter05/5.2_conv_stride.svg"/>
<img width="400" src="../img/chapter05/5.2_conv_stride.svg"/>
</div>
<div align=center>图5.3 高和宽上步幅分别为3和2的二维互相关运算</div>

Expand Down
4 changes: 2 additions & 2 deletions docs/chapter05_CNN/5.3_channels.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
图5.4展示了含2个输入通道的二维互相关计算的例子。在每个通道上,二维输入数组与二维核数组做互相关运算,再按通道相加即得到输出。图5.4中阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:$(1\times1+2\times2+4\times3+5\times4)+(0\times0+1\times1+3\times2+4\times3)=56$。

<div align=center>
<img width="400" src="../../img/chapter05/5.3_conv_multi_in.svg"/>
<img width="400" src="../img/chapter05/5.3_conv_multi_in.svg"/>
</div>
<div align=center>图5.4 含2个输入通道的互相关计算</div>

Expand Down Expand Up @@ -90,7 +90,7 @@ tensor([[[ 56., 72.],
最后我们讨论卷积窗口形状为$1\times 1$($k_h=k_w=1$)的多通道卷积层。我们通常称之为$1\times 1$卷积层,并将其中的卷积运算称为$1\times 1$卷积。因为使用了最小窗口,$1\times 1$卷积失去了卷积层可以识别高和宽维度上相邻元素构成的模式的功能。实际上,$1\times 1$卷积的主要计算发生在通道维上。图5.5展示了使用输入通道数为3、输出通道数为2的$1\times 1$卷积核的互相关计算。值得注意的是,输入和输出具有相同的高和宽。输出中的每个元素来自输入中在高和宽上相同位置的元素在不同通道之间的按权重累加。假设我们将通道维当作特征维,将高和宽维度上的元素当成数据样本,**那么$1\times 1$卷积层的作用与全连接层等价**

<div align=center>
<img width="400" src="../../img/chapter05/5.3_conv_1x1.svg"/>
<img width="400" src="../img/chapter05/5.3_conv_1x1.svg"/>
</div>
<div align=center>图5.5 1x1卷积核的互相关计算。输入和输出具有相同的高和宽</div>

Expand Down
2 changes: 1 addition & 1 deletion docs/chapter05_CNN/5.4_pooling.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或平均池化。在二维最大池化中,池化窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某一位置时,窗口中的输入子数组的最大值即输出数组中相应位置的元素。

<div align=center>
<img width="300" src="../../img/chapter05/5.4_pooling.svg"/>
<img width="300" src="../img/chapter05/5.4_pooling.svg"/>
</div>
<div align=center>图5.6 池化窗口形状为 2 x 2 的最大池化</div>

Expand Down
Loading

0 comments on commit 0ce9709

Please sign in to comment.