深度学习(九)——神经网络:最大池化的作用

一、 torch.nn中Pool layers的介绍

官网链接:

https://pytorch.org/docs/stable/nn.html#pooling-layers

1. nn.MaxPool2d介绍

nn.MaxPool2d是在进行图像处理时,Pool layers最常用的函数

官方文档:MaxPool2d — PyTorch 2.0 documentation

(1)torch.nn.MaxPool2d类

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

(2)参数介绍

  • kernel_size(int or tuple): 用于设置一个取最大值的窗口,如设置为3,那么会生成一个3×3的窗口

  • stride(int or tuple): 默认值为kernel_size,步幅,和卷积层中的stride一样

  • padding(int or tuple): 填充图像,默认填充的值为0

  • dilation(int): 空洞卷积,即卷积核之间的距离。如卷积核的尺寸为3×3,dilation为1,那么返回一个大小为5×5的卷积核,卷积核每个元素与上下左右的元素之间空一格

  • return_indices(bool): 一般用的很少,不做介绍

  • ceil_mode(bool): 默认为False。为True时,输出的shape使用_ceil_格式(向上取整,即进一);为False时,输出的shape使用_floor_格式(向下取整)。

二、最大池化操作

1. 最大池化操作举例(理论介绍)

假设有一个5×5的图像和一个3×3的池化核(kenel_size=3),如下图。池化过程就是将池化核与图像进行匹配。下面介绍最大池化的具体操作。

  • 首先用池化核覆盖图像,如下图。然后取到最大值,作为一个输出。

  • 上图为第一次最大池化操作,最大值为2。将2作为一个输出,如下图。

  • 由于本例未对stride进行设置,故stride采取默认值,即_stride=kernel_size=3_,池化核移动如下图(移动方式与上上文中提到的卷积核移动方式相同,不再赘述)。由于池化核移动已超出范围,要不要取这3×2部分的最大值,取决于call_mode的值,若_ceil_mode=True_,则取最大值,即输出3;若_ceil_mode=False_,则不取这部分的值,即这一步不进行池化操作。

    • 假设_ceil_mode=True_,经过最大池化操作后,输出的结果如下图。

    • 假设_ceil_mode=False_,经过最大池化操作后,输出的结果如下图。

2. 操作前后的图像大小计算公式

跟卷积操作的计算公式一样。具体如下:

参数说明:

  • N: 图像的batch_size

  • C: 图像的通道数

  • H: 图像的高

  • W: 图像的宽

计算过程:

  • Input:\( (N,C_{in}​,H_{in}​,W_{in}​)\) or \((C_{in}​,H_{in}​,W_{in}​)\)

  • Output: \((N,C_{out}​,H_{out}​,W_{out}​)\) or \((C_{out}​,H_{out}​,W_{out}​)\)

    • 其中有:

      \(H_{out}​=⌊\frac{H_{in}​+2×padding[0]−dilation[0]×(kernel\_size[0]−1)−1​}{stride[0]}+1⌋\)

      \(W_{out}​=⌊\frac{W_{in}​+2×padding[1]−dilation[1]×(kernel\_size[1]−1)−1​}{stride[1]}+1⌋\)

看论文的时候,有些比如像padding这样的参数不知道,就可以用这条公式去进行推导

3. 最大池化操作代码举例

依然选取上面的例子,进行编程。

import torch
from torch import nn
from torch.nn import MaxPool2d
input=torch.tensor([[1,2,0,3,1],
                    [0,1,2,3,1],
                    [1,2,1,0,0],
                    [5,2,3,1,1],
                    [2,1,0,1,1]],dtype=torch.float32)   #输入图像数据;与卷积操作不同的是,最大池化操作要求输入的图像数据是浮点数,而不是整数(为整数第23行会报错)
input=torch.reshape(input,(-1,1,5,5))     #构造图像数据,使其符合输入标准,即分别为(输入batch_size待定,1通道,大小为5×5)
print(input.shape)  #[Run] torch.Size([1, 1, 5, 5]);数据格式符合输入标准

#构造神经网络
class Demo(nn.Module):
    def __init__(self):
        super(Demo,self).__init__()
        self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)  #设置最大池化函数,这里以ceil_mode=True为例

    def forward(self,input):
        output=self.maxpool1(input)  #将输入的数据(input)进行最大池化草子哦
        return output

demo=Demo()  #创建神经网络
output=demo(input)
print(output)
"""
[Run]
tensor([[[[2., 3.],
          [5., 1.]]]])

符合前面ceil_mode=True例子的输出结果一致
"""

4. 为什么要进行最大池化(最大池化的作用)

  • 最大程度地保留输入特征,并使数据量减小

  • 上述例子中输入图像为5×5,经过最大池化操作之后变成了3×3,甚至为1×1。使得图像特征得以保留,而数据量大大减少了,对整个网络来说参数减少了,运算速度也变快了

  • 打个比方,这就像看视频的时候,高清(输入图像)变(经过最大池化操作)标清(输出数据)

使用具体图片示例,介绍最大池化的作用:

from torch import nn
from torch.nn import MaxPool2d
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

dataset=torchvision.datasets.CIFAR10("./dataset",train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloder=DataLoader(dataset,batch_size=64)

#构造神经网络
class Demo(nn.Module):
    def __init__(self):
        super(Demo,self).__init__()
        self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)  #设置最大池化函数,这里以ceil_mode=True为例

    def forward(self,input):
        output=self.maxpool1(input)  #将输入的数据(input)进行最大池化草子哦
        return output

demo=Demo()  #创建神经网络

writer=SummaryWriter("logs_maxpool")
step=0

for data in dataloder:
    imgs,targets=data
    writer.add_images("input",imgs,step)
    output=demo(imgs)
    writer.add_images("output",output,step)
    step+=1
writer.close()

对比输入输出,可以看出图像更糊了

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

耗时两天半的java之sql注入代码审计

java之sql注入代码审计 前言 其实找到漏洞原因很简单,主要想学习一下JDBCsql的过程 JDBC 简单介绍 Java通过java.sql.DriverManager来管理所有数据库的驱动注册,所以如果想要建立数据库连接需要先在java.sql.DriverManager中注册对应的驱动类&#x…

2Y0A21 GP2Y0A21YK0F 红外测距传感器 arduino使用教程

三根线 正极负极信号线 确认自己的三根线分别代表什么,我们的颜色可能不一样 附一张我买的传感器他们的说明图 正极 接 开发板5V 负极 接开发板GND 信号线 接A0 代码arduino ide上面写 // Infračerven senzor vzdlenosti Sharp 2Y0A21// připojen potře…

新火种AI|Sora发布半年之后,AI视频生成领域风云再起

作者:一号 编辑:美美 AI视频最近有些疯狂,Sora可能要着急了。 自OpenAI的Sora发布以来,AI视频生成技术便成为了科技界的热门话题。尽管Sora以其卓越的性能赢得了广泛关注,但其迟迟未能面向公众开放,让人…

Study--Oracle-03-数据库常规操作

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、oracle 版本及主要功能 二、数据安装完成后常用操作SQL 1、检查数据库监听状态 监听的常用命令 启动:[oracleoracle u01]$ lsnrctl stop 停止&am…

买家用洗地机需要注意什么?全面评测热门洗地机品牌

对于忙碌的打工族来说,“做家务”是一件非常消费时间精力的事情,但它又是生活中的一部分,为了解决这些矛盾点,越来越多的清洁家电涌向市场,像集扫地、吸尘、洗地为一体的洗地机,在推拉之间便把脏污处理干净…

网络编程4----网络原理(面试及期末必备)

1 应用层 应用层是与程序员关系最密切的一层,在应用层这里了,很多时候,都是使用程序员自定义的协议,当然,也有很多现成的协议供我们使用。 “自定义协议”: 自定义一个协议,也就是自己做一个…

Idea连接GitLab的过程以及创建在gitlab中创建用户和群组

上期讲述了如何部署GitLab以及修复bug,这期我们讲述,如何连接idea。 首先安装gitlab插件 下载安装idea上并重启 配置ssh免密登录 使用管理员打开命令行输入:ssh-keygen -t rsa -C xxxaaa.com 到用户目录下.ssh查看id_rsa.pub文件 打开复制…

新兴互联网银行搭档Apache SeaTunnel构建数据流通管道!

当新兴互联网银行乘着数字化改革的风潮搭档数据集成平台Apache SeaTunnel,成千万上亿的数据就有了快速流通的管道。6月26日14:00,Apache SeaTunnel社区将带上企业最佳实践与观众见面,与大家面对面交流最新的企业实践部署经验。锁定SeaTunnel视…

OpenCV中的圆形标靶检测——findCirclesGrid()(二)

本章我们开始讲解基于层次聚类的标靶检测算法。当我们调用如下API,且flags中包含cv::CALIB_CB_CLUSTERING标志位时,将会执行基于层次聚类的斑点检测算法。算法支持对称标靶和非对称标靶两类,相应的需要将下述flags设为包含CALIB_CB_SYMMETRIC_GRID或CALIB_CB_ASYMMETRIC_GRI…

设计模式(五)创建者模式之工厂模式

工厂模式 工厂模式上面类图代码实现Coffee 抽象类AmericanCoffeeLatterCoffeeCoffeeStoreUser 简单工厂模式增加工厂方法更改CoffeeStore 类优缺点扩展静态工厂 工厂方法模式概念结构具体类图代码实现Coffee类AmericanCoffeeLatterCoffee抽象工厂CoffeeFactoryAmericanCoffeeFa…

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo

文章目录 1. 初识1.1 到手开箱1.2 OrangePi Kunpeng Pro1.2 上电 2. 安装Ubuntu2.1 准备工作2.2 安装 3. 安装ROS23.1 设置支持UTF-8的locale编码3.2 添加证书3.3 安装ROS3.4 设置环境变量3.5 小海龟来啦 4. 运行实例4.1 安装Gazebo4.2 安装turtlebot 总结 1. 初识 1.1 到手开…

通勤必备!重回儿时回忆,完全免费!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利三个网站,可以完全免费在线玩的小霸王游戏机,重回童年游戏时刻! 最后一款还可以网页在线和朋友联机CS、吃鸡、暗黑破坏神、拳皇、恐龙…

LVS负载均衡集群企业级应用实战-LVS-DR(四)

目录 LVS-DR 一. 环境准备 二. 对虚拟主机操作 三. 对真实服务器操作 四. 打开网页测试 LVS-DR 一. 环境准备 三台虚拟机,都要在同一网段内,统一关闭防火墙和selinux,时间同步,配置好YUM源。系统用centos和roucky都行。 主…

【ai】如何在ollama中随意使用hugging face上的gguf开源模型

【背景】 ollama的pull命令可以直接pull ollama列表中现有的模型,但是ollama可以直接pull的模型大都是英语偏好(llama2有直接可以pull的chinese版本),而hugging face上则有大量多语种训练的模型,如果能直接使用huggin…

隧道代理是什么?怎么运作的?

隧道代理作为网络代理的一种形式,已经在现代互联网世界中扮演着重要的角色。无论是保护隐私、访问受限网站还是实现网络流量的安全传输,隧道代理都发挥着重要作用。在本文中,我们将深入探讨隧道代理的概念、运作方式以及在不同场景中的应用。…

如何秒杀系统架构设计

原文路径:https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%a6%82%e4%bd%95%e8%ae%be%e8%ae%a1%e4%b8%80%e4%b8%aa%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%…

国际现货黄金的交易方式:二次入场机会识别

近期受地缘局势以及通胀因素的影响,国际现货黄金投资又重新受到市场的青睐。虽然近期金价出现大跌,但投资者反而认为这是低价买金的好机会。为了方便投资者做出决策,下面我们就介绍一些国际现货黄金的交易方式——二次入场点进场。 在国际现货…

Java中序列化与反序列化(五)——static字段

static字段 1、概述2、静态字段的特性2.1、与类相关联2.2、唯一副本2.3、通过类名访问2.4、生命周期 3、静态字段不被序列化4、一个疑问4.1、作用4.2、使用4.2、为什么serialVersionUID是静态的4.2、为什么serialVersionUID会被“序列化” 5、总结 大家好,我是欧阳方…

经典文献阅读之--OrienterNet(自动驾驶中基于网格的交通场景感知)

dia 0. 简介 使用神经网络来匹配2D公开地图的做法是一个很有趣的方法,人们可以使用简单的2D地图在3D环境中指明自己所处的位置,而大部分视觉定位算法则依赖于昂贵的、难以构建和维护的3D点云地图。为了弥合这一差距《OrienterNet: Visual Localization…

项目计划

1.什么是项目计划? 2.软件项目计划的作用 3.项目计划的内容 4.项目计划的主要内容 5.滚动计划方法 6.WBS方法 7.软件项目的特点 8.制定计划的要点 9.直接成本和间接成本 10.为什么说项目计划不是一个文档,而是一个持续的策划过程? 项目计划不…