【学习笔记】【Pytorch】八、池化层

news2024/11/19 15:20:03

【学习笔记】【Pytorch】八、池化层

  • 学习地址
  • 主要内容
    • 一、最大池化操作示例
    • 二、nn.MaxPool2d类的使用
      • 1.使用说明
      • 2.代码实现
    • 三、池化公式

学习地址

PyTorch深度学习快速入门教程【小土堆】.

主要内容

一、最大池化操作示例
二、nn.MaxPool2d类的使用
作用:对于输入信号的输入通道,提供2维最大池化(max pooling)操作。
三、池化公式

一、最大池化操作示例

动图演示
在这里插入图片描述

  • 最大池化层(MaxPool),也叫下采样层。
  • 上采样就是低分辨率到高分辨率,下采样就是压缩图片分辨率。
  • 池化最大的作用是增大感受野。能让后面的卷积核看到更全局的内容。
  • 池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。本质是降采样,可以大幅减少网络的参数量

二、nn.MaxPool2d类的使用

from torch.nn import Conv2d

1.使用说明

官方解释
中文解释
在这里插入图片描述
补充

  • dilation:空洞卷积示例,1号格和2号格中间有空格。
    在这里插入图片描述

  • ceil_mode 参数中的ceil(向上取整)、floor(向下取整)
    在这里插入图片描述

2.代码实现

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


class Model(nn.Module):
    def __init__(self):
        super().__init__()  # 父类参数初始化
        self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=True)  # 创建一个实例化
        self.maxpool2 = MaxPool2d(kernel_size=3, ceil_mode=False)  # 创建一个实例化

    def forward(self, input, num):
        if num == 1:
            output = self.maxpool1(input)
        else:
            output = self.maxpool2(input)
        return output


#---------------示例1:二维张量---------------#
# 二维张量,最大池化层的输入应该是torch.float32类型
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)

# 转化为四维张量,batch_size(数据个数)自动计算,,通道数是1,数据维度是5*5
input = torch.reshape(input, (-1, 1, 5, 5))
print(input.shape)  # torch.Size([1, 1, 5, 5])

model = Model()  # 创建一个实例
output1 = model(input, 1)  # 父类__call__
output2 = model(input, 2)  # 父类__call__
print(output1)
print(output2)  # tensor([[[[2.]]]])


#---------------示例1:数据集---------------#
dataset = torchvision.datasets.CIFAR10(root="./dataset", train=False,
                                       transform=torchvision.transforms.ToTensor())  # 创建实例
dataloader = DataLoader(dataset, batch_size=64)  # 创建实例

step = 0
writer = SummaryWriter("./dataloader_logs")  # 创建实例
for data in dataloader:
    imgs, targets = data
    writer.add_images("input", imgs, step)
    output = model(imgs, 1)  # 父类__call__
    # 池化后,通道数不会变,不用reshape
    writer.add_images("output", output, step)
    step += 1

# tensorboard命令:tensorboard --logdir=dataloader_logs --port=6007

输出

torch.Size([1, 1, 5, 5])
tensor([[[[2., 3.],
          [5., 1.]]]])
tensor([[[[2.]]]])

TensorBoard输出
在这里插入图片描述
卷积后通道数可能会变,池化后通道数不会变。

三、池化公式

参考:torch.nn.MaxPool2d
在这里插入图片描述

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

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

相关文章

Min_25筛

概述 Min_25是日本一个ACM选手的ID,这个筛法是他发明的,所以称之为Min_25筛。它能在亚线性复杂度求出一类积性函数的 fff 的前缀和,前提 是这个积性函数在质数和质数的幂位置的函数值比较好求。借助埃拉托色尼筛的思想 将原问题转化成与质因…

华为PIM-SM 动态RP实验配置

目录 建立PIM SM邻居 配置DR 配置动态RP 组成员端DR上配置IGMP 配置PIM安全 配置SPT切换 配置Anycast RP 配置接口的IP地址,并配置路由协议使得全网互通 建立PIM SM邻居 AR5操作 multicast routing-enable 开启组播路由转发功能 int g0/0/0 pim sm …

MacOS对文件夹加密的方法

背景 MacOS没有那种类似于windows那种对文件夹加解密的软件,MacOS自带有一种加解密,但是其实使用体验上跟windows那种很不一样。 win上的加解密都很快,就好像仅仅对文件夹进行加解密(我估计是安全性较低的,因为加密过…

【JavaSE】异常的初步认识

目录 1、初步认识异常 1、算数异常 2、空指针异常 3、数组越界异常 2、异常的结构体系 3、异常的分类 1、编译时异常/受查异常 2、运行时异常/非受查异常 4、异常的处理 1、处理异常的编程方式(防御式编程) 1、事前防御性(LBYL&a…

【软件测试】软件测试基础知识

1. 什么是软件测试 软件测试就是验证软件产品特性是否满足用户的需求 2. 调试与测试的区别 目的不同 调试:发现并解决软件中的缺陷测试:发现软件中的缺陷 参与角色不同 调试:开发人员测试:测试人员,开发人员等&a…

软件测试复习04:动态测试——黑盒测试

作者:非妃是公主 专栏:《软件测试》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录等价划分法边值分析法错误推测法因果图法示例习题等价划分法 等价类:一个几何&#xf…

如何快速搭建自己的阿里云服务器(宝塔)并且部署springboot+vue项目(全网最全)

📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 文章目录📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!一、前言二、准备工作1、新手申请2、安全组设置3、修改实例4.这里可以 直接用阿里云…

【图像处理OpenCV(C++版)】——4.2 对比度增强之线性变换

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

【数据结构】5.7 哈夫曼树及其应用

文章目录前言5.7.1 哈夫曼树的基本概念哈夫曼树的特点5.7.2 哈夫曼树的构造算法哈夫曼树的构造过程哈夫曼算法的实现算法思路算法实现5.7.3 哈夫曼编码哈夫曼编码思想前缀编码哈夫曼编码哈夫曼编码的性质哈夫曼编码的算法实现文件的编码和解码前言 编程:将学生的百…

【精品】k8s(Kubernetes)由基础到实战学法指南

轻松快速学会k8s四招 图1 k8s四招 学完本篇,您会获得什么惊喜? 从初学k8s,到帮助别人学会的过程中,发现朋友们和我,并非不努力,而是没有掌握更好的方法。有方法可让我们学的更快更轻松,这篇文章,以一个networkpolicy的题目,来逐步讲解,帮助大家建立一种,自己可以根…

深入了解延迟队列 DelayQueue

1. 前言 前面我们了解了基于数组,链表实现的阻塞队列,以及优先级队列。今天我们来了解下基于优先级队列的延迟队列,而且今天的内容很核心哦。 大家快搬好小板凳做好,听我慢慢分析 2. 简单实例 Task 类 public class Task implem…

数据结构(字符串)

字符串简称串,由零个或多个字符组成的有限序列,一般记为s=“a0 a1a2…an-1”,(n≥0)。其中s称作串名,用双引号括起来的字符序列是串的值。字符ai(0≤i≤n-1)可以是字母、数字或其它字…

开发第三天(Day 03)

首先对ipl.nas进行修改: ; haribote-ipl ; TAB4ORG 0x7c00 ; 这个程序被读入哪里; 以下是标准FAT12格式软盘的描述JMP entryDB 0x90DB "HARIBOTE" ; 可以自由地写引导扇区的名字 (8字节)DW 512 ; 1扇区…

【动态内存管理】-关于动态内存你只知道四个函数是不够的,这里还有题目教你怎么正确使用函数,还不进来看看??

🎇作者:小树苗渴望变成参天大树 💦作者宣言:认真写好每一篇博客 💢 作者gitee:link 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 🎊动态内存管理&…

adrp 命令为何能获取符号的地址

疑问所在 在linux 启动时,在如下位置会将bootloader 传入的x0 - x3 参数保存到boot_args[] 变量中。代码如下: /* …

神经网络基础部件-损失函数详解

一,损失函数概述 大多数深度学习算法都会涉及某种形式的优化,所谓优化指的是改变 xxx 以最小化或最大化某个函数 f(x)f(x)f(x) 的任务,我们通常以最小化 f(x)f(x)f(x) 指代大多数最优化问题。 在机器学习中,损失函数是代价函数的…

Spring Security 多过滤链的使用

一、背景 在我们实际的开发过程中,有些时候可能存在这么一些情况,某些api 比如: /api/** 这些是给App端使用的,数据的返回都是以JSON的格式返回,且这些API的认证方式都是使用的TOKEN进行认证。而除了 /api/** 这些API…

Qt扫盲-QTextEdit理论总结

QTextEdit理论总结一、概述二、用途一:富文本阅读器1. 用法2. 快捷键绑定三、用途二:编辑器1. 用法2. 拖拽3. 快捷键绑定四、常用功能五、信号一、概述 QTextEdit是一个先进的所见即所得的 富文本 查看器/编辑器,支持使用 html 风格的标签或…

【QT】.pro 文件

🌿作者:阿润菜菜 📖专栏:QT开发 .pro 文件是什么 .pro就是工程文件(project),它是qmake自动生成的用于生产makefile的配置文件。类似于VS中的.sln 和vsproj文件 默认情况下,每个 Qt 项目都包含一个后缀名为…

Huffman编码实现文件的压缩和解压缩

一个项目,不过处理起来也比较麻烦,配套可以和文件传输放一起 前提知识: 哈夫曼树和哈夫曼编码的概念和构建 1:n个数构成的哈夫曼树一共有2*n-1个结点>8 -> 15 2:数字越大的数离根节点越近,越小的数离…