告别代码复制粘贴,傻瓜式提取 PyTorch 中间层特征

Pytorch学习笔记(III)——提取特征 目录一、引言二、具体步骤1、参数模型2、网络结构3、参数载入4、特征提取器5、读取图片三、完整代码 一、引言   深度学习在许多任务中主要充当着特征学习的作用,而学习完的特征才是后续应用的一个关键。本文将主要介绍,如何提取任意目标层的特征图。   本文以输入数据为图片为例。 二、具体步骤 1、参数模型 博主使用了ResNet50训练了一个人脸识别的网络   训练完成的深度学习模型,我们会保存一... 阅读详情

内容导读:特征提取是图像处理过程中常需要用到的一种方法,其效果好坏对模型的泛化能力有至关重要的影响。

特征提取(Feature extraction)在机器学习、模式识别和图像处理中应用广泛。

它从初始的一组测量数据开始,建构出提供信息且不冗余的派生值,即特征值,从而促进后续的学习和泛化步骤。

在使用 PyTorch 进行模型训练的过程中,经常需要提取模型中间层的特征。解决这个问题可以用到 3 种方法。

对中间层进行特征提取的 3 大方法

1、借助模型类的属性传递

方法: 修改 forward 函数,通过添加一行代码将 feature 赋值给 self 变量,即 self.feature_map = feature,然后打印输出即可。

备注: 适用于仅提取中间层特征,不需要提取梯度的情况。

代码示例:

# Define a Convolutional Neural Network
class 
Net(nn.Module):
    
    def __init__(self, kernel_size=5, n_filters=16, n_layers=3):
        xxx
    def forward(self, x): 
        x = self.body(self.head(x))


        self.featuremap1 = x.detach() # 核心代码


        return F.relu(self.fc(x))


model_ft = Net()
train_model(model_ft)
feature_output1 = model_ft.featuremap1.transpose(1,0).cpu()

2、借助 hook 机制

hook 是一个可调用对象,它可以在不修改主代码的前提下插入业务。 PyTorch 中的 hook 包括三种:

torch.autograd.Variable.register_hook

torch.nn.Module.register_backward_hook

torch.nn.Module.register_forward_hook

第一个是针对 Variable 对象的,后两个是针对 nn.Module 对象的。

方法: 在调用阶段对 Module 使用 forward_hook 函数,可以获得所需梯度或特征。

备注: 较为复杂、功能完善,需要对 PyTorch 有一定程度的了解。

3、借助 torchextractor

torchextractor 是一个独立 Python 包,具有跟 nn.Module 功能类似的提取器,只需提供模块名称, 就可以在 PyTorch 中对中间层进行特征提取。

与使用 forward_hook 进行中间层特征提取相比,torchextractor 更像是一个包装程序(wrapper),不像 torchvision IntermediateLayerGetter 有那么多的 assumption。

在功能方面 torchextractor 主要优势在于支持嵌套模块(nested module)、自定义缓存操作,而且与 ONNX 兼容。

torchextractor 极大简化了在 PyTorch 中进行特征提取的流程,这避免了大量代码的粘贴复制,也不需要重写 forward 函数, 它对初学者更友好,可用性也更强。

torchextractor 上手实践

安装

pip install torchextractor  # stable
pip install git+https://github.com/antoinebrl/torchextractor.git  # latest

要求

Python 3.6 及以上版本

Torch 1.4.0 及以上版本

用法

import torch
import torchvision
import torchextractor as tx


model = torchvision.models.resnet18(pretrained=True)
model = tx.Extractor(model, ["layer1", "layer2", "layer3", "layer4"])
dummy_input = torch.rand(7, 3, 224, 224)
model_output, features = model(dummy_input)
feature_shapes = {name: f.shape for name, f in features.items()}
print(feature_shapes)


# {
#   'layer1': torch.Size([1, 64, 56, 56]),
#   'layer2': torch.Size([1, 128, 28, 28]),
#   'layer3': torch.Size([1, 256, 14, 14]),
#   'layer4': torch.Size([1, 512, 7, 7]),
# }

完整文档请查看:

https://github.com/antoinebrl/torchextractor

以上就是本期汇总的 3 个对中间层进行特征提取的方法,如果你有更好的解决思路,或者其他想要了解的 Pytorch 相关问题,欢迎在下方留言或发私信。

参考:

https://www.reddit.com/r/MachineLearning/comments/m2vwf9/p_pytorch_intermediate_feature_extraction/

https://www.zhihu.com/question/68384370

在这里插入图片描述

torchextractor:torchxtractor使特征提取变得简单 割炬:PyTorch中间特征提取 介绍 仅仅因为forward功能未返回用户期望的内容,许多模型定义就被无情地复制粘贴了。 使用torchextractor您可以轻松捕获中间特征图,并在其上构建任何您喜欢的东西。 安装 pip install git+https://github.com/antoinebrl/torchextractor.git 用法 import torch import torchvision import torchextractor as tx model = torchvision . models . resnet18 ( pretrained = True ) model = tx . Extractor ( model , [ "layer1" , "layer2" , "layer3" , "layer4" ]) dummy_input = torch 立即下载

相关推荐

pytorch 输出中间层特征的实例

今天小编就为大家分享一篇pytorch 输出中间层特征的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

PyTorch 提取中间层特征?

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达来源:机器学习算法与自然语言处理编辑:忆臻https://www.zhihu.com/question/68384370本文仅作为学术分享,如果侵权,会删文处理PyTorch提取中间层特征?作者:涩醉https://www.zhihu.com/question/68384370/answer/75121...

小白学视觉 2090

注意力机制详解

注意力机制详解Attention机制由来Attention定义Encoder-Decoder框架存在问题:Attenion机制的引入Attention机制的类别Hard AttentionSoft AttentionGlobal AttentionLocal AttentionSelf AttentionMulti-head Attention附录—Transformer全局视角Tensor视角Encoder部分Self-AttentionSelf-Attention向量计算Self-Attention的矩

weixin_43236310的博客 1万+

pytorch 提取中间层的特征

一、背景 需要提取网络中间层的特征,用于特征工程或者可视化 二、解决方案 先说好,有很多解决的方法呢,这里给出一种我认为是简单的,官方提供的功能 https://pytorch.org/vision/main/generated/torchvision.models.feature_extraction.create_feature_extractor.html#torchvision.models.feature_extraction.create_feature_extractor 核心代码如下 fro

qq_29007291的博客 3971

华为海思2026届数字IC秋招笔试高频考点解析与实战技巧(2025最新版)

本文深入解析华为海思2026届数字IC秋招笔试的高频考点与实战技巧,涵盖时序优化、低功耗设计、DFT规则等核心模块。针对2025年最新真题,提供详细的解题思路和工程经验,帮助考生高效备考。特别关注SystemVerilog约束随机测试等新增考点,助力考生在秋招笔试中脱颖而出。

m2n3o4p5的博客 415

Excel也能玩转K-means聚类?手把手教你用表格搞定用户分群(附完整公式)

本文详细介绍了如何在Excel中实现K-means聚类算法,无需编程即可完成用户分群。通过SUMIF、SQRT等基础函数,从数据预处理到最终分群全流程手把手教学,特别强调数据标准化和迭代优化的关键步骤,帮助运营团队低成本高效分析用户行为数据。

weixin_30555125的博客 181

机器学习实战路径:从数据清洗到项目交付的硬核指南

机器学习不是公式推导或模型堆砌,而是以数据为起点、以工程落地为目标的系统性实践。其核心原理在于:80%工作量在数据准备,模型本质是可诊断可干预的工程模块,项目成败取决于闭环交付能力。技术价值体现在规避‘数据读不进、模型训不动、结果看不懂’三大初学者陷阱,支撑工业缺陷检测、电机声纹识别、边缘端实时分类等真实场景。本文聚焦零基础转行者的真实成长路径,深度融合pandas编码处理、PyTorch训练调试、ONNX本地部署等关键操作,覆盖数据清洗五毒检查、TCN时序建模、Gradio快速交付等高频实战需求。

weixin_33968104的博客 359

数据中台:大数据平台,数据仓库(DM),数据中台之间的联系以及异同分析

大数据平台是一个技术平台。这个技术平台提供了对于大数据的分布式采集,存储,流处理和计算,实时分析等能力。在没有大数据平台前也有数据集成和管理的平台,这种平台可以实现对结构化数据本身的采集,集成和管理。 管理平台,是在原生的大数据生态的基础之上,为了更好的管理集群服务,管理集群的资源,提供灵活SRE能力和资源核算审计能力的一系列工具和合称整体架构数据中台包括数据仓库的全部内容,数据仓库为数据中台提供了数据对外提供服务的基础资源,数据中台将数据仓库建设的投入价值进行最大化,以加快数据赋能业务的速度大家都知道数据

GIS摆渡人 2132

PyTorch提取中间层的特征(Resnet)

特征提取在深度学习的训练中是经常要做的事情,之前的一篇blog有写到使用pytorch提取Vgg、Resnet、Densenet三种模型下的特征,这里所述的是提取全连接层(FC层)的特征,详情可见:https://blog.youkuaiyun.com/qq_34611579/article/details/84330968。 在本文中,主要是介绍提取中间层的特征,对于特征的提取,可以先...

Messi-Q Blog 2万+

【数据集】全球湿度数据集总结

【数据集】全球湿度数据集总结

WW、forever的博客 1661

拼多多Android面试题及参考答案

Android 系统采用分层架构设计,从底层到上层依次为Linux 内核层硬件抽象层(HAL)系统运行时库层应用框架层应用层,共五层。位置:Linux 内核层与系统运行时库层之间,是“硬件与系统的隔离层”。核心作用:屏蔽硬件差异,为上层提供统一的硬件访问接口,解决 Android 开源与硬件厂商闭源的矛盾,具体功能如下:硬件能力抽象:将硬件的具体实现(如不同厂商的摄像头芯片、音频芯片)封装为标准化接口(如Camera HALAudio HAL。

大模型大数据攻城狮的专栏 1284

Pytorch提取预训练模型特定中间层的输出

本博客整理了各种提取预训练模型中间层输出的方法,指出了不同方法的优缺点,方便大家根据自己的需要进行选择。希望帮助大家节省资料查阅的时间,顺利实现自己的任务目标。

m0_58256026的博客 1万+

使用 Visual Studio Code 连接 ABAP On-Premise 系统做开发的详细配置步骤

本文详细介绍了如何在Visual Studio Code中通过ABAP Development Tools扩展连接ABAP On-Premise系统。关键步骤包括:通过Ctrl+Shift+P打开命令行面板选择「ABAP: New Destination...」创建RFC连接(仅支持SSO单点登录),选择本地SAPGUI中已有的系统,输入Client ID、语言和用户名(无需密码),最后将目标系统添加到工作区即可开始开发。文章强调了企业安全考虑下仅支持SSO的设计理念,并展示了连接配置的JSON格式示例。整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 987

pytorch 将模型作为特征提取器(提取中间层特征)

提取模型中间层特征

草鸟的博客 1932

【多模态实验总结】整理了几十篇文章,理清 多模态目标检测 在写论文中需要做哪些实验

此篇文章中将多模态目标检测所做的实验,分成了各个类别,目的是为了对多模态的实验有一个清晰的理解。可以看到,很多表格中放的并不是做了单一的某一个对比,而是将提出的模型,在不同的骨干、数据集上的效果与基线进行对比,使内容更全面。因此这里提到的各种实验,大家在后续改进写论文过程中可以根据自己的论文内容进行整合。对于这里提到的这些文章,大家都可以看看,我只是按照我这里的分类截取了部分实验,这里提到的所有实验在每篇文章中也基本能看到相应的实验。

Limiiiing的博客 3140

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【深度学习】pytorch卷积神经网络中间特征层可视化

在我们使用神经网络的过程中,经常会好奇中间的网络到底学到了些什么,所以常常想用可视化的方法来输出这些特征层,所以惊天带大家用一个简易的网络来输出这些特征层。

千禧皓月的博客 3300

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

torchvision包提图像特征

pytorch 提取图像深度特征

pku_langzi的博客 2468

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Pytorch学习笔记:hook操作——提取特征、梯度等信息

Pytorch学习笔记:hook操作——提取特征、梯度等信息  PyTorch在每一次运算结束后都会释放中间变量,从而节省内存空间,例如释放模型中间得到的特征数据、反向传播过程中的梯度等等,因此就有了hook方法,可以操作中间变量,如保存梯度、保存中间特征数据,也可以对中间变量做修改,如增大梯度、限制梯度范围等等,核心在于hook函数的定义。

qq_50001789的博客 1866

【Pytorch】六行代码实现:特征图提取与特征图可视化

当时是利用实现的,但是有很大缺陷,只能获取到一级的子模块的特征图输出,无法获取内部二级子模块的输出。今天补充另一种Pytorch官方实现好的特征提取方式,非常好用!

capsule的博客 2万+

使用PyTorch执行特征提取和微调的迁移学习来进行图像分类

这篇博客将介绍如何使用PyTorch深度学习库执行图像分类的转移学习。 ① 通过特征提取执行迁移学习 ② 通过微调执行迁移学习 第①种方法通常更容易实现,在某些情况下效果很好。然而,它往往不如第二种方法准确。即模型的准确性和泛化能力都会受到影响。大多数形式的迁移学习都采用②微调。 通常建议使用特征提取方法来获得基线精度。如果准确度足以满足那就太棒了!然而,如果精度不够,那么应该进行微调,看看是否可以提高精度。 无论式通过特征提取还是微调的迁移学习,都会为你节省大量的时间和精力,而不是从头开始训练模型。

qq_40985985的博客 2249

pytorch模型中间层特征的提取

参考pytorch论坛:How to extract features of an image from a trained model 定义一个特征提取的类: #中间特征提取 class FeatureExtractor(nn.Module): def __init__(self, submodule, extracted_layers): super(Featur...

LXX516的博客 1万+

深度学习之图像分类(二)--pytorch查看中间层特征矩阵以及卷积核参数

深度学习之图像分类(二)-- pytorch查看中间层特征矩阵以及卷积核参数深度学习之图像分类(二)pytorch查看中间层特征矩阵以及卷积核参数1. 可视化 feature maps2. 可视化 kernel weights 深度学习之图像分类(二)pytorch查看中间层特征矩阵以及卷积核参数 在开始学习深度学习图像分类模型Backbone理论知识之前,先看看如何在 pytorch 框架中查看中间层特征矩阵以及卷积核参数,学习视频源于 Bilibili。 耳听为虚,眼见为实!可视化 feature ma

木卯_THU的博客 3987

Pytorch输出网络中间层特征可视化

本文主要介绍了如何提取特定层的特征,然后对它进行可视化。最后给出了不同网络的应用案例。

Weary_PJ的博客 1万+

pytorch 输出中间层特征

pytorch 输出中间层特征:tensorflow输出中间特征,2种方式:1. 保存全部模型(包括结构)时,需要之前先add_to_collection 或者 用slim模块下的end_points2. 只保存模型参数时,可以读取网络结构,然后按照对应的中间层输出即可。but:Pytorch 论坛给出的答案并不好用,无论是hooks,还是重建网络并去掉某些层,这些方法都不好用(在我看来)。我们可...

LEILEI18A的博客 1万+
上一篇: 人脸识别对动画无效,迪士尼打造动画专用人脸识别库
下一篇: 计算力就是生产力
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值