秃姐学AI系列之:池化层 + 代码实现

news2024/9/24 3:28:18

目录

池化层

二维最大池化层 Max Pooling

池化层超参数

平均池化层 Mean Pooling 

总结

代码实现 


池化层

卷积对位置非常敏感的,但是我们在实际应用中我们需要一定程度的平移不变性。比如照明、物体位置、比例、外观等因素会导致图片发生变化。所以卷积对未知太过于敏感不是一个很好的事情。

其次池化层可以减少数据量

二维最大池化层 Max Pooling

每个窗口中最强的模式信号

 可以看出,2 x 2最大池化允许输入由1像素位移(也就是在它窗口里面,允许半个窗口的偏移)。

池化层超参数

  • 和卷积层类似,都具有填充和步幅
  • 没有可学习的参数(与卷积不一样!!)
  • 每个输入通道应用池化层以获得相应的输出通道(不会融合多个通道!!与卷积不同)

因为多通道融合我可以交给卷积来做,池化层可以不这样做

  • 输出通道数 = 输入通道数

平均池化层 Mean Pooling 

将最大池化层中的“最大”操作替换为“平均”

相较于最大池化层,平均池化从会有一个更柔和的结果呈现

总结

  • 池化层返回窗口最大or平均值
  • 主要作用:缓解卷积层对位置的敏感性
  • 通常池化层会作为卷积层之后的操作
  • 同样有窗口大小、填充、步幅作为超参数
  • 对通道分别输出,不进行融合,也就是输入通道数 = 输出通道数
  • 没有可以学习的参数 

代码实现 

 实现池化层的正向传播

import torch
from torch import nn
from d2l import torch as d2l

def pool2d(X, pool_size, mode = 'max'):
    p_h, p_w = pool_size
    Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))   # 套公式算出输出大小
    for i in range(Y.shape[0]):  # 按行迭代
        for j in range(Y.shape[1]):  # 按列迭代
            if mode == 'max':
                Y[i, j] = X[i: i + p_h, j: j + p_w].max()
            elif mode == 'avg':
                Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
    return Y

验证二维最大池化层的输出

X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
pool2d(X, (2, 2))

# 输出
tensor([4., 5.],
       [7., 8.])

验证平均池化层

pool2d(X, (2, 2), 'avg')

# 输出
tensor([[2., 3.],
        [5., 6.]])

填充和步幅

X = torch.arange(16, dtype = torch.float32).reshape((1, 1, 4, 4))
X

# 输出
tensor([[[[0., 1., 2., 3.],
          [4., 5., 6., 7.],
          [8., 9., 10., 11.],
          [12., 13., 14., 15.]]]])

深度学习框架中的步幅与池化窗口的大小相同,所以4 x 4的矩阵只能容纳一个窗口,结果为一个标量

pool2d = nn.MaxPool2d(3)  # 一个3 x 3的窗口
pool2d(X)

# 输出
tensor([[[[10.]]]])

填充和步幅可以手动设定

pool2d = nn.ManPool2d(3, padding = 1, stride = 2)
pool2d(X)

# 输出
tensor([[[[5., 7.],
          [13., 15.]]]])

设定一个任意大小的矩形池化窗口,并分别设定填充和步幅的高度和宽度

pool2d = nn.MaxPool2d((2, 3), padding = (1, 1), stride = (2, 3))
pool2d(X)

# 输出
tensor([[[[1., 3.],
          [9., 11.],
          [13., 15.]]]])

池化层在每个输入通道上单独计算

X = np.concatenate((X, X + 1), 1)
X

# 输出
tensor([[[[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.],
         [12., 13., 14., 15.]],

        [[ 1.,  2.,  3.,  4.],
         [ 5.,  6.,  7.,  8.],
         [ 9., 10., 11., 12.],
         [13., 14., 15., 16.]]]])
pool2d = nn.MaxPool2D(3, padding=1, strides=2)
pool2d(X)

# 输出
array([[[[ 5.,  7.],
         [13., 15.]],

        [[ 6.,  8.],
         [14., 16.]]]])

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

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

相关文章

【WebSocket】websocket学习【二】

1.需求:通过websocket实现在线聊天室 2.流程分析 3.消息格式 客户端 --> 服务端 {"toName":"张三","message":"你好"}服务端 --> 客户端 系统消息格式:{"system":true,"fromName"…

pygame开发课程系列(5): 游戏逻辑

第五章 游戏逻辑 在本章中,我们将探讨游戏开发中的核心逻辑,包括碰撞检测、分数系统和游戏状态管理。这些元素不仅是游戏功能的关键,还能显著提升游戏的趣味性和挑战性。 5.1 碰撞检测 碰撞检测是游戏开发中的一个重要方面,它用…

【C语言】字符函数与字符串函数(下)

字符函数与字符串函数(下) 文章目录 字符函数与字符串函数(下)1.strncpy的使用和模拟实现1.1使用示例:1.2模拟实现 2.strncat的使用和模拟实现2.1使用示例:2.2模拟实现 3.strncmp的使用和模拟实现3.1使用示…

方法汇总 | Pytorch实现常见数据增强(Data Augmentation)【附源码】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

目标检测 | yolov10 原理和介绍

相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…

JS TypeError: Cannot read properties of null (reading ‘getAttribute’) 解决

JS TypeError: Cannot read properties of null (reading ‘getAttribute’) 解决 在JavaScript开发中,TypeError: Cannot read properties of null (reading getAttribute) 是一个常见的错误,它表明你尝试从一个值为null的对象上调用getAttribute方法。…

【AI学习】人工智能的几种主义

无意翻开了杨立昆的《科学之路》,书前有好多人作序,数了一下,八个人的序言,说明,至少有八个人读过这本书。其中黄铁军教授讲到了机器学习的发展历程。 人工智能发展历程中的各种主义,对于外行人大概都是如我…

微信好友恢复,分享4大技巧,快速恢复微信好友

在微信的社交网络中,好友关系的维护至关重要。但有时候,由于误操作或其他原因,我们可能会不小心删除了某些重要联系人。那么,如果想再度找回这些好友,我们应该使用什么方法呢? 别担心,本文将分…

4-1-4 步进电机原理1(电机专项教程)

4-1-4 步进电机原理1(电机专项教程) 4-1-4 步进电机原理1步进基本工作原理步进电机优点步进电机主要部件步进电机基本原理步进电机分类双极性单极性步进电机 4-1-4 步进电机原理1 如何使用arduino控制步进电机 步进电机从原理和工作方法上都更加复杂一些…

打靶记录13——doubletrouble

靶机: https://www.vulnhub.com/entry/doubletrouble-1,743/ 难度: 中 目标: 取得两台靶机 root 权限 涉及攻击方法: 主机发现端口扫描Web信息收集开源CMS漏洞利用隐写术密码爆破GTFObins提权SQL盲注脏牛提权 学习记录&am…

CSP-CCF 202305-1 重复局面

一、问题描述 【题目背景】 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。 【问题描述】 国际象棋每一个局面可以用大小为 88 的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、…

STL六大组件

STL(Standard Template Library,标准模板库)是C标准库的一部分,提供了丰富且高效的数据结构和算法。STL主要由6大组件构成,分别是容器、算法、迭代器、适配器、仿函数和空间配置器。 容器(Containers&#…

Midjourney进阶-反推与优化提示词(案例实操)

​ Midjourney中提示词是关键,掌握提示词的技巧直接决定了生成作品的质量。 当你看到一张不错的图片,想要让Midjourney生成类似的图片,却不知道如何描述画面撰写提示词,这时候Midjourney的/describe指令,正是帮助你推…

AIoTedge边缘计算平台V1.0版本发布

AIoTedge边缘计算平台V1.0,一款创新的AIoT解决方案,现已正式发布。该产品集成了NodeRED软网关、边缘物联网平台和边缘AI能力,为企业提供强大的边云协同能力。它支持设备管理和泛协议接入,确保不同设备间的无缝连接。AIoTedgeV1.0还…

SQL-事务与并发问题

在数据库管理系统中,事务是一个重要的概念,它确保了一组数据库操作要么全部成功,要么全部失败,从而维护数据的完整性和一致性。随着多个用户同时访问数据库,事务的并发处理变得尤为重要。 1. 事务的定义 事务是指一组…

一文读懂推荐系统

随着互联网的飞速发展,信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容,却很难找到真正符合自己兴趣和需求的信息。这时,推荐系统应运而生,它能够根据用户的兴趣和行为,智能地推荐相关内容,…

​与辉同行2日破亿,打工就是在浪费生命,真让罗永浩说对了!​

去年东方甄选的小作文事件发生之后 罗永浩就鼓励董宇辉出来单干还发表了惊天言论,“打工就是在浪费生命” 董宇辉接手“与辉同行”公司后,两天直播总销售额就已经超过了1亿元 难道真让罗永浩说对了,打工就是在浪费生命吗? 打工…

20240819解决飞凌的OK3588-C的核心板的适配以太网卡RTL8211F-CG在百兆模式下通过交换机上外网

20240819解决飞凌的OK3588-C的核心板的适配以太网卡RTL8211F-CG在百兆模式下通过交换机上外网 2024/8/19 18:00 缘由:由于自制的飞凌的OK3588-C的核心板的底板对空间要求高/敏感,并且对网速要求不高,百兆即可满足要求。 也就直接使用千兆网卡…

质量体系 | 这些医疗器械质量管理标准/法规有什么区别?

在医疗器械行业中,确保产品质量和安全至关重要,而ISO 9001、ISO 13485、GMP、中国《医疗器械生产质量管理规范》和QS820等标准/法规为行业提供了明确的指导。 ISO9001 ISO9001:2015 Quality management systems-Requirements(质量管理体系要…

通过ros2服务来控制程序的启动和关闭

运行handle.py程序,启动服务节点,调用服务节点控制程序的启动和关闭,本例为启动和关闭一个python程序(每隔一秒打印hello,world),运行截图如下: 一、创建服务节点 handle.py import rclpy from rclpy.no…