Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

这篇具有很好参考价值的文章主要介绍了Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


自我学习记录,他人转载请注明出处


1 池化操作

作用: 提取图片重点特征,减小图片尺寸大小,从而减少最后的输出数量,池化有不同类型,以下包含torch中针对图像的所有池化操作讲解。

2 类型

2.1 MaxPool2d()

参数:

torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

需要注意的是

  1. 当stride不给参数的时候,stride=kernel_size;
  2. dilation默认为1,当dilation大于等于2时,则每个卷积核中元素之间相隔diliation-1个位置,然后进行采样,这里只是增加采样区间,但是采样的个数还是不变的,例如kernel_size=3,那么卷积核为33一共9个元素中找最大的,如果dilation为2,那么卷积核为**55**,范围是5*5,但是采样的个数还是9个中找最大,例子如下:

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
dilation>=2,只是扩大了搜索范围,但是能采样的点数量不变!!!

  1. ceil_model默认为False,当设置为True时,增加取样点的,每一列的右边增加了kernel_size-W%kernel_size列数,下面增加了kernel-H%kernel_size行数!

ceil_model=True:
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
ceul_mode= False:
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

  1. return_indices默认为False,如果为True,则也会返回采样值的位置信息

return_indices=True:
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
因为是从0开始计数的,所以返回的索引值是能看懂的吧,这里挖个坑,我猜SegNet中最重要的Pool Indices就是借助这个参数实现的!

2.2 MaxUnPool2d()

真相了,最近看过segNet论文,模型铁定是借助了MaxPool2d和MaxUnPoold实现最关键的Pool Indices的,如果不是回来打脸!
参数:

torch.nn.MaxUnpool2d(kernel_size, stride=None, padding=0)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
直接上例子:

from torch.nn import MaxPool2d,MaxUnpool2d
x = torch.randn(1,1,4,4)
pool = MaxPool2d(2,return_indices=True)    # 这个返回两个东西,一个是最大值,一个是最大值的索引
unPool = MaxUnpool2d(2)
print("原始数据:",x)
y, ind= pool(x)
print("采样数据:",y)
print("索引值:",ind)
print("恢复值:",unPool(y,ind))

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
需要注意的地方就是,当MaxPool2d中的return_indices=True时,返回值是两个,需要使用两个东西进行接收;同时在使用MaxUnpool2d时候,也是需要传入两个参数的

2.3 AvgPool2d()

参数:

torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
ceil_model的含义见2.1,count_nclude_pad参数名字就是指的是求均值时,padding的值是否需要计算在内,divisor_override见图片标记。
直接上例子:
素的:
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
padding=1+count_include_pad=False
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
divisor_override=1
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

2.4 FractionalMaxPool2d()

参数:

torch.nn.FractionalMaxPool2d(kernel_size, output_size=None, output_ratio=None, return_indices=False, _random_samples=None)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
还是比较好理解的,直接上例子:
output_size=(5,5)
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
output_ratio=0.6
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
return_indices+MaxunPool2d

from torch.nn import FractionalMaxPool2d,MaxUnpool2d

x = torch.randn(1,1,6,6)
print("原始数据:",x)
Avg = FractionalMaxPool2d(2,output_ratio=0.5, return_indices=True)
y , ind = Avg(x)
print("采样数据:",y)
print("索引值:", ind)
unPool = MaxUnpool2d(2)
print("恢复数据:",unPool(y, ind))

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
恢复的完美,这个池化操作,更多的是让网络学习步长吧,不知道是不是的,以后填坑!

2.5LPPool2d()

参数:

torch.nn.LPPool2d(norm_type, kernel_size, stride=None, ceil_mode=False)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

作用:
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

就是计算X内所有数据P次方和后再开P次方

使用时,需要指定P,当P为无穷大时,相当于MaxPooling,想一下,没毛病,如果P=1,就相当于SumPooling
例子:p=2+k=2

from torch.nn import LPPool2d
import torch
import math
x = torch.range(1,20).reshape(1,1,4,5)
print("原始数据:", x)
pool = LPPool2d(norm_type=2, kernel_size=2)
print("pool后数据:",pool(x))
print(math.sqrt(90), math.sqrt(9+16+64+81))

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
P=30+k=2:

from torch.nn import LPPool2d
import torch
import math
x = torch.range(1,20).reshape(1,1,4,5)
print("原始数据:", x)
pool = LPPool2d(norm_type=30, kernel_size=2)
print("pool后数据:",pool(x))

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
剩下参数ceil_mode就不写例子了,详情看上面的,都是一样的意思!

2.6AdaptiveMaxPool2d()

参数:

torch.nn.AdaptiveMaxPool2d(output_size, return_indices=False)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

注意这里和 FractionalMaxPool2d比较一下, FractionalMaxPool2d是指定卷积核大小,但是这个AdaptiveMaxPool2d,不设置卷积核大小,随缘,可学习,所以注意区分。

直接上例子:return_indices+MaxUnpool2d

from torch.nn import AdaptiveMaxPool2d, MaxUnpool2d
import torch
import math
x = torch.range(1,20).reshape(1,1,4,5)
print("原始数据:", x)
pool = AdaptiveMaxPool2d(output_size=3, return_indices=True)
y, ind = pool(x)
unpool = MaxUnpool2d(2)
print("pool后数据:",y)
print("索引为:", ind)
print("恢复后的数据:",unpool(y, ind))

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
个人认为这里的AdaptiveMaxPool2d很少和MaxUnpool2d一起用,因为Adaptive固定不了kernel,所以还原的时候存在偏差

2.7 AdaptiveAvgPool2d()

torch.nn.AdaptiveAvgPool2d(output_size)

Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

作用: 更简单了,就是自适应平均池化层,指定输出大小就行了

直接上例子:
Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解
这里的output_size可以大于input_size大小

3 总结

从torch官网看,针对图片,有这7中池化操作,大概分为最大池化类,平均池化类,杂类文章来源地址https://www.toymoban.com/news/detail-449530.html

  1. 最大池化实现有四种方式,MaxPool2d,可以设置k,s,p,但是不能设置输出大小,输出大小是计算好的;FractionalMaxPool2d,可以设置k,和输出大小,单数s和p不能设置;AdaptiveMaxPool2d,只能设置输出大小,其余的都设置不了;LPPool2d,这个纯属特列才可以使用,并且特例中的功能还是MaxPool2d的阉割版;除了LPPool2d,其余逐步自由化,增加了网络设置的随机性;
  2. 平均池化实现有两种方式,AvgPool2d,可以设置k,s,p,分母,是否计算pad值,输出大小不能设置,是计算出来的;AdaptiveAvgPool2d,只能设置一个输出大小,其余的都不能设置,也是逐步自由化;
  3. 杂类,MaxUnpool2d,是实现Max池化特征恢复的好手段,主要就是配合Max池化操作;LPPool2d,当p为1时,可以实现Sum Pool操作,同时AvgPool2d中指定分母也是可以实现Sum Pool操作的

到了这里,关于Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 神经网络:池化操作

    在计算机视觉中,池化操作是一种常用的特征降维技术,它在卷积神经网络(CNN)中起着重要的作用。池化操作主要有以下作用和意义: 1. 特征降维: 池化操作可以减小特征图的尺寸,从而降低了模型的计算复杂度和内存消耗。 通过将特征图的空间维度缩小,可以保留重要

    2024年02月10日
    浏览(15)
  • 卷积神经网络(CNN)之卷积操作、池化操作、激活函数

    卷积神经网络(CNN)之卷积操作、池化操作、激活函数

    前言:卷积神经网络是深度学习算法中一个重要组成部分,在深度学习图像识别技术的应用中起到了关键作用。卷积神经网络和循环神经网络(RNN)都是类似于传统的全连接神经网络(也叫深度神经网络,简称DNN),CNN属于编码了空间相关性的DNN,RNN属于编码了时间相关性的DNN。由

    2024年02月04日
    浏览(12)
  • pytorch中的矩阵乘法操作:torch.mm(), torch.bmm(), torch.mul()和*, torch.dot(), torch.mv(), @, torch.matmul()

    😄 无聊整理下torch里的张量的各种乘法相关操作。 1、让所有输入张量都向其中shape最长的矩阵看齐,shape不足的部分在前面加1补齐。 2、两个张量的维度要么在某一个维度一致,若不一致其中一个维度为1也可广播。否则不能广播。【如两个维度:(4, 1, 4)和(2, 1)可以广播,因

    2024年02月04日
    浏览(13)
  • 笔记:对多维torch进行任意维度的多“行”操作

    笔记:对多维torch进行任意维度的多“行”操作

    新建torch 取出某一行 取出某一列 一次性取出多行 取出连续的多行 ——有多种操作方式 取出不连续的多行 如:取出第0行和第2行 一次取出多列 取出连续的多列 ——同样拥有多种方案 取出不连续的多列 如取出第0列和第3列 此三维torch可视化如下: 取出三维torch的任意两行(

    2024年02月01日
    浏览(10)
  • unity-unity2d基础操作笔记(三)0.5.3204

    目标是:牢记以下137条操作,越级上升到中级阶段 当一个人物由多个部分的动画组成,可以将动画的多个部分都放入一个数组中,当需要执行某个动作时,循环数组执行某一个动画就可以了 float h = Input.GetAxis(“Horizontal”); rd.velocity = new Vector2(h \\\" speed * Time.fixedDeltaTime, rd.velo

    2024年04月09日
    浏览(10)
  • 【医学影像数据处理】2D/3D patch的crop和merge操作汇总

    【医学影像数据处理】2D/3D patch的crop和merge操作汇总

    在做 3D 分割任务中,多数的方法多采用整体缩放,或裁剪成一个个小的 patch 操作,这样做的一个主要原因是内存问题。还有就是有些目标太小,比如分割结节,用整图直接输入网络,正负样本的不均衡是非常大的。 相较于整体缩放,采用裁剪成 patch 的方法,对于小目标会更

    2024年02月11日
    浏览(39)
  • Windows-- 键盘操作+命令大全

    F1 显示当前程序或者windows的帮助内容。  F2 当你选中一个文件的话,这意味着“重命名”  F3 当你在桌面上的时候是打开“查找:所有文件” 对话框  F10或ALT 激活当前程序的菜单栏  windows键或CTRL+ESC  打开开始菜单  CTRL+ALT+DELETE  在win9x中打开关闭程序对话框  DELETE 删除被

    2024年02月04日
    浏览(10)
  • Linux操作系统命令大全

    Linux操作系统命令大全

    Linux是一种操作系统  Operating System  简称  OS  ,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。 操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些

    2024年02月02日
    浏览(11)
  • BAT命令常用操作学习大全

    BAT命令常用操作学习大全 一、基础语法: 1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。 2.批处理是一种简单的程序,可以用 if 和 goto 来控制流程,也可以使用 for 循环。 3.批处理的编程能力远

    2023年04月16日
    浏览(5)
  • Git回退代码操作大全

    Git回退代码操作大全

    git回退代码的三种方式mixed,soft,hard 基于IDEA操作,也有纯命令操作,操作方式几乎差不多,在这里不做赘述。 一、.mixed的操作(IDEA的默认操作) 1.左下角git指向标,点击看到我们的git操作日志。选择你要回退的版本。 复制Reversion Number*** 2.在git----resposity-----Reset Hard粘贴你的Reversion N

    2024年02月09日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包