pytorch中的池化函数

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.mzph.cn/news/103847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VR全景营销颠覆传统营销,让消费者身临其境

随着VR的普及,各种VR产品、功能开始层出不穷,并且在多个领域都有落地应用,例如文旅、景区、酒店、餐饮、工厂、地产、汽车等,在这个“内容为王”的时代,VR全景展示也是一种新的内容表达方式。 VR全景营销让消费者沉浸式…

postman 获取HTML 里name=token 的值

<input type"hidden" name"token" value"LT-93387-t7KaInf3Fox2Hd0F24eHpBFg7BcNAp" /> 接口返回的HTML&#xff0c;可以使用cheerio获取具体的值&#xff0c;如下&#xff1a; //引入cheerio const $ cheerio.load(responseBody) //解…

计算机毕业设计选什么题目好?springboot 职业技术学院图书管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【深度学习实验】卷积神经网络(八):使用深度残差神经网络ResNet完成图片多分类任务

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集&#xff08;CIFAR10Dataset&#xff09; a. read_csv_labels&#xff08;&#xff09; b. CIFAR10Dataset 2. 构建模型&#xff08;FeedForward&#x…

SQL开发笔记之专栏介绍

Sql是用于访问和处理数据库的标准计算机语言&#xff0c;使用SQL访问和处理数据系统中的数据&#xff0c;这类数据库包括&#xff1a;Mysql、PostgresSql、Oracle、Sybase、DB2等等&#xff0c;数据库无非围绕着“增删改查”的核心业务进行开发。并且目前绝大多数的后端程序开发…

构建精致 Chrome 插件:开箱即用的 TypeScript 模板 | 开源日报 No.51

tonsky/FiraCode Stars: 72.7k License: OFL-1.1 Fira Code 是一种免费的等宽字体&#xff0c;具有编程连字符。 Fira Code 提供了丰富多样的箭头和标点符号调整功能。Fira Code 支持各种不同的字符变体、风格集和其他字体特性&#xff0c;以满足用户个性化需求。Fira Code …

【Hello Algorithm】暴力递归到动态规划(一)

暴力递归到动态规划&#xff08;一&#xff09; 斐波那契数列的动态规划机器人走路初级递归初级动态规划动态规划 先后选牌问题初级递归初级动态规划动态规划 我们可以一句话总结下动态规划 动态规划本质是一种以空间换时间的行为 如果你发现有重复调用的过程 在经过一次之后把…

windows频繁更新问题解决方案

解决方案&#xff1a;将更新策略增加到无穷大 1.windowsr 输入regedit 2.找到&#xff1a;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 3.右键新建DWORD32 4.命名&#xff1a;FlightSettingsMaxPauseDays 5.双击&#xff1a;数值数据改为4321 基数&#…

Spring是什么?为什么要使用Spring?

目录 前言 一、Spring是什么&#xff1f; 1.1 轻量级 1.2 JavaEE的解决方案 二、为什么要使用Spring 2.1 传统方式完成业务逻辑 2.2 使用Spring模式完成业务逻辑 三、为什么使用Spring&#xff1f; 前言 本文主要介绍Spring是什么&#xff0c;并且解释为何要去使用Spring&…

vite + vu3 + ts 项目,npm run build 报错

新建了vite 项目&#xff0c;build的时候报错&#xff1a; npm ERR! demo10.0.0 build: vue-tsc && vite build npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the demo10.0.0 build script.npm ERR! This is probably not a problem with npm. There is like…

【Vue Router 3】入门

简介 Vue Router让SPA&#xff08;Single-page Application&#xff09;的构建更加容易。 Vue Router的功能&#xff1a; 嵌套的路由/视图映射模块化的、基于组件的router配置route params, query, wildcards由Vue过渡系统支持的视图过渡效果细粒度&#xff08;fine-grained…

c语言练习87:合并两个有序数组

合并两个有序数组 合并两个有序数组https://leetcode.cn/problems/merge-sorted-array/ 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff…

动态资源平衡:主流虚拟化 DRS 机制分析与 SmartX 超融合的实现优化

资源的动态调度是虚拟化软件&#xff08;或超融合软件&#xff09;中的一项重要功能&#xff0c;主要指在虚拟化集群中&#xff0c;通过动态改变虚拟机的分布&#xff0c;达到优化集群可用性的目标。这一功能以 VMware vSphere 发布的 Distributed Resource Scheduler&#xff…

day62:ARMday9,I2c总线通信

作业&#xff1a;按键中断实现LED1、蜂鸣器、风扇 key_in.c: #include "key_in.h"void gpio_init() {//RCC使能//GPIOERCC->MP_AHB4ENSETR | (0x1<<4);//GPIOBRCC->MP_AHB4ENSETR | (0x1<<1);//PE10、PB6、PE9输出模式GPIOE->MODER & ~(0…

AutoGPT:让 AI 帮你完成任务事情 | 开源日报 No.54

Significant-Gravitas/AutoGPT Stars: 150.4k License: MIT AutoGPT 是开源 AI 代理生态系统的核心工具包。它采用模块化和可扩展的框架&#xff0c;使您能够专注于以下方面&#xff1a; 构建 - 为惊人之作打下基础。测试 - 将您的代理调整到完美状态。查看 - 观察进展成果呈…

基于SpringBoot的网上订餐系统

基于SpringBoot的网上订餐系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;用户、管理员管理员&#xff1a;登录、个人中心、会员管理、…

《DevOps 精要:业务视角》- 读书笔记(六)

DevOps 精要:业务视角&#xff08;六&#xff09; 第6章 结语 第6章 结语 DevOps有自己的起源以及存在的前提。到2010年&#xff0c;随着条件成熟&#xff0c;形成了对信息科技中开发与运维进行管理的需求以及可能性。这引发了DevOps运动的兴起。 正如众多布道师经常提及的&a…

大数据分析实践 | 过滤和抽样

文章目录 &#x1f4da;相关函数&#x1f407;数据读取和写入&#xff1a;read_csv和to_csv&#x1f407;数据过滤&#xff1a;pandas.DataFrame.loc&#x1f407;抽样&#xff1a;pandas.DataFrame.sample&#x1f407;删除缺失数据&#xff1a;dropha&#x1f407;添加元素&a…

TensorFlow入门(十二、分布式训练)

1、按照并行方式来分 ①模型并行 假设我们有n张GPU,不同的GPU被输入相同的数据,运行同一个模型的不同部分。 在实际训练过程中,如果遇到模型非常庞大,一张GPU不够存储的情况,可以使用模型并行的分布式训练,把模型的不同部分交给不同的GPU负责。这种方式存在一定的弊端:①这种方…

sklearn处理离散变量的问题——以决策树为例

最近做项目遇到的数据集中&#xff0c;有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】&#xff0c;但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候&#xff08;无论是ID3、C4.5还是CART&#xff09;&am…