Pytorch深度学习-----神经网络之池化层用法详解及其最大池化的使用

news2024/11/15 10:58:08

系列文章目录

PyTorch深度学习——Anaconda和PyTorch安装
Pytorch深度学习-----数据模块Dataset类
Pytorch深度学习------TensorBoard的使用
Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Compose,RandomCrop)
Pytorch深度学习------torchvision中dataset数据集的使用(CIFAR10)
Pytorch深度学习-----DataLoader的用法
Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用
Pytorch深度学习-----神经网络的卷积操作
Pytorch深度学习-----神经网络之卷积层用法详解


文章目录

  • 系列文章目录
  • 一、池化操作是什么?
  • 二、torch.nn.MaxPool2d介绍
    • 1.相关参数
    • 2.最大池化处理上述矩阵并验算结果
    • 3.最大池化处理CIFAR10数据集图片


一、池化操作是什么?

池化操作是卷积神经网络(CNN)中的一种常用操作,用于减小特征图的尺寸,并提取出最重要的特征。它通过在特定区域内进行汇总或聚合来实现这一目标。

常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化在每个区域内选择最大值作为池化结果,而平均池化则取区域内数值的平均值。这两种池化操作都通过滑动窗口在特征图上移动,并在每个窗口内进行池化操作。

池化操作的主要作用有两个方面:

特征降维:通过减小特征图的尺寸,减少了后续层的计算量和参数数量,有助于降低过拟合风险。
提取主要特征:通过选择最大值或求平均值,池化操作可以提取出最显著的特征,有助于保留重要信息并抑制噪声。

以最大池化操作作为示例如下:
在这里插入图片描述

二、torch.nn.MaxPool2d介绍

1.相关参数

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

kernel_size:表示池化核的大小,类型为int 或者元组。
stride=None:表示步长的大小,与卷积层不同,池化层步长大小默认为kernel_size的大小
padding=0:表示在输入图像外围增加一圈0,和前面卷积核一样。
dilation=1:表示设置核的膨胀率,默认 dilation=1,即如果kernel_size =3,那么核的大小就是3×3。如果dilation = 2,kernel_size =3×3,那么每列数据与每列数据,每行数据与每行数据中间都再加一行或列数据,数据都用0填充,那么核的大小就变成5×5。
return_indices=False:表示用来控制要不要返回最大值的索引位置,如果为true,那么要记住最大池化后最大值的所在索引位置,后面上采样可能要用上,为false则不用记住位置。
ceil_mode=False:表示计算输出结果形状的时候,是使用向上取整还是向下取整。即要不要舍弃无法覆盖核的大小的数值。
注意 输入和输出的input需要为NCHW或者CHW
如下官网图所示
在这里插入图片描述

2.最大池化处理上述矩阵并验算结果

当设置ceil_mode=True时
示例代码如下:

import torch
from torch import nn

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=float)  # 使用dtype将此矩阵的数字变为浮点型
# 准备的参数情况
print(input.shape)  # torch.Size([5, 5])
# 进行reshape
input = torch.reshape(input,(1,5,5))  # 修改shape为chw
print(input.shape)  # torch.Size([1, 5, 5])

# 搭建神经网络并进行池化操作
class Lgl(nn.Module):
    def __init__(self):
        super(Lgl,self).__init__()
        self.maxpool2 = nn.MaxPool2d(kernel_size=3,ceil_mode=True)

    def forward(self,input):
        return self.maxpool2(input)

# 实例化
l = Lgl()
output = l(input)
print(output)
torch.Size([5, 5])
torch.Size([1, 5, 5])
tensor([[[2., 3.],
         [5., 1.]]], dtype=torch.float64)

2,3,5,1 刚好符合ceil_mode=True时的情况

当设置ceil_mode=False时
示例代码如下:

import torch
from torch import nn

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=float)  # 使用dtype将此矩阵的数字变为浮点型
# 准备的参数情况
print(input.shape)  # torch.Size([5, 5])
# 进行reshape
input = torch.reshape(input,(1,5,5))  # 修改shape为chw
print(input.shape)  # torch.Size([1, 5, 5])

# 搭建神经网络并进行池化操作
class Lgl(nn.Module):
    def __init__(self):
        super(Lgl,self).__init__()
        self.maxpool2 = nn.MaxPool2d(kernel_size=3,ceil_mode=False)

    def forward(self,input):
        return self.maxpool2(input)

# 实例化
l = Lgl()
output = l(input)
print(output)

torch.Size([5, 5])
torch.Size([1, 5, 5])
tensor([[[2.]]], dtype=torch.float64)

此时输出2,符合上述手算推导。

3.最大池化处理CIFAR10数据集图片

示例代码如下:

在这里插入代码片

进行最大池化前
在这里插入图片描述
进行最大池化后
在这里插入图片描述

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

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

相关文章

一些类型推导相关的功能(C++)

目录 auto关键的新用法(C11起) 背景介绍 用法示例 注意事项 typeid运算符 type_info类 typeid的用法 decltype运算符 用法阐述 用法示例 用法建议 function类模板 用法阐述 用法示例 function较函数指针的优势 std::function和decltype的…

苍穹外卖day10——订单状态定时处理(Spring Task)、来单提醒和客户催单(WebSocket)

预期效果 对于超时没处理的需要定时程序处理。基于SpringTask实现。 来单提醒和客户催单。基于WebSocket实现。 Spring Task 介绍 Cron表达式 周几通常不能和日一起指定。 cron表达式在线生成器 在线Cron表达式生成器 入门案例 创建定时任务类 /*** 定义定时任务类*/ Slf4j…

OBS推流工具介绍及桌面录屏推流功能实现

OBS推流工具介绍及桌面录屏推流功能实现 文章目录 OBS推流工具介绍及桌面录屏推流功能实现1 OBS工具介绍2 OBS工具安装及简单使用2.1 安装步骤2.2 简单使用介绍 3 OBS实现桌面录屏推流工具实现4 总结 流媒体开发工程中,我们除了使用ffmpeg等工具辅助调试外&#xff…

《工具箱-数据库相关》Dbeaver数据导入“CSV格式“、“Txt格式“导入配置

《工具箱-数据库相关》DBeaver线下数据导入数据库表 Dbeaver数据导入"CSV格式"、"Txt格式"导入配置 使用CSV、Txt导入的时候,数据格式不同,在导入数据的时候,要根据数据编码样式设置不同的配置。 一、Txt格式导入 1.1 …

汇编语言基础知识

目录 前言: 汇编语言的产生 汇编语言的组成 内存 指令和数据 cpu对内存的读写操作 地址总线 数据总线 控制总线 内存地址空间 前言: 汇编语言是直接在硬件之上工作的 编程语言,我们首先了解硬件系统的机构,才能有效地应用…

CHI中的resp type

Rsp分为4大类; Completion response □ 除了PCrdReturn,PrefetchTgt,其他所有的trans都需要comp resp; □ 通常是一个trans的最后一个发送的message, 来自completer; 这个响应保证trans到达了POS/POC; □ 通常RN还会发送一个compack;Read an…

pytorch深度学习快速入门

放弃个人素质 享受缺德人生 拒绝精神内耗 有事直接发疯 一、安装Anaconda 官网下载地址 选择适合的系统版本进行安装即可 安装完之后,可以看到下面的内容 二、使用Anaconda创建开发环境 这也是为什么要使用Anaconda的原因,可以创建不同的开发环境&am…

剑指offer46.把数字翻译成字符串

一开始我的想法是从后面向前面不断对100取余,如果这个余数大于等于10并且小于等于25,说明这两位既可以做一个大的字母,也可以做两个小的字母。所以对于前面的n-2个数字来说,后面的连个数字使得前面的n-2个数字的结果数翻了一倍&am…

Statefulset 实战 1

上一部分与大家分享到 Statefulset 与 RplicaSet 的区别,以及 Statefulset 的特点,能做的一些事情及一些注意事项 现在我们来尝试使用 Statefulset 来部署我们的应用,我们可以需要有应用程序,然后有持久化卷 开始使用 Statefuls…

28.利用fminsearch、fminunc 求解最大利润问题(matlab程序)

1.简述 1.无约束(无条件)的最优化 fminunc函数 : - 可用于任意函数求最小值 - 统一求最小值问题 - 如求最大值问题: >对函数取相反数而变成求最小值问题,最后把函数值取反即为函数的最大值。 使用格式如下 1.必须预先把函数存…

【机器学习】Gradient Descent for Logistic Regression

Gradient Descent for Logistic Regression 1. 数据集(多变量)2. 逻辑梯度下降3. 梯度下降的实现及代码描述3.1 计算梯度3.2 梯度下降 4. 数据集(单变量)附录 导入所需的库 import copy, math import numpy as np %matplotlib wi…

Django的生命周期流程图(补充)、路由层urls.py文件、无名分组和有名分组、反向解析(无名反向解析、有名反向解析)、路由分发、伪静态

一、orm的增删改查方法(补充) 1. 查询resmodels.表名(类名).objects.all()[0]resmodels.表名(类名).objects.filter(usernameusername, passwordpassword).all()res models.表名(类名).objects.first() # 判断,判断数据是否有# res如果查询…

如何通过github学生包认证(远程不在学校或在校但位置报错均可用)

如何通过github学生包认证 在经历11次被拒绝,查阅多方博客后,终于成功通过了github的学生认证,材料每次重复的话github又会让你提交不同的材料,博主最后都已经要没有材料可以证明自己是学生了,不得不说这个认证是真的…

git使用(由浅到深)

目录流程图 1. 分布式版本控制与集中式版本控制 1.1 集中式版本控制 集中式版本控制系统有:CVS和SVN它们的主要特点是单一的集中管理的服务器,保存所有文件的修订版本;协同开发人员通过客户端连接到这台服务器,取出最新的文件或者提交更新…

【C++】通讯录管理系统

1.系统功能介绍与展示 2.创建项目 3.菜单功能 代码&#xff1a; //-封装函数显示该界面 如 void showMenu() //-在main函数中调用封装好的函数 #include <iostream> using namespace std;//-菜单界面 void showMenu() {cout << "***************************…

Azure pipeline自动化打包发布

pipeline自动化&#xff0c;提交代码后&#xff0c;就自动打包&#xff0c;打包成功后自动发布 第一步 pipeline提交代码后&#xff0c;自动打包。 1 在Repos,分支里选择要触发的分支&#xff0c;这里选择cn_china,对该分支设置分支策略 2 在生产验证中增加新的策略 3 在分支安…

【Linux】yum工具的认识及使用

【Linux】yum工具的认识及使用 1.知识点补充2.yum是什么3.yum常用指令3.1查看软件安装包3.1.1关于rzsz 3.2安装软件3.3卸载软件 4.yum扩展4.1扩展14.2扩展24.3扩展3 什么是工具&#xff1f; 本质上也是指令 1.知识点补充 1.我们一般安装软件&#xff0c;是不是需要把软件安装…

LabVIEW FPGA开发实时滑动摩擦系统

LabVIEW FPGA开发实时滑动摩擦系统 由于非线性摩擦效应的建模和补偿的固有困难&#xff0c;摩擦系统的运动控制已被广泛研究。最近&#xff0c;人们更加关注滑动动力学和滑动定位&#xff0c;作为传统机器人定位的低成本和更灵活的驱动替代方案。摩擦控制器设计和适当选择基础…

JVM类加载器的作用和层次结构

类加载器的作用 1)通过一个类的全限定名来获取定义此类的二进制字节流。 2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3)在内存中生成一个代表这个类的java.lang.Class对象,这个对象存放在方法区中。这个对象将作为程序访问方法区中的这些数据的外部接…

【嵌入式学习笔记】嵌入式入门2——中断(外部中断)

1.什么是中断 打断CPU执行正常的程序&#xff0c;转而处理紧急程序&#xff0c;然后返回原暂停的程序继续运行&#xff0c;就叫中断 1.1.中断的作用与意义 作用1&#xff1a;实时控制在确定时间内对相应事件作出响应——定时器中断作用2&#xff1a;故障处理检测到故障&…