【深度学习入门篇 ⑦】PyTorch池化层
【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】
大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙·终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。
池化层 (Pooling) 降低维度,缩减模型大小,提高计算速度. 即: 主要对卷积层学习到的特征图进行下采样(SubSampling)处理 。
- 通过下采样,我们可以提取出特征图中最重要的特征,同时忽略掉一些不重要的细节。
- 上采样是指增加数据(图像)的尺寸;通常用于图像的分割、超分辨率重建或生成模型中,以便将特征图恢复到原始图像的尺寸或更大的尺寸。
池化层
池化包含最大池化和平均池化,有一维池化,二维池化,三维池化,在这里以二维池化为例
最大池化
最大池化就是求一个区域中的最大值,来代替该区域。
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
假设输入的尺寸是(𝑁,𝐶,𝐻,𝑊),输出尺寸是(𝑁,𝐶,𝐻𝑜𝑢𝑡,𝑊𝑜𝑢𝑡),kernel_size是(𝑘𝐻,𝑘𝑊),可以写成下面形式 :

其中,输入参数 kernel_size,stride,padding,dilation可以是
- 一个 int :代表长宽使用同样的参数
- 两个int组成的元组:第一个int用在H维度,第二个int用在W维度
import torch
import torch.nn as nn
#长宽一致的池化,核尺寸为3x3,池化步长为2
ml = nnMaxPool2d(3, stride=2)
#长宽不一致的池化
m2 = nn.MaxPool2d((3,2), stride=(2,1))
input = torch.randn(4,3,24,24)
output1 = m1( input)
output2 = m2( input)
print( "input.shape = " ,input.shape)
print( "output1.shape = " , output1.shape)
print( "output2.shape = " , output2.shape)
输出:
input.shape = torch.size([4,3,24,24])
output1.shape = torch. size([4,3,11,11])
output2.shape = torch.size([4,3,11,23])
平均池化
平均池化就是用一个区域中的平均数来代替本区域
torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
import torch
import torch.nn as nn
#长宽一致的池化,核尺寸为3x3,池化步长为2
ml = nn. AvgPool2d( 3, stride=2)
#长宽不一致的池化
m2 = nn. AvgPool2d(( 3,2), stride=(2,1) )
input = torch.randn(4,3,24,24)
output1 = m1( input)
output2 = m2( input)
print("input.shape = ",input. shape)
print("output1.shape = " , output1.shape)
print( "output2.shape = ", output2.shape)
- randn是生成形状为[batch_size, channels, height, width]
输出:
input.shape = torch.size([4,3,24,24])
output1.shape = torch.size([4,3,11,11])
output2.shape = torch.size([4,3,11,23])
BN层
BN,即Batch Normalization,是对每一个batch的数据进行归一化操作,可以使得网络训练更稳定,加速网络的收敛。

import torch
import torch.nn as nn
#批量归一化层(具有可学习参数)
m_learnable = nn. BatchNorm2d(100)
#批量归一化层(不具有可学习参数)
m_non_learnable = nn.BatchNorm2d(100,affine=False)
#随机生成输入数据
input = torch.randn(20,100,35,45)
#应用具有可学习参数的批量归一化层
output_learnable = m_learnable(input)
#应用不具有可学习参数的批量归一化层
output_non_learnable = m_non_learnable(input)
print( "input.shape = ", input.shape)
print( "output_learnable.shape = ", output_learnable.shape)
print( "output_non_learnable.shape = ", output_non_learnable.shape)
输出:
input.shape = torch.size([20,100,35,45])
output_learnable.shape = torch.size( [20,100,35,45])
output_non_learnable.shape = torch.size([20,100,35,45])
常见的层就是上面提到的这些,如果这些层结构被反复调用,我们可以将其封装成一个个不同的模块。
案例:复现LeNet
LeNet结构,使用PyTorch进行复现,卷积核大小5x5,最大池化层,核大小2x2
import torch
import torch.nn as nn
from torchsummary import summary
class LeNet( nn . Module):def _init_( self,num_classes=10):super(Leet, self)._init__()self.conv1 = nn.conv2d( in_channels=3,out_channels=6,kernel_size=5)self.pool1 = nn. MaxPool2d(kernel_size=2)self.conv2 = nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)self.pool2 = nn. MaxPool2d(kernel_size=2)self.conv3 = nn.conv2d(in_channels=16,out_channels=120, kernel_size=5)self.fc1 = nn.Linear(in_features=120,out_features=84)self.fc2 = nn.Linear(in_features=84,out_features=10)def forward(self, x):#通过卷积层、ReLU和池化层x = self.conv1(x)x = self.pool1(x)x = self.conv2(x)x = self.pool2(x)x = self.conv3(x)x = x.view( -1,120)x = self.fc1(x)x = self.fc2(x)return x
#创建网络实例
num_classes = 10
net = LeNet( num_classes)#创建一个输入
batch_size = 4
input_tensor = torch.randn(batch_size,3,32,32)
# 假设输入是32x32的RGB图像
#将输入Tensor传递给网络
output = net(input_tensor)
# #显示输出Tensor的形状
print(output.shape)
summary(net,(3,32,32))
Sequential: 顺序容器
Sequential属于顺序容器。模块将按照在构造函数中传递的顺序从上到下进行运算。
使用OrderedDict,可以进一步对传进来的层进行重命名。
#使用sequential来创建小模块,当有输入进来,会从上到下依次经过所有模块
model = nn. Sequential(
nn.conv2d(1,20,5),nn.ReLu() ,
nn.conv2d(20,64,5),nn.ReLU()
)
#使用orderedDict,可以对传进来的模块进行命名,实现效果同上
from collections import orderedDict
model = nn. sequential ( orderedDict([( 'conv1 ', nn.Conv2d( 1,20,5)),( 'relu1 ', nn.ReLU( ) ),( 'conv2 ', nn.conv2d(20,64,5)),( 'relu2 ', nn.ReLU())
]))
除此之外,还可以用 ModuleList和 ModuleDict 来存放子模块,但是用的不多,掌握了上面的内容就足够了。
相关文章:
【深度学习入门篇 ⑦】PyTorch池化层
【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…...
【Pytorch】数据集的加载和处理(一)
Pytorch torchvision 包提供了很多常用数据集 数据按照用途一般分为三组:训练(train)、验证(validation)和测试(test)。使用训练数据集来训练模型,使用验证数据集跟踪模型在训练期间…...
论文翻译:Explainability for Large Language Models: A Survey
https://arxiv.org/pdf/2309.01029 目录 可解释性在大型语言模型中:一项调查摘要1 引言2 LLMs的训练范式2.1 传统微调范式2.2 提示范式 3 传统微调范式的解释3.1 局部解释3.1.1 基于特征归因的解释3.1.2 基于注意力的解释3.1.3 基于示例的解释 3.2 全局解释3.2.1 基…...
38 IRF+链路聚合+ACL+NAT组网架构
38 IRF+链路聚合+ACL+NAT组网架构 参考文献 34 IRF的实例-CSDN博客 35 解决单条链路故障问题-华三链路聚合-CSDN博客 36 最经典的ACL控制-CSDN博客 37 公私网转换技术-NAT基础-CSDN博客 32 华三vlan案例+STP-CSDN博客 一 网络架构...
【昇思学习打卡营打卡-第二十八天】MindNLP ChatGLM-6B StreamChat
MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 安装mindnlp pip install mindnlp安装mdtex2html pip install mdtex2html配置网络线路 export HF_ENDPOINThttps://hf-mirror.com代码开发 下载权重大约需要10分钟 from mindnlp.transf…...
前端打包部署后源码安全问题总结
随着现代Web应用越来越依赖于客户端技术,前端安全问题也随之突显。源码泄露是一个严重的安全问题,它不仅暴露了应用的内部逻辑和业务关键信息,还可能导致更广泛的安全风险。本文将详细介绍源码泄露的潜在风险,并提供一系列策略和工…...
扩展你的App:Xcode中App Extensions的深度指南
扩展你的App:Xcode中App Extensions的深度指南 在iOS开发的世界中,App Extensions提供了一种强大的方式,允许你的应用程序与系统和其他应用更紧密地集成。从今天起,我们将探索Xcode中App Extensions的神秘领域,学习如…...
【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(下)
当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 ✔️ 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事…...
Solus Linux简介
以下是学习笔记,具体详实的内容请参考官网:Home | Solus Solus Linux 是一个独立的 Linux 发行版,它以其现代的设计、优化的性能和友好的用户体验而著称。以下是一些关于 Solus Linux 的最新动向和特点: 1. **最新版本发布**&a…...
常见的排序算法,复杂度
稳定 / 非稳定排序:两个相等的数 排序前后 相对位置不变。插入排序(希尔排序): 每一趟将一个待排序记录,按其关键字的大小插入到已排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。稳定&…...
鸿蒙特色物联网实训室
一、 引言 在当今这个万物皆可连网的时代,物联网(IoT)正以前所未有的速度改变着我们的生活和工作方式。它如同一座桥梁,将实体世界与虚拟空间紧密相连,让数据成为驱动决策和创新的关键力量。随着物联网技术的不断成熟…...
JVM垃圾回收-----垃圾分类
一、垃圾分类定义 垃圾分类是JVM垃圾分类中的第一步,这一步将堆中的对象分为存活对象和垃圾对象两类。 在垃圾分类阶段,JVM会从一组根对象开始,通过对象之间的引用关系,遍历所有的对象,并将所有存活的对象进行标记。…...
前端基础之JavaScript学习——变量、数据类型、类型转换
大家好,我是来自CSDN的博主PleaSure乐事,今天我们开始有关JS的学习,希望有所帮助并巩固有关前端的知识。 我使用的编译器为vscode,浏览器使用为谷歌浏览器,使用webstorm或其他环境效果几乎一样,使用系统自…...
SQL常用数据过滤---IN操作符
在SQL中,IN操作符常用于过滤数据,允许在WHERE子句中指定多个可能的值。如果列中的值匹配IN操作符后面括号中的任何一个值,那么该行就会被选中。 以下是使用IN操作符的基本语法: SELECT column1, column2, ... FROM table_name WH…...
HDFS和FDFS
HDFS(Hadoop Distributed File System)和FDFS(FastDFS)是两种不同的分布式文件系统,它们各自有不同的设计目标和使用场景。以下是对它们的详细介绍: HDFS(Hadoop Distributed File System&…...
Flutter对接FlutterBugly 报错Zone mismatch
在Flutter对接FutterBlugy时报如下错误: Unhandled Exception: Zone mismatch. E/flutter ( 1292): The Flutter bindings were initialized in a different zone than is now being used. This will likely cause confusion and bugs...
Docker缩小镜像体积与搭建LNMP架构
镜像加速地址 {"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live"] } daemon.json 配置文件里面 bip 配置项中可以配置docker 的网段 {"graph": "/data/docker", #数据目录࿰…...
六边形动态特效404单页HTML源码
源码介绍 动态悬浮的六边形,旁边404文字以及跳转按钮,整体看着像科技二次元画风,页面简约美观,可以做网站错误页或者丢失页面,将下面的代码放到空白的HTML里面,然后上传到服务器里面,设置好重定向即可 效果预览 完整源码 <!DOCTYPE html> <html><head…...
BGP路径属性
路径属性分类 1. 公认属性(所有 BGP 路由器都能识别) (1) 公认必遵 a) AS path b)Origin c) Next hop (2) 公认任意 a) local preference b)atomic aggregate 2. 可选属性(…...
从零开始学量化~Ptrade使用教程(六)——盘后定价交易、港股通与债券通用质押式回购
盘后固定价交易 实现科创板、创业板的盘后固定价交易,界面如下显示: 交易 输入科创板或创业板代码,选择委托方向,输入委托价格、委托数量,点击“买入”或“卖出”按钮进行委托。可出现一个委托提示框提示是否继续委托操…...
mob源码深度解析:Go语言实现高效Git协作工具的架构奥秘
mob源码深度解析:Go语言实现高效Git协作工具的架构奥秘 【免费下载链接】mob Tool for smooth git handover. 项目地址: https://gitcode.com/gh_mirrors/mo/mob 在团队协作开发中,Git代码交接常常成为效率瓶颈。mob作为一个用Go语言编写的Git协作…...
【软考高级架构】案例题考前突击——构建可观测与弹性服务架构的实践设计
案例分析题:构建可观测与弹性服务架构的实践设计 案例背景 某金融科技公司搭建了基于Spring Cloud 的微服务系统,用于支撑其多租户 SaaS 金融平台,核心功能包括用户管理、交易撮合、支付结算、风控审计等模块。由于业务快速扩张、团队并行开发,系统逐渐暴露出如下痛点: …...
CellSpectra的创新视角:从差异表达到协调性分析
单细胞RNA测序(scRNA-seq)让我们得以在单细胞分辨率下解析基因表达模式。然而,差异表达分析仅能识别单体基因变化,难以刻画基因间的协同调控;通路富集分析无法实现个体水平的统计推断;高稀疏性则进一步制约…...
RNA-seq公司推荐
RNA-seq公司推荐 伯远生物是国内高通量测序综合性服务商,聚焦RNA-seq全场景服务,覆盖临床、科研、农业等领域,提供一站式测序与分析解决方案; 其临床转化与大样本服务市占率领先,依托自研平台实现高通量、成本可控&…...
AIoT网关50+AI算法硬核加持,AIoT边缘计算赋能千行百业
在物联网与人工智能深度融合的时代,边缘侧的智能感知与决策能力成为行业数字化转型的核心。计讯物联TG465系列5G AIoT边缘计算机,以50成熟视觉AI算法为核心,搭载工业级强悍硬件,打造"AIIoT深度融合"的多模态智能体&…...
“八股文”已死?2026技术校招面试官亲述:我们现在只问这三个真实项目题
上个月公司校招,我坐在面试间里,对面是一个985硕士。简历漂亮:GPA前10%,两段大厂实习,技能栏写满了Spring Cloud、Kafka、Redis。 我问了第一个问题:“你简历上写做过秒杀系统,那我想知道&#…...
软考高项案例分析14:项目配置、变更管理
软考高项案例分析14:项目配置、变更管理 一、配置管理 1. 配置管理活动有哪些 制订配置管理计划 配置项识别 配置项控制 配置状态报告 配置审计 配置管理回顾与改进 2. 基线配置项和非基线配置项 基线配置项:包含所有的设计文档和源程序; 非基线配置项:包括项目的…...
从鸟群到AI:Parisi的复本对称破缺,如何成为理解复杂世界的通用钥匙?
无序中的秩序:复本对称破缺如何重塑复杂系统认知 1. 从自旋玻璃到普适范式 1975年的一个寒冷冬日,物理学家Giorgio Parisi在罗马大学的办公室里凝视着杂乱的计算手稿。他当时可能并未意识到,自己即将揭开复杂系统科学最深刻的奥秘之一——复本…...
AhabAssistantLimbusCompany终极指南:10分钟快速掌握智能自动化技巧
AhabAssistantLimbusCompany终极指南:10分钟快速掌握智能自动化技巧 【免费下载链接】AhabAssistantLimbusCompany AALC,PC端Limbus Company小助手。AALC,Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mirrors/ah/Aha…...
ChromeKeePass深度解析:如何实现KeePass密码自动填充的强力浏览器扩展?
ChromeKeePass深度解析:如何实现KeePass密码自动填充的强力浏览器扩展? 【免费下载链接】ChromeKeePass Chrome extensions for automatically filling credentials from KeePass 项目地址: https://gitcode.com/gh_mirrors/ch/ChromeKeePass 你是…...
