pytorch--Pooling layers

news2024/12/26 11:15:26

文章目录

    • 1.torch.nn.MaxPool1d()
    • 2.torch.nn.MaxPool2d
    • 3.torch.nn.AvgPool2d()
    • 4.torch.nn.FractionalMaxPool2d()
    • 5.torch.nn.AdaptiveMaxPool2d()
    • 6.torch.nn.AdaptiveAvgPool2d()


1.torch.nn.MaxPool1d()

  torch.nn.MaxPool1d() 是 PyTorch 库中的一个类,用于在神经网络中执行一维最大池化操作。最大池化是卷积神经网络(CNN)中常用的一种降采样操作,它可以减小输入的空间维度,并保留最显著的特征。一维最大池化操作主要应用于处理具有时间序列或一维信号的数据。例如,对于音频信号的处理或文本数据的卷积操作,可以使用一维最大池化来减小输入的长度。

"""
参数:

kernel_size:一个整数或元组,用于指定最大池化窗口的大小。如果是一个整数,表示池化窗口的宽度为 kernel_size,高度为 1。如果是一个元组,可以分别指定窗口的宽度和高度。默认值为 1。
stride:一个整数或元组,用于指定池化操作的步幅(stride)。它控制在应用池化窗口时的滑动步长。如果未提供,将默认使用 kernel_size 的值,即非重叠池化。默认值为 kernel_size。
padding:一个整数或元组,用于指定在输入的两侧添加的零填充的数量。填充有助于在应用池化操作时保持输入的空间维度。默认值为 0,表示不进行填充。
dilation:一个整数或元组,用于指定核元素之间的间距(dilation)。它控制池化窗口元素的步幅,有效地增加感受野。默认值为 1,表示没有间距。
return_indices:一个布尔值,指示是否返回最大值的索引。如果设置为 True,则除了池化的输出之外,还会返回最大值的索引。默认值为 False。
输入:

输入的形状应为 (batch_size, channels, sequence_length),其中 batch_size 是输入数据的批量大小,channels 是输入数据的通道数,sequence_length 是输入数据的序列长度。
输出:

输出的形状为 (batch_size, channels, sequence_length_out),其中 sequence_length_out 是经过池化操作后的序列长度。输出的通道数与输入的通道数相同。
"""

在这里插入图片描述

import torch
import torch.nn as nn

# 创建一个输入大小为 (batch_size=1, channels=1, sequence_length=10) 的张量
input_tensor = torch.tensor([[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]], dtype=torch.float32)

# 创建一个一维最大池化层,池化窗口大小为 2,步幅为 2
maxpool = nn.MaxPool1d(kernel_size=2, stride=2)

# 应用最大池化操作
output = maxpool(input_tensor)

print(output)
tensor([[[ 2.,  4.,  6.,  8., 10.]]])

2.torch.nn.MaxPool2d

torch.nn.MaxPool2d() 是 PyTorch 库中的一个类,用于在神经网络中执行二维最大池化操作。最大池化是卷积神经网络(CNN)中常用的一种降采样操作,它可以减小输入的空间维度,并保留最显著的特征。二维最大池化操作主要应用于处理图像数据。它在每个池化窗口内找到最大值,并将其作为输出,以减小图像的尺寸。这有助于提取图像中的重要特征并减少计算量。

在这里插入图片描述

import torch
import torch.nn as nn

# 创建一个输入大小为 (batch_size=1, channels=1, height=4, width=4) 的张量
input_tensor = torch.tensor([[[[1, 2, 3, 4],
                               [5, 6, 7, 8],
                               [9, 10, 11, 12],
                               [13, 14, 15, 16]]]], dtype=torch.float32)

# 创建一个二维最大池化层,池化窗口大小为 2x2,步幅为 2
maxpool = nn.MaxPool2d(kernel_size=2, stride=2)

# 应用最大池化操作
output = maxpool(input_tensor)

print(output)
tensor([[[[ 6.,  8.],
          [14., 16.]]]])

3.torch.nn.AvgPool2d()

torch.nn.AvgPool2d() 是 PyTorch 库中的一个类,用于在神经网络中执行二维平均池化操作。平均池化操作将输入的特征图分割成固定大小的窗口,并计算每个窗口内元素的平均值。
在这里插入图片描述

"""
参数:

kernel_size:整数或元组,用于指定平均池化窗口的大小。如果是一个整数,表示窗口的宽度和高度都为 kernel_size。如果是一个元组,可以分别指定窗口的宽度和高度。默认值为 2。
stride:整数或元组,用于指定平均池化操作的步幅(stride)。它控制在应用平均池化窗口时的滑动步长。默认值为 kernel_size。
padding:整数或元组,用于指定在输入的四周添加的零填充的数量。填充有助于在应用平均池化操作时保持输入的空间维度。默认值为 0,表示不进行填充。
ceil_mode:布尔值,表示在计算输出形状时是否使用 ceil 函数代替 floor 函数。当设置为 True 时,使用 ceil 函数;当设置为 False 时,使用 floor 函数。该参数主要影响在进行池化操作时是否向上取整来计算输出的尺寸。
输入:

输入的形状应为 (batch_size, channels, height, width),其中 batch_size 是输入数据的批量大小,channels 是输入数据的通道数,height 是输入数据的高度,width 是输入数据的宽度。
输出:

输出的形状为 (batch_size, channels, height_out, width_out),其中 height_out 和 width_out 是经过平均池化操作后的高度和宽度。输出的通道数与输入的通道数相同。
"""
import torch
import torch.nn as nn

# 创建一个输入大小为 (batch_size=1, channels=1, height=4, width=4) 的张量
input_tensor = torch.tensor([[[[1, 2, 3, 4],
                               [5, 6, 7, 8],
                               [9, 10, 11, 12],
                               [13, 14, 15, 16]]]], dtype=torch.float32)

# 创建一个二维平均池化层,池化窗口大小为 2x2,步幅为 2
avgpool = nn.AvgPool2d(kernel_size=2, stride=2)
# 应用平均池化操作
output = avgpool(input_tensor)

print(output)
tensor([[[[ 3.5000,  5.5000],
          [11.5000, 13.5000]]]])

4.torch.nn.FractionalMaxPool2d()

nn.FractionalMaxPool2d() 是 PyTorch 中的一个类,用于执行分数最大池化操作。分数最大池化是一种池化方法,它可以在非整数位置上对输入进行池化操作,从而提供更大的灵活性。

"""
参数:

kernel_size:整数或元组,用于指定池化窗口的大小。如果是一个整数,表示窗口的宽度和高度都为 kernel_size。如果是一个元组,可以分别指定窗口的宽度和高度。
output_size:整数或元组,用于指定输出的大小。如果是一个整数,表示输出的宽度和高度都为 output_size。如果是一个元组,可以分别指定输出的宽度和高度。如果提供了 output_size,则会忽略 kernel_size。
output_ratio:浮点数或元组,用于指定输出的比例。如果是一个浮点数,表示输出相对于输入的比例。如果是一个元组,可以分别指定宽度和高度的比例。如果提供了 output_ratio,则会忽略 kernel_size 和 output_size。
return_indices:布尔值,表示是否返回池化操作的索引。如果为 True,则除了池化结果之外,还会返回每个池化区域的索引。默认值为 False。
输入:

输入的形状应为 (batch_size, channels, height, width),其中 batch_size 是输入数据的批量大小,channels 是输入数据的通道数,height 是输入数据的高度,width 是输入数据的宽度。
输出:

输出的形状取决于输入的形状和参数设置。如果 return_indices 设置为 False,则输出的形状为 (batch_size, channels, height_out, width_out),其中 height_out 和 width_out 是经过分数最大池化操作后的高度和宽度。如果 return_indices 设置为 True,则输出的形状为 (batch_size, channels, height_out, width_out, 3),其中最后一个维度包含了分数最大池化操作的结果和索引。
"""
import torch
import torch.nn as nn

# 创建一个输入大小为 (batch_size=1, channels=1, height=6, width=6) 的张量
input_tensor = torch.tensor([[[[1, 2, 3, 4, 5, 6],
                               [7, 8, 9, 10, 11, 12],
                               [13, 14, 15, 16, 17, 18],
                               [19, 20, 21, 22, 23, 24],
                               [25, 26, 27, 28, 29, 30],
                               [31, 32, 33, 34, 35, 36]]]], dtype=torch.float32)

# 创建一个分数最大池化层,指定输出大小为 (height_out=3, width_out=3)
fractional_maxpool = nn.FractionalMaxPool2d(kernel_size=2, output_size=(3, 3))

# 应用分数最大池化操作
output = fractional_maxpool(input_tensor)

print("Input shape:", input_tensor.shape)
print("Output shape:", output.shape)
print("Output tensor:")
print(output)
Input shape: torch.Size([1, 1, 6, 6])
Output shape: torch.Size([1, 1, 3, 3])
Output tensor:
tensor([[[[ 8., 10., 12.],
          [20., 22., 24.],
          [32., 34., 36.]]]])

5.torch.nn.AdaptiveMaxPool2d()

torch.nn.AdaptiveMaxPool2d() 是 PyTorch 中用于执行自适应最大池化操作的模块。与传统的最大池化操作不同,自适应最大池化允许指定输出的大小而不是固定的池化窗口大小。这样可以适应不同输入尺寸的情况。

torch.nn.AdaptiveMaxPool2d(output_size, return_indices=False)
"""
参数:

output_size:指定输出的大小,可以是一个整数 output_size,表示输出的高度和宽度相同,或者是一个元组 (output_height, output_width),表示输出的高度和宽度分别指定。
return_indices:一个布尔值,表示是否返回最大值的索引,默认为 False。如果设置为 True,则除了输出张量之外,还会返回一个包含最大值索引的张量。
返回值:返回经过自适应最大池化操作后的输出张量。
"""
import torch
import torch.nn as nn

# 创建一个输入大小为 (batch_size=1, channels=3, height=8, width=8) 的张量
input_tensor = torch.randn(1, 3, 8, 8)

# 创建一个自适应最大池化层,指定输出大小为 (output_height=4, output_width=4)
adaptive_max_pool = nn.AdaptiveMaxPool2d((4, 4))

# 应用自适应最大池化操作
output = adaptive_max_pool(input_tensor)

print("Input shape:", input_tensor.shape)
print("Output shape:", output.shape)
print("Output tensor:")
print(output)
Input shape: torch.Size([1, 3, 8, 8])
Output shape: torch.Size([1, 3, 4, 4])
Output tensor:
tensor([[[[ 1.2610,  1.7199,  0.5566, -0.6244],
          [ 1.2304,  1.0557,  1.0771,  1.9450],
          [ 1.2392,  2.3084,  1.0637,  1.1622],
          [ 1.3770,  0.6236,  1.3798,  0.7460]],

         [[ 0.8982,  1.4581,  0.3343,  0.9386],
          [ 1.6850,  0.6486,  1.8757,  0.2791],
          [ 1.7288, -0.0283,  0.3951,  1.4132],
          [ 0.8079, -0.1223,  1.0691,  1.6758]],

         [[ 0.7427,  1.1573,  1.2954, -0.4555],
          [ 2.0537,  1.0242,  1.2825,  0.0518],
          [ 0.1625,  1.7359,  1.3700,  0.8211],
          [ 2.9089,  1.0194,  0.5195,  0.3354]]]])

Process finished with exit code 0

6.torch.nn.AdaptiveAvgPool2d()

torch.nn.AdaptiveAvgPool2d() 是 PyTorch 中用于执行自适应平均池化操作的模块。与传统的平均池化操作不同,自适应平均池化允许您指定输出的大小而不是固定的池化窗口大小。这样可以适应不同输入尺寸的情况。

torch.nn.AdaptiveAvgPool2d(output_size)
"""
参数:

output_size:指定输出的大小,可以是一个整数 output_size,表示输出的高度和宽度相同,或者是一个元组 (output_height, output_width),表示输出的高度和宽度分别指定。
返回值:

返回经过自适应平均池化操作后的输出张量。
"""
import torch
import torch.nn as nn

# 创建一个输入大小为 (batch_size=1, channels=3, height=8, width=8) 的张量
input_tensor = torch.randn(1, 3, 8, 8)

# 创建一个自适应平均池化层,指定输出大小为 (output_height=4, output_width=4)
adaptive_avg_pool = nn.AdaptiveAvgPool2d((4, 4))

# 应用自适应平均池化操作
output = adaptive_avg_pool(input_tensor)

print("Input shape:", input_tensor.shape)
print("Output shape:", output.shape)
print("Output tensor:")
print(output)
Input shape: torch.Size([1, 3, 8, 8])
Output shape: torch.Size([1, 3, 4, 4])
Output tensor:
tensor([[[[ 0.2527, -0.1540,  0.5581,  0.3150],
          [ 0.1681,  0.1476,  0.6236, -0.3700],
          [ 0.4671,  0.2676,  0.2503,  0.9639],
          [ 1.3397, -0.6461,  0.1389,  1.3841]],

         [[ 0.0513, -0.3766, -0.0537, -0.4022],
          [ 0.2456,  0.1087,  0.1884, -0.3771],
          [-0.1746, -0.4370,  0.7384,  0.5044],
          [ 0.2178,  0.3246, -0.5665, -0.6366]],

         [[-0.3851, -0.0275, -0.3056,  0.0675],
          [-0.6003, -0.4432,  0.9833, -0.4356],
          [-0.0093, -0.2932,  0.7755, -0.1698],
          [ 0.3236,  0.8242, -0.1989,  0.2372]]]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1837453.html

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

相关文章

服务器硬件知识

服务器硬件基础知识 简介 原理详解 服务器硬件的工作原理是将来自客户端的请求处理并返回结果。服务器硬件是指用于构建服务器系统的物理组件。它包括处理器(CPU)、内存(RAM)、存储设备(硬盘或固态硬盘)…

uniapp使用md5加密

目录 一、安装md5 二、在main.js中全局引入并挂载到vue实例中 三、使用md5加密 一、安装md5 在终端输入 npm install js-md5 -D 二、在main.js中全局引入并挂载到vue实例中 import Md5 from js-md5 Vue.prototype.$md5 Md5 三、使用md5加密 let password_md5 this.$md…

任务3.8.3 利用RDD统计每日新增用户

任务目标 统计给定用户访问历史数据中,每日的新增用户数量。 数据准备 原始数据格式:每行包含两个字段,日期和用户名,以逗号分隔。示例数据:2024-05-01,mike 2024-05-01,alice 2024-05-01,brown ...解决方案 使用倒…

【HTML01】HTML基础-基本元素-附带案例-作业

文章目录 HTML 概述学HTML到底学什么HTML的基本结构HTML的注释的作用html的语法HTML的常用标签:相关单词参考资料 HTML 概述 英文全称:Hyper Text Markup Language 中文:超文本标记语言,就将常用的50多个标记嵌入在纯文本中&…

18V-150V降5V100mA恒压WT5101

18V-150V降5V100mA恒压WT5101 WT5101是一款非隔离高集成度且低成本的PWM功率开关,用于外围元器件精简的小功率非隔离开关电源,恒压5V输出,输入电压18V-150V。WT5101集成有完善的保护功能:VDD欠压保护、逐周期电流限制、过流保护、…

3D视觉引导机器人提升生产线的自动化水平和智能化程度

随着智能化技术的不断发展,汽车制造企业正积极寻求提升智能化水平的途径。富唯智能的3D视觉引导机器人抓取技术为汽车制造企业提供了一种高效、智能的自动化解决方案。 项目目标 某汽车制造企业希望通过引入智能化技术提升生产线的自动化水平和智能化程度。他们希望…

RockChip Android12 Settings二级菜单

一:概述 本文将针对Android12 Settings的二级菜单System进行说明。 二:System 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name=".Settings$SystemDashboardActivity"android:label="@string/header_category_system&quo…

代码随想录算法训练营第四十二天|1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零

1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lastStoneWeightII(int[] stones) {if(stones.length 0){return 0;}if(stones.length 1){return stones[0];}int sum 0;for(int i0;i<stones.length;i){sum stones[i];…

【数学】负数

Hello!大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲负数。 目录 1.负数的概念 2.绝对值 附&#xff1a;c求绝对值方法 3.负数的大小比较 1.负数的概念 比0小的数&#xff0c;叫做负数。 负数全称负实数&#xff0c;负数与正数表示意义相反的量。负数用负号(Min…

最新版WordPress网创资源美化主题整站源码更新自动同步插件

最新更新了美化右侧悬浮图标 底部分类板块&#xff0c;以及文章自动同步插件 1.支持分类替换 将主站同步过来的文章分类进行替换 2.支持本地化文章图片 &#xff08;使用储存桶可能会导致无法保存图片&#xff09; 3.支持自定义文章作者&#xff08;选择多个作者则同步到的…

C++之模板(二)

1、类模板 2、使用类模板 类模板在使用的时候要显示的调用是哪种类型&#xff0c;而不是像函数模板一样能够根据参数来推导出是哪种类型。 Stack.h #include <stdexcept>template <typename T> class Stack { public:explicit Stack(int maxSize);~Stack();void …

SEO之预估流量及价值(一)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 正规公司关键词研究的最后一步是预估搜索流量及价值。 个人站长做关键词研究不一定需要这一步。找到最合适…

提取人脸——OpenCV

提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter&#xff1a;用于创建图形用户界面。 filedialog&#xff1a;用于打开文件对话框。 …

DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)

DDP算法线性化和二次近似 在DDP算法中,第三步是线性化系统动力学方程和二次近似代价函数。这一步是关键,它使得DDP能够递归地处理非线性最优控制问题。通过线性化和二次近似,我们将复杂的非线性问题转换为一系列简单的线性二次问题,逐步逼近最优解。通过这些线性化和二次近…

STM32--IAP程序升级实验

1. STM32程序升级方法 1.1 ST-link / J-link下载 将编译生成的hex文件使用ST-Link/J-Link工具直接下载进 Flash 即可。Keil中点击下载也能一键下载。下载后的代码会存放在Flash的起始地址0x0800 0000处。 简单补充一句&#xff0c;bin文件和hex文件的区别&#xff1a; bin文…

易备防勒索备份方案与成功案例

随着信息化的发展&#xff0c;数据安全的重要性愈加突出。据 Hiscox 全球网络安全统计&#xff0c;在勒索软件攻击事件当中&#xff0c;64%以上的用户是中小企业。因此&#xff0c;制定完善的灾备策略&#xff0c;是抵御网络威胁的终极方案。而在诸多数据备份方案中&#xff0c…

Opencv高级图像处理

文章目录 Opencv高级图像处理图像坐标二值化滤波高斯滤波中值滤波 开闭运算检测霍夫圆检测边缘检测Canny边缘检测findContours区别傅里叶变换-高/低通滤波 直线检测 相机标定视频处理视频格式 模板摄像头处理&#xff08;带参调节&#xff09;单图片处理&#xff08;带参调节&a…

defer+recover机制处理错误

问题&#xff1a;多个协程工作&#xff0c;其中一个协程出现panic&#xff0c;导致程序崩溃 解决办法&#xff1a;利用deferrecover捕获panic进行处理&#xff0c;即使协程出现错误&#xff0c;主线程仍然不受影响可以继续执行 package mainimport ("fmt""tim…

Win32编程:第一个窗口程序(Part.1)

Win32系统编程是指在Windows操作系统上使用Win32 API进行软件开发的过程&#xff1b;Win32 API是Windows操作系统提供的应用程序接口&#xff0c;允许程序与操作系统进行交互&#xff0c;实现各种功能。 以下是Win32系统编程的基本概念和步骤&#xff1a; 环境准备 开发工具&…

Unity URP 仿原神角色渲染过程记录

想学一下NPR渲染&#xff0c;话不多说&#xff0c;先搞一只芙再说&#xff0c;边做边学 一、资源整理 终于是把东西全都集齐了 1、纹理设置 首先要把将Diffuse和Lightmap的压缩改成"无"或"高质量"。 法线贴图的纹理类型改成"法线贴图"。 除颜…