pytorch中的池化函数

news/2025/1/15 6:43:10/

PyTorch 提供了多种池化函数,用于对输入数据进行不同类型的池化操作。以下是一些常用的 PyTorch 池化函数:

  1. 平均池化(Average Pooling):

    • nn.AvgPool1d: 一维平均池化。
    • nn.AvgPool2d: 二维平均池化。
    • nn.AvgPool3d: 三维平均池化。
  2. 最大池化(Max Pooling):

    • nn.MaxPool1d: 一维最大池化。
    • nn.MaxPool2d: 二维最大池化。
    • nn.MaxPool3d: 三维最大池化。
  3. 全局池化(Global Pooling):

    • nn.AdaptiveAvgPool1d: 自适应一维平均池化,用于将整个输入降维为指定大小。
    • nn.AdaptiveAvgPool2d: 自适应二维平均池化,用于将整个输入降维为指定大小。
    • nn.AdaptiveAvgPool3d: 自适应三维平均池化,用于将整个输入降维为指定大小。
    • nn.AdaptiveMaxPool1d: 自适应一维最大池化,用于将整个输入降维为指定大小。
    • nn.AdaptiveMaxPool2d: 自适应二维最大池化,用于将整个输入降维为指定大小。
    • nn.AdaptiveMaxPool3d: 自适应三维最大池化,用于将整个输入降维为指定大小。

这些池化函数允许你对不同维度的输入数据进行平均池化或最大池化,并且有自适应版本,可以自动调整输入大小以满足指定的输出大小。选择适当的池化函数取决于你的应用和输入数据的维度。

本文主要包括以下内容:

  • 一.池化层的作用
  • 二.池化层的pytorch实现
    • 1.平均池化(Average Pooling)pytorch实现
      • (1)一维平均池化(nn.AvgPool1d)
      • (2)二维平均池化(nn.AvgPool2d)
      • (3)三维平均池化(nn.AvgPool3d)
    • 2.最大池化(Max Pooling)pytorch实现
      • (1)一维最大池化(nn.MaxPool1d)
      • (2)二维最大池化(nn.MaxPool2d)
      • (3)三维最大池化(nn.MaxPool3d)
    • 3.全局池化(Global Pooling)pytorch实现
      • (1)自适应一维平均池化(nn.AdaptiveAvgPool1d)
      • (2)自适应二维平均池化(nn.AdaptiveAvgPool2d)
      • (3)自适应三维平均池化(nn.AdaptiveAvgPool3d)
      • (4)自适应一维最大池化(AdaptiveMaxPool1d)
      • (5)自适应二维最大池化(AdaptiveMaxPool2d)
      • (6)自适应三维最大池化(AdaptiveMaxPool3d)

一.池化层的作用

不同类型的池化层在深度学习中具有不同的作用,它们通常用于特征提取、降维和提高模型的鲁棒性。以下是不同池化层的作用:

  1. 平均池化(Average Pooling)

    • 作用:平均池化层计算池化区域内元素的平均值,并将结果作为输出。它有助于减少特征图的尺寸,同时保留一定程度的特征信息。
    • 用途:常用于图像分类和一些简单的特征提取任务。
  2. 最大池化(Max Pooling)

    • 作用:最大池化层计算池化区域内元素的最大值,并将最大值作为输出。它有助于保留图像中的主要特征,提高对平移和小尺度变化的鲁棒性。
    • 用途:常用于图像分类、物体检测和卷积神经网络中的特征提取。
  3. 全局池化(Global Pooling)

    • 作用:全局池化层通过对整个特征图进行池化操作,将特征图降维为一个单一的值或向量。它有助于捕获全局特征,减少模型参数。
    • 用途:常用于图像分类任务,用于将卷积特征映射到分类层之前。
  4. 自适应池化(Adaptive Pooling)

    • 作用:自适应池化层根据指定的输出大小,动态调整池化核的大小以适应不同尺寸的输入特征图。这使得它能够处理不同大小的输入。
    • 用途:常用于需要对输入尺寸不敏感的任务,如图像分类、目标检测和分割。

总之,不同池化层在深度学习中的作用是对输入特征进行不同的处理和降维操作,以提取重要信息并减少模型的计算复杂性。选择合适的池化层取决于你的任务和输入数据的性质。最大池化常用于特征提取,全局池化用于全局特征捕获,自适应池化用于处理不同尺寸的输入。

以下是各种池化函数的示例用法,包括一维、二维和自适应池化。示例中的输入数据和参数可能需要根据你的具体情况进行调整。

二.池化层的pytorch实现

1.平均池化(Average Pooling)pytorch实现

(1)一维平均池化(nn.AvgPool1d)

不同池化函数的构造方式在 PyTorch 中基本相似,它们都是基于 nn.Module 类的子类,并具有一些特定的参数。这些池化函数的构造函数通常需要指定池化核的大小 (kernel_size),步幅 (stride) 和填充 (padding),以控制池化操作的行为。对于自适应池化,你需要指定目标输出大小 (output_size),而不需要手动设置核大小和步幅。

函数构成:

avg_pool = nn.AvgPool1d(kernel_size, stride, padding)

示例:

import torch
import torch.nn as nn# 创建一个一维输入张量
x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])# 创建一个一维平均池化层,指定池化核大小为2
avg_pool = nn.AvgPool1d(kernel_size=2)# 对输入进行一维平均池化
output = avg_pool(x.unsqueeze(0).unsqueeze(0))print(output)  # 输出平均池化后的结果

(2)二维平均池化(nn.AvgPool2d)

函数构成:

avg_pool = nn.AvgPool2d(kernel_size, stride, padding)

示例:

import torch
import torch.nn as nn# 创建一个二维输入张量(4x4的图像)
x = torch.tensor([[1.0, 2.0, 3.0, 4.0],[5.0, 6.0, 7.0, 8.0],[9.0, 10.0, 11.0, 12.0],[13.0, 14.0, 15.0, 16.0]], dtype=torch.float32)# 创建一个二维平均池化层,指定池化核大小为2x2
avg_pool = nn.AvgPool2d(kernel_size=2)# 对输入进行二维平均池化
output = avg_pool(x.unsqueeze(0).unsqueeze(0))print(output)  # 输出平均池化后的结果

在上面的示例中,我们使用了一个4x4的二维输入张量,并创建了一个2x2的池化核进行平均池化。

(3)三维平均池化(nn.AvgPool3d)

函数构成:

avg_pool = nn.AvgPool3d(kernel_size, stride, padding)

示例:

import torch
import torch.nn as nn# 创建一个三维输入张量(4x4x4的数据)
x = torch.randn(1, 1, 4, 4, 4)  # 随机生成一个大小为4x4x4的三维张量# 创建一个三维平均池化层,指定池化核大小为2x2x2
avg_pool = nn.AvgPool3d(kernel_size=2)# 对输入进行三维平均池化
output = avg_pool(x)print(output)  # 输出平均池化后的结果

在上面的示例中,我们使用了一个随机生成的4x4x4的三维输入张量,并创建了一个2x2x2的池化核进行平均池化。

这些示例演示了如何使用PyTorch的nn.AvgPool2dnn.AvgPool3d函数对二维和三维数据进行平均池化操作。你可以根据你的需求自定义输入数据和池化核的大小。

2.最大池化(Max Pooling)pytorch实现

(1)一维最大池化(nn.MaxPool1d)

函数构成:

max_pool = nn.MaxPool1d(kernel_size, stride, padding)

示例:

import torch
import torch.nn as nn# 创建一个一维输入张量
x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])# 创建一个一维最大池化层,指定池化核大小为2
max_pool = nn.MaxPool1d(kernel_size=2)# 对输入进行一维最大池化
output = max_pool(x.unsqueeze(0).unsqueeze(0))print(output)  # 输出最大池化后的结果

(2)二维最大池化(nn.MaxPool2d)

函数构成:

max_pool = nn.MaxPool2d(kernel_size, stride, padding)

示例:

import torch
import torch.nn as nn# 创建一个二维输入张量(3x3的图像)
x = torch.tensor([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0],[7.0, 8.0, 9.0]])# 创建一个二维最大池化层,指定池化核大小为2x2
max_pool = nn.MaxPool2d(kernel_size=2)# 对输入进行二维最大池化
output = max_pool(x.unsqueeze(0).unsqueeze(0))print(output)  # 输出最大池化后的结果

(3)三维最大池化(nn.MaxPool3d)

函数构成:

max_pool = nn.MaxPool3d(kernel_size, stride, padding)

示例:

import torch
import torch.nn as nn# 创建一个随机的三维输入张量(2x2x2x2的数据)
x = torch.randn(1, 1, 2, 2, 2)  # 随机生成一个大小为2x2x2x2的三维张量# 创建一个三维最大池化层,指定池化核大小为2x2x2
max_pool = nn.MaxPool3d(kernel_size=2)# 对输入进行三维最大池化
output = max_pool(x)print(output)  # 输出最大池化后的结果

在这个示例中,我们创建了一个大小为 2x2x2x2 的随机三维输入张量 x,然后使用 nn.MaxPool3d 创建了一个三维最大池化层,指定了池化核大小为 2x2x2。最后,我们对输入张量进行了三维最大池化操作,并打印了池化后的结果。

这个示例演示了如何使用 PyTorch 进行三维最大池化操作,你可以根据你的需求自定义输入数据和池化核的大小。

以上示例展示了各种池化函数的用法,你可以根据需要选择适合你的任务和输入数据维度的池化函数,并调整参数以满足具体要求。

3.全局池化(Global Pooling)pytorch实现

以下是自适应一维、二维和三维平均池化的示例:

(1)自适应一维平均池化(nn.AdaptiveAvgPool1d)

函数构成:

adaptive_avg_pool = nn.AdaptiveAvgPool1d(output_size)

示例:

import torch
import torch.nn as nn# 创建一个一维输入张量
x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])# 创建一个自适应一维平均池化层,指定目标输出大小为3
adaptive_avg_pool = nn.AdaptiveAvgPool1d(output_size=3)# 对输入进行自适应一维平均池化
output = adaptive_avg_pool(x.unsqueeze(0).unsqueeze(0))print(output)  # 输出自适应平均池化后的结果

在上面的示例中,我们使用了一个自适应一维平均池化层,指定了目标输出大小为 3。

(2)自适应二维平均池化(nn.AdaptiveAvgPool2d)

函数构成:

adaptive_avg_pool = nn.AdaptiveAvgPool2d(output_size)

示例:

import torch
import torch.nn as nn# 创建一个二维输入张量(4x4的图像)
x = torch.tensor([[1.0, 2.0, 3.0, 4.0],[5.0, 6.0, 7.0, 8.0],[9.0, 10.0, 11.0, 12.0],[13.0, 14.0, 15.0, 16.0]])# 创建一个自适应二维平均池化层,指定目标输出大小为 (2, 2)
adaptive_avg_pool = nn.AdaptiveAvgPool2d(output_size=(2, 2))# 对输入进行自适应二维平均池化
output = adaptive_avg_pool(x.unsqueeze(0).unsqueeze(0))print(output)  # 输出自适应平均池化后的结果

在上面的示例中,我们使用了一个自适应二维平均池化层,指定了目标输出大小为 (2, 2)。

(3)自适应三维平均池化(nn.AdaptiveAvgPool3d)

函数构成:

adaptive_avg_pool = nn.AdaptiveAvgPool3d(output_size)

示例:

import torch
import torch.nn as nn# 创建一个三维输入张量(4x4x4的数据)
x = torch.randn(1, 1, 4, 4, 4)  # 随机生成一个大小为4x4x4的三维张量# 创建一个自适应三维平均池化层,指定目标输出大小为 (2, 2, 2)
adaptive_avg_pool = nn.AdaptiveAvgPool3d(output_size=(2, 2, 2))# 对输入进行自适应三维平均池化
output = adaptive_avg_pool(x)print(output)  # 输出自适应平均池化后的结果

在上面的示例中,我们使用了一个自适应三维平均池化层,指定了目标输出大小为 (2, 2, 2)。

这些示例演示了如何使用 PyTorch 的 nn.AdaptiveAvgPool1dnn.AdaptiveAvgPool2dnn.AdaptiveAvgPool3d 函数对一维、二维和三维数据进行自适应平均池化操作,我们可以根据需求自定义输入数据和目标输出大小。

以下是分别使用自适应一维、二维和三维最大池化的示例:

(4)自适应一维最大池化(AdaptiveMaxPool1d)

函数构成:

adaptive_max_pool = nn.AdaptiveMaxPool1d(output_size)

这些函数构成中,output_size 是一个元组,用于指定目标输出的大小,这将决定池化窗口的大小。自适应池化会根据输出大小自动调整池化窗口,以使输出尺寸与指定的 output_size 匹配。这使得池化操作能够适应不同输入数据的尺寸,而不需要显式指定池化窗口的大小。

示例:

import torch
import torch.nn as nn# 创建一个一维输入张量(长度为 8)
x = torch.randn(1, 1, 8)  # 随机生成一个长度为 8 的一维张量# 创建一个自适应一维最大池化层,指定目标输出大小为 4
adaptive_max_pool = nn.AdaptiveMaxPool1d(output_size=4)# 对输入进行自适应一维最大池化
output = adaptive_max_pool(x)print(output)  # 输出自适应最大池化后的结果

(5)自适应二维最大池化(AdaptiveMaxPool2d)

函数构成:

adaptive_max_pool = nn.AdaptiveMaxPool2d(output_size)

示例:

import torch
import torch.nn as nn# 创建一个二维输入张量(4x4的数据)
x = torch.randn(1, 1, 4, 4)  # 随机生成一个大小为 4x4 的二维张量# 创建一个自适应二维最大池化层,指定目标输出大小为 (2, 2)
adaptive_max_pool = nn.AdaptiveMaxPool2d(output_size=(2, 2))# 对输入进行自适应二维最大池化
output = adaptive_max_pool(x)print(output)  # 输出自适应最大池化后的结果

(6)自适应三维最大池化(AdaptiveMaxPool3d)

函数构成:

adaptive_max_pool = nn.AdaptiveMaxPool3d(output_size)

示例:

import torch
import torch.nn as nn# 创建一个三维输入张量(4x4x4的数据)
x = torch.randn(1, 1, 4, 4, 4)  # 随机生成一个大小为 4x4x4 的三维张量# 创建一个自适应三维最大池化层,指定目标输出大小为 (2, 2, 2)
adaptive_max_pool = nn.AdaptiveMaxPool3d(output_size=(2, 2, 2))# 对输入进行自适应三维最大池化
output = adaptive_max_pool(x)print(output)  # 输出自适应最大池化后的结果

这些示例演示了如何使用自适应最大池化层在不指定池化窗口大小的情况下,根据目标输出大小自动调整池化窗口大小进行池化操作。


http://www.ppmy.cn/news/1151632.html

相关文章

Linux友人帐之系统管理与虚拟机相关

一、虚拟机相关操作 1.1虚拟机克隆 虚拟机克隆是指将一个已经安装好的虚拟机复制出一个或多个完全相同的副本,包括虚拟机的配置、操作系统、应用程序等,从而节省安装和配置的时间和资源。 虚拟机克隆的主要用途有: 创建多个相同或相似的虚拟…

走进Spark

什么是Spark 是一个基于内存的,用于大规模数据处理(离线计算、实时计算、快速查询(交互式查询))的统一分析引擎,因为是基于内存的所以可以更快的完成任务 离线计算:离线计算一般存储在HDFS中使用MapReduce或…

电商数据接口平台1688阿里巴巴获得搜索词推荐获取商品详情数据

1688.item_search_suggest-获得搜索词推荐 公共参数 请求地址: 注册请求接入调用key 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[ite…

uni-app:本地缓存的使用

uni-app 提供了多种方法用于本地缓存的操作。下面是一些常用的 uni-app 本地缓存方法: uni.setStorageSync(key, data): 同步方式将数据存储到本地缓存中,可以使用对应的 key 来获取该数据。 uni.setStorage({key, data}): 异步方式将数据存储到本地缓存…

【小巧玲珑】文件太大,怎么办?分卷压缩技术了解下,这才是压缩技术

【小巧玲珑】文件太大,怎么办?分卷压缩技术了解下,这才是压缩技术 1、痛点2、场景重现2.1 jar包2.1 ZIP压缩 3、压缩步骤3.1 新建压缩文件3.2 压缩结果 4、解压步骤5、效果6、jar压缩算法 1、痛点 通过浏览器客户端访问云服务,文…

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试,但为了提升自己的技术,多学习一点还是没有坏处的,废话不多说了,目前主流的webUI测试框架应该还是selenium,考虑到可维护性、拓展性、复用性等,我们采用PO模式去写我…

C++学习——对象数组、成员对象与封闭类

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、对象数组 对象数组,即数组的每个元素都是某个类的对象。 1、对象数组中的每个元素都需要用构造函数初始化,具体哪些元素用哪些构造函数初始化&#xff0c…

Linux网络基础知识全面总结

文章目录 linux网络基础知识1.1 IP地址和子网掩码1.2 网关和路由1.3 域名系统 (DNS)1.4 端口和协议 Linux网络配置2.1 ifconfig命令2.2 网络接口配置文件2.3 DHCP自动获取IP地址2.4 静态IP地址配置2.5 网络重启和应用配置3. 网络工具和命令3.1 ping命令3.2 traceroute和mtr命令…