了解有关最大池化特征提取的更多信息。
简介
在第二课中,我们开始讨论卷积神经网络(convnet)的基础如何进行特征提取。我们了解了这个过程中的前两个操作是在带有 relu 激活的 Conv2D 层中进行的。
在这一课中,我们将看一下这个序列中的第三个(也是最后一个)操作:通过最大池化进行压缩,这在 Keras 中是通过 MaxPool2D 层完成的。
通过最大池化进行压缩
在我们之前的模型中添加压缩步骤,将得到以下结果:
In [1]:
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Conv2D(filters=64, kernel_size=3), # activation is None
layers.MaxPool2D(pool_size=2),
# More layers follow
])
MaxPool2D 层很像 Conv2D 层,只不过它使用一个简单的最大函数而不是内核,其中 pool_size 参数类似于 kernel_size。然而,MaxPool2D 层没有像卷积层在其内核中那样的可训练权重。
让我们再看一下上一课中的提取图。记住,MaxPool2D 是 Condense 步骤。
注意,应用 ReLU 函数(Detect)后,特征图最终会有很多“死区”,即只包含 0 的大面积区域(图像中的黑色区域)。如果让这些 0 激活值通过整个网络,将会增加模型的大小,而不会添加太多有用的信息。相反,我们希望压缩特征图,只保留最有用的部分——特征本身。
这实际上就是最大池化所做的。最大池化在原始特征图的激活块中取最大的激活值。
当在 ReLU 激活后应用时,它具有“强化”特征的效果。池化步骤增加了活动像素与零像素的比例。
示例 - 应用最大池化
让我们在第二课中的示例中添加“压缩”步骤。这个下一个隐藏单元将带我们回到我们之前的位置。
In [2]:
import tensorflow as tf
import matplotlib.pyplot as plt
import warnings
plt.rc('figure', autolayout=True)
plt.rc(</