Torch.nn模块学习-池化

news2024/10/5 14:15:08

池化对数据起到了浓缩的效果,通过池化可以减少数据量降低内存压力,简单地理解,池化操作都是通过池化的kernel的选取一定的区域,通过某种计算将这个区域一系列数值转化为一个数值,需要注意的是:对于池化操作来说,池化的步长一般是卷积核大小

该库提供了多种池化的类,最大池化、平均池化、最大自适应池化等操作。下面以二维数据处理为例子,列出常用的池化操作。

在这里插入图片描述

本次项目中使用的操作:

nn.Sequential

介绍

一个序列容器,用于搭建神经网络的模块,被按照被传入构造器的顺序添加到nn.Sequential()r容器中,除此之外,一个包含神经网络模块的OrderedDict也可以被传入nn.Sequential()容器中,利用nn.Sequential()搭建好的模型架构,模型前向传播时调用 f o r w a r d ( ) forward() forward()方法,模型接受的输入首先被传入的nn.Sequential()包含的第一个网络模块中,然后**,第一个网络模块输出传入到第二个网咯模块作为输入**。按照顺序依次计算并传播,直到nn.Sequential()里的最后一个模块输出结果

本质作用

按照上面说法,与一层一层的单独调用的模块组成的序列相比,
n n . S e q u e n t i a l ( ) nn.Sequential() nn.Sequential(),可以允许将整个容器视为单个模块,(相当于把多个模块封装成一个模块)forward()方法接收输入之后,
nn.Sequential(),按照内部模块的顺序自动依次计算并输出结果

这意味着,我们可以利用其来自定义网络层。:

nn.Conv2d

nn.Conv2d对有多个输入平面组成的输入信号进行二维卷积
在这里插入图片描述
在这里插入图片描述

函数详解

  • torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
  • in_channels: 输入图像通道数。
  • out_channels:卷积产生的通道数。
  • kernel_size: 卷积核尺寸,可以设为1个int型数或者一个(int, int)型的元组。例如(2,3)是高2宽3卷积核
  • stride: 卷积步长:默认为1,可以设为1个int型数或者一个(int, int)型的元组
  • padding: 填充操作:控制padding_mode的数目。
  • padding_mode:padding模式,默认为Zero-padding
  • dilation:扩张操作,控制kernel点(卷积核点)的间距,默认值为1.
  • groups:group参数作用是控制分组卷积,默认不分组,为1组。
  • bias:为真,则在输出中添加一个可学习的偏差,默认为True.

参数dilation-扩张卷积

在这里插入图片描述

参数groups-分组卷积

在这里插入图片描述
在这里插入图片描述

nn.BatchNorm2d

paddle.nn.BatchNorm2D(num_features, momentum=0.9, epsilon=1e-05, weight_attr=None, bias_attr=None, data_format='NCHW', name=None):

目的:

加速神经网络的收敛过程,以及提高训练过程中的稳定性

应用场景

通常用于解决多层神经网络中间层的协方差偏移问题

行为方式

使一批(Batch) feature map满足均值为0,方差为1的分布规律。这样不仅数据分布一致,而且避免发生梯度消失

通俗解释

类似于网咯输入中进行零均值化和方差归一化操作。不过是在中间层输入中的操作而已。
作用:卷积之后会添加BatchNorm2d进行数据的归一化处理,着使得数据在进行Relu之前,不会因为数据过大而导致网络性能不稳定

数学原理

在这里插入图片描述

参数解释

在这里插入图片描述
在mini-batch上计算维度,的均值和标准差,gamma和beta是可学习的参数向量,gamma默认设置为1,beta默认设置为0,其中,标准差是通过有偏估计来计算的。等同于:
torch.var(input,unbiased=False)
通常默认情况下,训练过程中的BatchNorm 层会保持对其计算的均值和方差的估计,然后再测试时候,使用这个均值和方差进行标准化。Running estimates保持默认动量为0.1 。

如果参数track_running_stats被设置为False,BatchNorm层将不会进行running estimates,Batch统计的均值和方差将会使用测试数据的均值和方差来代替

BatchNorm中的momentum参数与优化器中的momentum和传统概念中的momentum不同。

在BatchNorm中,Running statistics的更新规则是:
在这里插入图片描述

  • affine参数设为True表示weight和bias将被使用

nn.ReLU

R e L U ( x ) = m a x ( 0 , m a x ) ReLU(x)=max(0, max) ReLU(x)=max(0,max)
nn.ReLU()函数默认inplace 默认是False

  • inplace = False
    输出对象地址,不会修改输入对象的值,而是返回一个新创建的对象,所以打印出对象存储地址不同,类似于C语言的值传递
  • inplace = True
    输出对象地址,会修改输入对象的值,所以打印出对象存储地址相同,类似于C语言的地址传递
    inplace = True,节省反复申请与释放内存的空间与时间,只是将原来的地址传递,效率更好

nn.MaxPool2d

# 这个类是是许多池化类的基类,这里有必要了解一下
class _MaxPoolNd(Module):
    __constants__ = ['kernel_size', 'stride', 'padding', 'dilation',
                     'return_indices', 'ceil_mode']
    return_indices: bool
    ceil_mode: bool
	# 构造函数,这里只需要了解这个初始化函数即可。
    def __init__(self, kernel_size: _size_any_t, stride: Optional[_size_any_t] = None,
                 padding: _size_any_t = 0, dilation: _size_any_t = 1,
                 return_indices: bool = False, ceil_mode: bool = False) -> None:
        super(_MaxPoolNd, self).__init__()
        self.kernel_size = kernel_size
        self.stride = stride if (stride is not None) else kernel_size
        self.padding = padding
        self.dilation = dilation
        self.return_indices = return_indices
        self.ceil_mode = ceil_mode

    def extra_repr(self) -> str:
        return 'kernel_size={kernel_size}, stride={stride}, padding={padding}' \
            ', dilation={dilation}, ceil_mode={ceil_mode}'.format(**self.__dict__)

class MaxPool2d(_MaxPoolNd):
    kernel_size: _size_2_t
    stride: _size_2_t
    padding: _size_2_t
    dilation: _size_2_t

    def forward(self, input: Tensor) -> Tensor:
        return F.max_pool2d(input, self.kernel_size, self.stride,
                            self.padding, self.dilation, self.ceil_mode,
                            self.return_indices)

MaxPool2d 这个类的实现十分简单。

先来看一下基本参数,一共六个:

  • kernel_size :表示做最大池化的窗口大小,可以是单个值,也可以是tuple元组
  • stride :步长,可以是单个值,也可以是tuple元组
  • padding :填充,可以是单个值,也可以是tuple元组
  • dilation :控制窗口中元素步幅
  • return_indices :布尔类型,返回最大值位置索引
  • ceil_mode :布尔类型,为True,用向上取整的方法,计算输出形状;默认是向下取整

关于kernel_size的解释

这里的kernel_szie跟卷积核不是一个东西,kernel_size可以看作是一个滑动窗口,这个窗口的大小由自己定,如果输入的是单个值,例如3,那么窗口的大小都是 3 × 3 3 \times 3 3×3。还可以输入元组 ( 3 , 2 ) (3,2) (3,2),
那么窗口的大小都是 3 × 2 3 \times 2 3×2

最大池化的方法都是取这个窗口覆盖元素中的最大值

关于stride的解释。

上一个参数,我们确定了滑动窗口的大小,现在我们来确定这个窗口如何进行滑动的,如果不指定这个参数, 那么默认步长跟最大池化窗口一致,如果指定了参数,那么将按照我们指定的参数进行滑动。例如 s t r i d e = ( 2 , 3 ) stride =(2,3) stride=(2,3) 那么窗口将每次向右滑动3个窗口的位置**,或者向下滑动两个元素的位置,**。

关于padding的理解

这参数控制如何进行填充,填充值默认为0,如果是单个值,例如1,那么将在周围填充一圈0,还可以用元组指定如何填充,例如:
p a d d i n g = ( 2 , 1 ) padding = (2,1) padding=(2,1),表示再上下两个方向上填充两个0,在左右方向上各填充一个0.

关于return_indices的详解

这是个布尔类型值,表示返回值中是否包含最大值位置的索引。注意这个最大值指的是在所有窗口中产生的最大值,如果窗口产生的最大值总共有5个,就会有5个返回值

关于ceil_mode详解

这个也是布尔类型值,它决定的是在计算输出结果形状的时候,是使用向上取整还是向下取整。怎么计算输出形状,下面会讲到。一看就知道了。(向上取整,还是向下取整)

最大池化输出形状计算

在这里插入图片描述

总结

会自己根据项目进行各种参数的调节,会自己进行各种的调参以及计算都行啦的样子与打算,。

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

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

相关文章

【LeetCode】No.108. Convert Sorted Array to Binary Search Tree -- Java Version

题目链接:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/ 1. 题目介绍(Convert Sorted Array to Binary Search Tree) Given an integer array nums where the elements are sorted in ascending …

全网最新注册ChatGPT账号攻略

OpenAI 推出超神 ChatGPT,但是由于不可抗力原因,加上网站限制,导致大部分人无法体验到。这里我分享一下注册的攻略。 前提准备 首先能能访问 Google(前置条件,不能明确说,懂得都懂)。 其次你…

利用pymupdf编辑修改pdf

利用pymupdf编辑修改pdf 本文背景 为了修改pdf的文本, 在pymupdf官方手册查了一通,没看到明显的说明,然后到github的讨论区看了发现了修改pdf的方案,在此记录一下 参考链接: https://github.com/pymupdf/PyMuPDF/discussions/1019 主要方法: 找到需要替换的文本块,然后添…

抗疫逆行者HTML网页作业 感动人物网页代码成品 最美逆行者网页模板 致敬疫情感动人物网页设计制作

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

8.论文学习Liver Tumor Segmentation and Classification: A Systematic Review

目录摘要1.引言2.文献调查3.肝脏肿瘤分割的一般步骤A.CT肝脏图像B.图像预处理C.肝脏分割和肿瘤分割D.特征提取E.分类4.肝脏图像预处理方法A.中值滤波B.双边滤波器(BF)C. Wiener滤波器D.导向滤波guided filterE.递归高斯滤波Recursive Gaussian filteringF.Kirsch算子5.肝脏和肿…

基于Springboot的宠物医院管理系统-JAVA【数据库设计、论文、源码、开题报告】

1 绪论 1.1 课题背景 在信息技术高速发展的今天,新知识、新技术层出不穷,计算机技术早已广泛的应用于各行各业之中,利用计算机的强大数据处理能力和辅助决策能力叫,实现行业管理的规范化、标准化、效率化。 管理信息系统(Manag…

HummerRisk V0.6.0发布:升级列表高级搜索功能,扩充对象存储和操作审计支持范围等

HummerRisk V0.6.0发布:新增表头高级搜索功能,可按名称快速搜索与组合查询,动态调整显示列,新增对象存储七牛云与青云类型,新增操作审计火山引擎(火山云)类型。 感谢社区中小伙伴们的反馈&…

用DIV+CSS技术设计的西安旅游网站18页(web前端网页制作课作业)HTML+CSS旅游网站设计与实现

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

C# WPF 基础等待动画Loading...动态转圈 Storyboard ContentControl

这个效果图...直接放上吧&#xff0c;实际是转圈效果&#xff0c;使用起来最方便的一种。 【这是个基础版&#xff0c;灵活度很高】 Xaml 绘制Loading图案&#xff0c;及触发的动画效果&#xff0c;实际控制的每个组件 Opacity - 透明度 属性。 <Style TargetType"{x…

元宇宙工程系,来了一位“吃螃蟹”者

转自《中国科学报》 记者 温才妃 潘志庚&#xff08;右&#xff09;给学生讲授元宇宙技术。受访者供图 元宇宙办学潮正在高校中暗涌。 不久前&#xff0c;南京信息工程大学人工智能学院&#xff08;未来技术学院&#xff09;信息工程系正式更名为元宇宙工程系&#xff0c;成为…

【密码加密原则二】

目录 1 密码加密原则&#xff08;续&#xff09; 1.1 使用加盐的方式可以使得“密码” 1.2 优缺点 1 密码加密原则&#xff08;续&#xff09; 1.1 使用加盐的方式可以使得“密码” 如果用户的密码过于简单&#xff0c;使用加盐的方式可以使得“密码”&#xff08;其实是…

数据结构-八大排序

八大排序一&#xff0c;直接插入排序二&#xff0c;希尔排序三&#xff0c;选择排序四&#xff0c;堆排序五&#xff0c;冒泡排序六&#xff0c;快速排序1&#xff0c;递归版本&#xff08;1&#xff09;hoare法&#xff08;2&#xff09;挖坑法&#xff08;3&#xff09;前后指…

5 年 Python ,总结的 10 条 Python 使用技巧

今天给大家分享 10 个我平时整理非常实用的 Python 开发小技巧&#xff0c;内容目录如下&#xff1a; 值得一提的是&#xff0c;这 10 个技巧全部收录在我自己写的 《Python黑魔法指南》里。 1. 如何在运行状态查看源代码&#xff1f; 查看函数的源代码&#xff0c;我们通常…

Apache Drill的学习

Drill的下载地址&#xff1a; Index of /dist/drill 上传安装包后&#xff0c;解压&#xff0c;测试环境中&#xff0c;我直接放到/root目录下了 tar -zxvf apache-drill-1.11.0.tar.gz 进入/root/apache-drill-1.11.0/bin 启动命令&#xff1a; ./sqlline -u jdbc:drill:…

VMware创建Linux虚拟机之(四)ZooKeeperHBase完全分布式安装

Hello&#xff0c;world&#xff01; &#x1f412;本篇博客使用到的工具有&#xff1a;VMware16 &#xff0c;Xftp7 若不熟悉操作命令&#xff0c;推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机&#xff08;Virtual Machine&#xff09; 指通过软…

C语言基础

文章目录二. 前言1.vscode 搭建C语言开发环境2.编程语言的演变2-1.计算机语言2-2 解释型vs编译型2-2 面向过程vs面向对象三. C语言基础0.数据存储范围1.变量与常量2.数据类型2-1 整型数据2-2 浮点型数据2-3 字符型数据2-4 格式化输出2-5 输入框语句2-5 字符输入函数2-6 字符输出…

硬件内存模型

Hardware Memory Models 这是Go语言作者之一的rsc语言内存模型相关博文之一&#xff1b;硬件内存模型的笔记。硬件内存模型对应的是汇编指令的执行&#xff0c;可以认为每一条指令原子执行。 Sequential Consistency 顺序一致性模型 多个进程的操作按照一定顺序执行&#xf…

(附源码)ssm小米购物网站 毕业设计 261624

基于ssm小米购物网站 摘 要 近年来&#xff0c;随着移动互联网的快速发展&#xff0c;电子商务越来越受到网民们的欢迎&#xff0c;电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越…

[附源码]计算机毕业设计宁财二手物品交易网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

数据结构(13)最小生成树JAVA版:prim算法、kruskal算法

目录 13.1.概述 13.2.prim算法 13.2.1.概述 13.2.2.代码实现 13.3.kruskal算法 13.3.1.概述 13.3.2.代码实现 13.1.概述 最小生成树&#xff0c;包含图的所有顶点的一棵树&#xff0c;树的边采用包含在图中的原有边中权重和最小的边。翻译成人话就是遍历一遍全图所有顶点…