一文弄清池化层(pooling)的作用

简介: 一文弄清池化层(pooling)的作用

池化层是什么?

池化层的本质是一个下采样,数据经过卷积之后,维度会越来越高,在特征图没有较大改变的情况下,参数量却上涨的很快,造成模型的训练困难和过拟合现象,所以将池化层置于连续的卷积层之间,以压缩数据量和参数以减少过度拟合,对卷积层输出的特征图进行特征选择。池化层的具体操作是将一个像素点及其周围的像素点进行聚合统计,缩减提取特征图的尺寸,减少最终全连接层中的参数数量,加快模型的计算速度。常见的池化层类型有:最大池化、均值池化、空间金字塔池化等。如图所示,其中,选择某个像素点相邻区域内的最大值是最大池化操作;计算某个像素点相邻区域内的平均值是均值池化操作。

池化的作用:

       池化操作后的结果相比其输入缩小了。池化层的引入是仿照人的视觉系统对视觉输入对象进行降维和抽象。在卷积神经网络过去的工作中,研究者普遍认为池化层有如下三个功效:


1.特征不变性:池化操作是模型更加关注是否存在某些特征而不是特征具体的位置。

其中不变形性包括,平移不变性、旋转不变性和尺度不变性。


       平移不变性是指输出结果对输入对小量平移基本保持不变

       例如,输入为(1, 5, 3), 最大池化将会取5,如果将输入右移一位得到(0, 1, 5),输出的结果仍将为5。对伸缩的不变形,如果原先的神经元在最大池化操作后输出5,那么经过伸缩(尺度变换)后,最大池化操作在该神经元上很大概率的输出仍是5.


2.特征降维(下采样):池化相当于在空间范围内做了维度约减,从而使模型可以抽取更加广范围的特征。同时减小了下一层的输入大小,进而减少计算量和参数个数。


3.在一定程度上防止过拟合,更方便优化。


  实现非线性(类似relu)。

  扩大感受野。

示例代码:

import numpy as np
 
# 定义池化层类
class PoolingLayer:
    def __init__(self, pool_size=(2, 2), stride=2, mode='max'):
        self.pool_height, self.pool_width = pool_size
        self.stride = stride
        self.mode = mode
 
    def forward(self, input):
        batch_size, input_height, input_width, num_channels = input.shape
        output_height = (input_height - self.pool_height) // self.stride + 1
        output_width = (input_width - self.pool_width) // self.stride + 1
        pooled_output = np.zeros((batch_size, output_height, output_width, num_channels))
 
        for b in range(batch_size):
            for c in range(num_channels):
                for i in range(output_height):
                    for j in range(output_width):
                        if self.mode == 'max':
                            pooled_output[b, i, j, c] = np.max(input[b, i*self.stride:i*self.stride+self.pool_height, 
                                                                    j*self.stride:j*self.stride+self.pool_width, c])
                        elif self.mode == 'average':
                            pooled_output[b, i, j, c] = np.mean(input[b, i*self.stride:i*self.stride+self.pool_height, 
                                                                      j*self.stride:j*self.stride+self.pool_width, c])
        return pooled_output
 
# 测试池化层
if __name__ == "__main__":
    # 创建输入特征图
    input_feature_map = np.random.rand(1, 4, 4, 3)  # 输入特征图大小为4x4,通道数为3,一个样本
 
    # 创建池化层对象
    pooling_layer = PoolingLayer(pool_size=(2, 2), stride=2, mode='max')
 
    # 进行前向传播
    pooled_output = pooling_layer.forward(input_feature_map)
 
    # 输出池化后的特征图
    print("池化后的特征图:")
    print(pooled_output)
相关文章
|
机器学习/深度学习 搜索推荐 算法
【王喆-推荐系统】模型篇-(task5)wide&deep模型
Wide&Deep是工业界中有巨大影响力的模型,如果直接翻译成中文是宽和深的模型,其模型结构如下所示:wide和deep让模型兼具逻辑回归和深度神经网络的特点。
2395 0
【王喆-推荐系统】模型篇-(task5)wide&deep模型
|
缓存 安全 编译器
【C语言】volatile 关键字详解
`volatile` 关键字在 C 语言中用于防止编译器对某些变量进行优化,确保每次访问该变量时都直接从内存中读取最新的值。它主要用于处理硬件寄存器和多线程中的共享变量。然而,`volatile` 不保证操作的原子性和顺序,因此在多线程环境中,仍然需要适当的同步机制来确保线程安全。
895 2
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
3428 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
|
机器学习/深度学习 算法
【机器学习】过拟合和欠拟合怎么判断,如何解决?(面试回答)
本文介绍了如何通过观察训练误差和验证误差来判断模型是否出现过拟合或欠拟合,并提供了相应的解决方案,包括增加数据、调整模型复杂度、使用正则化技术等。
1994 1
|
编解码 计算机视觉
YOLOv11改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv11-T !!! 最新的发文热点
YOLOv11改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv11-T !!! 最新的发文热点
1999 7
YOLOv11改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv11-T !!! 最新的发文热点
|
机器学习/深度学习 算法
全连接层那些事(Fully Connected Layer)
全连接层那些事(Fully Connected Layer)
|
机器学习/深度学习 人工智能 算法
《C++与 BLAS、LAPACK:加速人工智能算法的线性代数秘籍》
本文探讨了线性代数在人工智能中的核心地位及其对算法性能的影响,重点介绍了 C++ 中的 BLAS 和 LAPACK 库。这些库通过高效的基础线性代数运算和高级矩阵操作,显著提升了神经网络、数据降维和推荐系统等算法的计算效率。文章还详细讲解了如何在 C++ 项目中集成和优化这些库,以实现更好的性能。
561 19
|
传感器 消息中间件 人工智能
一套基本的具身智能技术流程是如何实现的
Embodied Intelligence作为一种将感知、决策与执行相结合的前沿技术,正在引领机器人技术迈向新的高度。具身智能不仅要求机器人具备理解和处理复杂环境的能力,还需赋予其自主决策和执行任务的能力。本文将深入探讨如何将LLM和多模态大模型与机器人技术相结合,构建一套完整的具身智能技术流程。本文参考了同济子豪兄的部分工作,TsingtaoAI团队对整体构建做了一部分拓展和延伸。
2473 3
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
24073 0