Python中的最大池化-简介

时间:2020-02-23 14:42:19  来源:igfitidea点击:

欢迎使用Python最大池本教程。
在本教程中,我们将学习有关最大池化的所有知识。

什么是池化?

池化是一种减少要素图中要素数量的技术。
该操作涉及跨特征图应用二维过滤器。
这样做总结了地图区域中存在的特征。

什么是功能图?

特征图是在输入图像上应用卷积层后得到的输出。
卷积层是卷积神经网络(CNN)的构建块。
CNN在对象检测中的应用很受欢迎。

卷积层在整个图像上反复应用滤镜以检测特征。
该卷积层的输出是一个二维地图,称为特征地图。

但是为什么我们需要池化?接下来,让我们尝试回答这个问题。

为什么需要池化?

从卷积层生成的特征图的问题之一是它们对图像中特征的位置过于敏感。

一种解决方案是对特征图进行下采样,而这正是池化的功能。

通过减少特征数量,我们可以在某种程度上避免过度拟合的问题。
它还减少了模型训练中涉及的计算成本。

什么是Python中的最大池化?

有不同类型的池化技术。
最大池化就是其中之一。

在应用最大池化时,滤镜会从滤镜下覆盖的像素中选择最大值。
过滤器充当一个窗口,从中仅选择最大值作为输出。

通过以下示例可以了解最大池化的操作:

如果我们将图像数组设为:

[[2, 3, 4, 2], 
 [8, 5, 5, 1], 
 [6, 7, 9, 4], 
 [3, 1, 4, 5]]

在此阵列上应用大小为2X2,跨度为2的最大池过滤器。

我们填充得到以下输出:

[[8 5]
 [7 9]]

请注意,输出中的每个值如何都是原始数组中2X2窗口中的最大值。

python如何最大池化?

现在,我们已经了解了什么是最大池化,让我们学习如何为其编写python代码。

我们将使用Keras来实现最大池化。

在numpy数组上应用最大池的Python代码如下:

import numpy as np
from keras.models import Sequential 
from keras.layers import MaxPooling2D 

arr = np.array([[2, 3, 4, 2], 
                [8, 5, 5, 1], 
                [6, 7, 9, 4], 
                [3, 1, 4, 5]]) 

#reshaping
arr = image.reshape(1, 4, 4, 1) 

#define a max pooling layer
max_pool = MaxPooling2D(pool_size = 2, strides = 2)

#define a sequential model with just one pooling layer
model = Sequential( 
  [max_pool]) 

#get the output 
output = model.predict(arr) 

#print the output  
output = np.squeeze(output) 
print(output) 

我们得到的输出为:

[[8 5]
 [7 9]]

在此示例中,我们使用了一个小的数组来解释这一概念,但实际上图像的特征图可能会更大。