动手学深度学习之卷积神经网络之池化层
池化层
卷积层对位置太敏感了,可能一点点变化就会导致输出的变化,这时候就需要池化层了,池化层的主要作用就是缓解卷积层对位置的敏感性

二维最大池化
这里有一个窗口,来滑动,每次我们将窗口中最大的值给拿出来

还是上面的例子,这里的最大池化窗口为2*2

填充、步幅和多个通道
这里基本与卷积层类似,与卷积层不同的是,池化层不需要学习任何的参数

平均池化层
与最大池化层不同的地方在于将最大操作子变为平均,最大池化层是将每个窗口中最强的信号输出,平均池化层就是取每个窗口中的平均效果

总结

实现池化层
import torch
from torch import nn
from d2l import torch as d2l# 实现池化层的正向传播,这里没有padding,没有stride
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)) # 这里我们创建一个4*4的矩阵,通道为1,批量大小为1
X
tensor([[[[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.],[12., 13., 14., 15.]]]])
# PyTorch中的步幅与池化层窗口的大小相同
pool2d = nn.MaxPool2d(3) # 这里3的意思就是一个3*3的窗口,这里没有指定步幅和填充
pool2d(X)
/Users/tiger/opt/anaconda3/envs/d2l-zh/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at ../c10/core/TensorImpl.h:1156.)return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)tensor([[[[10.]]]])
# 手动设定填充和步幅
pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)
tensor([[[[ 5., 7.],[13., 15.]]]])
# 设定一个任意大小的矩形池化窗口,并分别设定填充和步幅的高度和宽度
pool2d = nn.MaxPool2d((2, 3), padding=(1, 1), stride=(2, 3)) # 这里padding是对称的,这里的stride和窗口大小一样不重叠
pool2d(X)
tensor([[[[ 1., 3.],[ 9., 11.],[13., 15.]]]])
# 池化层在每个输入通道上单独运算
X = torch.cat((X, X + 1), 1) # 这里cat是拼接两个张量,1的意思是按照维度1来拼接
pool2d = nn.MaxPool2d(3, padding=1, stride=2) # padding参数是有一个行和宽的,假设我们指定一个数的话,他的padding就是等于那个值,如果用一个元组的话前面的就是对于行的padding,后面的就是对于列的padding
pool2d(X)
tensor([[[[ 5., 7.],[13., 15.]],[[ 6., 8.],[14., 16.]]]])
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树>首页>概览384043 人正在系统学习中
相关文章:
动手学深度学习之卷积神经网络之池化层
池化层 卷积层对位置太敏感了,可能一点点变化就会导致输出的变化,这时候就需要池化层了,池化层的主要作用就是缓解卷积层对位置的敏感性 二维最大池化 这里有一个窗口,来滑动,每次我们将窗口中最大的值给拿出来 还是上…...
HackTheBox - Medium - Linux - Ambassador
Ambassador Ambassador 是一台中等难度的 Linux 机器,用于解决硬编码的明文凭据留在旧版本代码中的问题。首先,“Grafana”CVE (“CVE-2021-43798”) 用于读取目标上的任意文件。在研究了服务的常见配置方式后,将在其…...
嵌入式——循环队列
循环队列 (Circular Queue) 是一种数据结构(或称环形队列、圆形队列)。它类似于普通队列,但是在循环队列中,当队列尾部到达数组的末尾时,它会从数组的开头重新开始。这种数据结构通常用于需要固定大小的队列,例如计算机内存中的缓冲区。循环队列可以通过数组或链表实现,…...
2024.1.7-实战-docker方式给自己网站部署prometheus监控ecs资源使用情况-2024.1.7(测试成功)
实战-docker方式给自己网站部署prometheus监控ecs资源使用情况-2024.1.7(测试成功) 目录 最终效果 原文链接 https://onedayxyy.cn/docs/prometheus-grafana-ecs 参考模板 https://i4t.com/ https://grafana.frps.cn 🔰 额,注意哦: 他这个是通过frp来…...
20240107 SQL基础50题打卡
20240107 SQL基础50题打卡 1978. 上级经理已离职的公司员工 表: Employees ----------------------- | Column Name | Type | ----------------------- | employee_id | int | | name | varchar | | manager_id | int | | salary | int | -…...
阿里云公网带宽出网和入网是什么?上行和下行是什么?
什么是阿里云服务器ECS的入网带宽和出网带宽?以云服务器为中心,流入云服务器占用的带宽是入网带宽,流量从云服务器流出的带宽是出网带宽。阿里云服务器网aliyunfuwuqi.com分享入网带宽和出网带宽说明表: 带宽类别说明入网带宽&am…...
eureka工作原理是什么
EUREKA 是一个基于 RESTful 风格的服务发现系统,它主要用于帮助实现在微服务架构中的服务自动发现与注册。其工作原理主要包括以下几个步骤: 注册中心:EUREKA 中有一个集中的注册中心,所有的服务都将在此注册和发现。注册中心可以…...
Vue中的事件委托(事件代理)使用方法介绍
事件委托(事件代理) 将原本需要绑定在子元素上的事件监听器委托在父元素上,让父元素充当事件监听的职务。 事件委托是一种利用事件冒泡的特性,在父节点上响应事件,而不是在子节点上响应事件的技术。它能够改善性能&a…...
「HDLBits题解」Wire decl
本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接:Wire decl - HDLBits default_nettype none module top_module(input a,input b,input c,input d,output out,output out_n ); w…...
[MAUI]在.NET MAUI中调用拨号界面
在.NET MAUI中调用拨号界面 前置要求: Visual Studio 2022 安装包“.NET Multi-platform App UI 开发” 参考文档: 电话拨号程序 新建一个MAUI项目 在解决方案资源管理器窗口中找到Platforms/Android/AndroidManifest.xml在AndroidManifest.xml中添加下文中…块如下:<?xml…...
Kali/Debian Linux 安装Docker Engine
0x01 卸载旧版本 在安装Docker Engine之前,需要卸载已经安装的可能有冲突的软件包。一些维护者在他们的仓库提供的Docker包可能是非Docker官方发行版,须先卸载这些软件包,然后才能安装Docker官方正式发行的Docker Engine版本。 要卸载的软件…...
Spring 应用合并之路(二):峰回路转,柳暗花明 | 京东云技术团队
书接上文,前面在 [Spring 应用合并之路(一):摸石头过河]介绍了几种不成功的经验,下面继续折腾… 四、仓库合并,独立容器 在经历了上面的尝试,在同事为啥不搞两个独立的容器提醒下,…...
SQL Error 1366, SQLState HY000
SQL错误 1366 和 SQLState HY000 通常指的是 MySQL 与字符编码或数据截断有关的问题。当尝试将数据插入具有与正在插入的数据不兼容的字符集或排序规则的列时,或者正在插入的数据对于列来说过长时,就会出现此错误。 解决方式: 检查列长度&am…...
Codeforces Round 893 (Div. 2)(VP-7,寒假加训)
VP时间 A. 关键在于按c的按钮 c&1 Alice可以多按一次c按钮 也就是a多一个(a) 之后比较a,b大小即可 !(c&1) Alice Bob操作c按钮次数一样 1.ac B.贪心 一开始会吃饼干 如果有卖饼的就吃 如果隔离一段时间到d没吃就吃(当时…...
MySQL第四战:视图以及常见面试题(上)
目录 目录: 一.视图 1.介绍什么是视图 2.视图的语法 语法讲解 实例操作 二.MySQL面试题 1.SQL脚本 2.面试题实战 三.思维导图 目录: 随着数字化时代的飞速发展,数据库技术,特别是MySQL,已经成为IT领域中不可…...
C语言程序设计——程序流程控制方法(一)
C语言关系运算符 ---等于ab!不等于a!b<、>小于和大于a>b 、a<b<、>小于等于、大于等于a>b 、a<b!非!(0)、!(NULL) 在C99之后,C语言开始支持布尔类型,头文件是stdbool.h。在文中我所演示的所有代码均是C99版。 在C语言上上述关…...
torch.backends.cudnn.benchmark
torch.backends.cudnn.benchmark 的设置对于使用 PyTorch 进行深度学习训练的性能优化至关重要。具体而言,它与 NVIDIA 的 CuDNN(CUDA Deep Neural Network library)库有关,该库是在 GPU 上加速深度神经网络计算的核心组件。 启用…...
SQL Server从0到1——写shell
xp_cmdshell 查看能否使用xpcmd_shell; select count(*) from master.dbo.sysobjects where xtype x and name xp_cmdshell 直接使用xpcmd_shell执行命令: EXEC master.dbo.xp_cmdshell whoami 发现居然无法使用 查看是否存在xp_cmdshell: EXEC…...
计算圆弧的起始角度、终止角度和矩形信息并使用drawArc绘制圆弧
Qt中常用绘制圆弧的库函数: //函数原型 void QPainter::drawArc(const QRectF &rectangle, int startAngle, int spanAngle)Qt规定1约占16个像素,比如一个完整的圆等于360度,对应的像素角度就是 5760度(16 * 360)…...
C++ Trie树模版 及模版题 || Trie字符串统计
Trie树:用来高效的存储和查找字符串集合的数据结构。 维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 x ; Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作,所有输入的字符串总长度不超过 1…...
文墨共鸣大模型长期记忆(LSTM)优化对话体验:实现多轮深度交流
文墨共鸣大模型长期记忆(LSTM)优化对话体验:实现多轮深度交流 你有没有遇到过这样的情况:和一个智能助手聊天,聊到第三四轮的时候,它好像就忘了你最开始说了什么,回答开始跑偏,或者…...
Proxifier规则配置避坑指南:如何精准放行微信/QQ流量,让你的渗透测试更丝滑
Proxifier规则配置实战:精准分流社交软件流量的高阶技巧 渗透测试工程师们对Proxifier这款工具应该都不陌生——它就像网络流量的交通指挥官,能精准地将不同应用程序的请求导向代理或直连通道。但实际使用中,不少人都遇到过这样的尴尬&#x…...
避坑指南:用conda管理TensorFlow环境时如何避免FailedPreconditionError日志目录冲突
避坑指南:用conda管理TensorFlow环境时如何避免FailedPreconditionError日志目录冲突 在深度学习项目开发中,TensorFlow作为主流框架之一,其环境配置的稳定性直接影响开发效率。许多开发者习惯使用conda进行Python环境管理,但在Te…...
PostgreSQL实战:使用pg_dump精准导出特定模式下的表结构
1. 为什么需要精准导出特定模式下的表结构 在实际的数据库管理工作中,我们经常会遇到只需要导出特定模式(schema)下表结构的需求。比如在微服务架构中,每个服务可能对应数据库中的一个模式;或者在进行数据库迁移时&…...
告别DLSS版本迷宫:DLSS Swapper如何实现3步智能优化
告别DLSS版本迷宫:DLSS Swapper如何实现3步智能优化 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 核心价值:解决三大核心矛盾,让DLSS管理化繁为简 您是否曾遇到这样的场景&#x…...
华为交换机-跨Vlan通信的实战配置指南
1. 华为交换机跨VLAN通信的核心原理 第一次接触跨VLAN通信时,我也被那些专业术语搞得一头雾水。直到把整个流程拆解成生活场景,才真正理解其中的奥妙。想象一下,VLAN就像公司里的不同部门,财务部、技术部、市场部各自在独立的办公…...
从HPA到DepMap:手把手教你用蛋白质和细胞系数据,为你的单基因故事补充关键实验证据
从HPA到DepMap:数据驱动的单基因研究实验设计指南 当你在实验室里凝视着那个刚刚从测序数据中脱颖而出的候选基因时,是否曾为如何设计后续验证实验而犹豫不决?现代生物学研究早已告别了"试错式"的实验盲选时代。本文将带你系统掌握…...
周红伟:OpenClaw 企业级智能体架构与全栈实战
周红伟“世界级 OpenClaw 智能体全栈实战培训方案”。 这套方案融合了架构设计、全链路开发、安全部署与商业落地四大维度,旨在帮助企业团队从“理论认知”跨越到“工程化落地”,构建具备生产级能力的AI智能体系统。 🚀 培训主题:…...
万物识别-中文镜像步骤详解:从镜像pull到浏览器验证的12个关键节点
万物识别-中文镜像步骤详解:从镜像pull到浏览器验证的12个关键节点 你是不是也遇到过这样的场景:看到一张图片,想知道里面是什么东西,但手动搜索又麻烦又慢?或者,你的项目需要批量识别图片内容,…...
如何用ADB提升调试效率?掌握这8个核心技巧
如何用ADB提升调试效率?掌握这8个核心技巧 【免费下载链接】awesome-adb ADB Usage Complete / ADB 用法大全 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb ADB(Android Debug Bridge)是Android调试的瑞士军刀࿰…...
