torch module.apply(fn)说明

PyTorch 中的 apply [autograd.Function] 源码: 是 PyTorch 中用于存储子模块的容器,而 方法可以应用一个函数到 ModuleList 中的每个子模块。具体来说, 方法会递归地将指定的函数应用到 ModuleList 中的每个子模块以及每个子模块的子模块上。这个方法的语法如下: 其中 是要应用的函数,它接受一个 参数并且没有返回值。在 apply() 方法被调用后,会遍历 ModuleList 中的每个子模块,并把这个函数应用到每个子模块上。例如,假设有一个 ModuleList 包含了若干线性层(Linear),我们想要初始化所有 阅读详情

应用的对象应是nn.Module类型或者它的继承类。
可以有children。

比如

class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))
net = Model()

这里的net就是一个Module对象,它包含了children: conv1, conv2

fn用来给childer初始化weight,
比如fn可以这样定义:

def weight_init(m):
    """ Weight initialization function. """
    # Conv2D
    if isinstance(m, nn.Conv2d):
        init.xavier_normal_(m.weight.data)
        if m.bias is not None:
            init.normal_(m.bias.data)
    else:
        pass

用的时候Applies fn recursively to every submodule (as returned by .children()) as well as self.
可看到官方源码如下,先对children应用fn, 再对self应用,最后返回self

def apply(self: T, fn: Callable[['Module'], None]) -> T:
     for module in self.children():
         module.apply(fn)
     fn(self)
     return self

应用例:

net.apply(weight_init)
PyTorch计算图原理:从grad_fn到backward的动态图机制解析 计算图是深度学习框架自动微分的核心抽象,本质是描述张量间数值依赖关系的有向无环图(DAG)。其原理基于链式法则的拓扑反向遍历,通过每个非叶子张量的grad_fn属性实时构建节点,以next_functions维护上游边连接。这种动态图机制赋予PyTorch运行时建图、条件分支适配和灵活梯度控制的技术价值,广泛应用于模型调试、自定义算子开发、GAN训练及梯度监控等工程场景。理解grad_fn、retain_graph与backward执行链,是掌握PyTorch Autograd底层行为的关键起点。 阅读详情

相关推荐

PyTorch Hooks详解:模块级与张量级调试机制

Hooks是PyTorch中实现模型内部数据流可观测性的核心机制,其本质是在前向/反向传播关键节点插入自定义逻辑的回调接口。原理上分为Module级(绑定于nn.Module,监控结构化计算路径)和Tensor级(绑定于requires_grad=True的叶子张量,捕获细粒度梯度动态),二者协同构成完整的调试闭环。技术价值在于无需修改模型代码即可实现梯度诊断、中间特征提取与动态行为干预,显著提升训练可复现性与问题定位效率。典型应用场景包括梯度消失检测、注意力热力图生成、可微分剪枝及LoRA微调等。本文聚焦

diandingyin9417的博客 422

Pytorch apply() 函数

apply 函数是nn.Module 中实现的, 递归地调用self.children() 去处理自己以及子模块 我们知道pytorch的任何网络net,都是torch.nn.Module的子类,都算是module, 也就是模块。 pytorch中的model.apply(fn)会递归地将函数fn应用到父模块的每个子模块submodule,也包括model这个父模块自身。经常用于初始化init_weights的操作 ......

hxxjxw的博客 1万+

PyTorch自动微分与计算图原理深度解析

计算图是深度学习框架的核心抽象,它将神经网络的前向传播建模为有向无环图(DAG),并依托自动微分(Automatic Differentiation)实现高效梯度计算。其底层原理并非符号微分或数值微分,而是基于链式法则的反向传播在运行时动态构建的梯度流拓扑结构。这一机制赋予PyTorch动态图灵活性,支撑条件分支、动态网络结构等工程需求,同时带来内存管理、梯度生命周期等独特调试挑战。在GPU训练、模型部署及梯度优化等实际场景中,理解Autograd引擎如何协同Tensor、Function与Engine组件

weixin_34130389的博客 543

(原)torch的apply函数

转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221633.html   torch中的apply函数通过可以不断遍历model的各个模块。实际上其使用的是深度优先算法。 其具体代码如下所示(代码见torch/install/share/lua/5.1/nn/Module.lua): -- Run a callback (called...

weixin_34186931的博客 1818

PyTorch Autograd 原理与实战:动态图、Function 机制与梯度调试

Autograd 是 PyTorch 实现自动微分的核心机制,本质是一种运行时动态计算图构建系统,基于 tensor 的 requires_grad 标志和 operation 的 Function 封装实现链式求导。其原理不依赖静态图编译或语法解析,而是在前向执行中实时记录运算依赖关系,形成由 grad_fn 指针串联的有向无环图。这种设计赋予模型对 Python 控制流(if/for)的天然支持,显著提升算法研发灵活性;同时通过 ctx.save_for_backward 等细粒度内存管理策略,在显存效

chikuai9995的博客 457

PyTorch CNN实战手记:可调试、可复现、可部署的工业级训练指南

卷积神经网络(CNN)是计算机视觉任务的核心架构,其原理基于局部感受野与参数共享机制,通过多层卷积、非线性激活和下采样实现特征层次化提取。掌握PyTorch中CNN的工程化实现,关键在于理解张量形状传播规则、权重初始化策略(如kaiming_normal_)与设备协同管理,这直接决定模型能否稳定收敛、高效训练。在真实场景中,开发者常面临DataLoader报错、loss发散、CUDA内存溢出等典型问题,需结合torchsummary形状追踪、混合精度训练(torch.cuda.amp)和Grad-CAM可视

benben 539

Pytorch:torch.nn.Module.apply用法详解

`torch.nn.Module.apply` 是 PyTorch 中用于递归地应用函数到模型的所有子模块的方法。它允许对模型中的每个子模块进行操作,比如初始化权重、改变参数类型等

weixin_42046845的博客 1933

PyTorch Autograd计算图与反向传播原理深度解析

计算图是深度学习框架实现自动微分的核心抽象,本质为运行时动态构建的有向无环图(DAG),承载前向计算路径与梯度传播逻辑。其原理基于链式法则的深度优先遍历,由Autograd引擎驱动,在`loss.backward()`触发后逐节点调用`Function.backward`完成梯度累积。该机制赋予PyTorch调试直观、控制流原生、内存按需等工程优势,但也带来`in-place`操作破坏图、`cat`/`stack`梯度路径分裂、`requires_grad`传播异常等典型陷阱。理解计算图生命周期与`grad

weixin_34377919的博客 614

torch.nn.Module.apply(fn)

参考链接: torch.nn.Module.apply(fn)

敲代码的小风 7613

Python 音频: sounddevice 使用 左声道/右声道/立体声 --- 播放,录音

# coding: utf8 """ Python 音频: 使用 sounddevice 操作声卡的 左声道, 右声道, 立体声 仅限 MME, Windows DirectSound, Windows WASAPI, Windows WDM-KS 等支持双声道的驱动类型 """ import os import sounddevice as sd import soundfile mapping_left_ch = 1 # 左声道为 1 mapping_right_ch

weixin_42019925的博客 4926

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 471

model.apply(fn)或net.apply(fn)

首先,我们知道pytorch的任何网络net,都是torch.nn.Module的子类,都算是module,也就是模块。 pytorch中的model.apply(fn)会递归地将函数fn应用到父模块的每个子模块submodule,也包括model这个父模块自身。 比如下面的网络例子中。net这个模块有两个子模块,分别为Linear(2,4)和Linear(4,8)。函数首先对Linear(2,4)和Linear(4,8)两个子模块调用init_weights函数,即print(m)打印Linear(2,4

qq_37025073的博客 2万+

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

7、深入剖析PyTorch nn.Module源码

文章目录1. 重要类 1. 重要类

scar2016的博客 907

MPU6050的四元数解算姿态方法

使用MPU6050硬件DMP解算姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件解算姿态的方法。 我们先来看看如何用欧拉角描述一次平面旋转(坐标变换): MPU6050的四元数解算姿态方法 设坐标系绕旋转α角后得到坐标系,在空间中有一个矢量在坐标系中的投影为,在内的投影为由于旋转绕进行,所以Z坐标未变,即有。 转换成矩阵形式表示为: 即 所以从旋转到可以写成上面仅仅是绕一根轴的旋转,如果三维空间中的欧拉角旋转要转三次: MPU6050的四元数解算姿态方法 上面得到了一个表示旋转的方

qq_41938005的博客 8390

【VTKExamples::PolyData】第十六期 GradientFilter

本文分享VTK样例GradientFilter,并解析接口vtkGradientFilter & vtkAssignAttribute,希望对各位小伙伴有所帮助!

qq_40041064的博客 318

Autograd学习

Autograd是PyTorch的:根据前向计算自动,在backward()时按该图,无需手动写倒数。

weixin_50924373的博客 205

线程池详解(通俗易懂超级好)

目标 【理解】线程池基本概念 【理解】线程池工作原理 【掌握】自定义线程池 【应用】java内置线程池 【应用】使用java内置线程池完成综合案例 线程池 线程池基础 线程池使用 线程池综合案例 4.学员练习 5.线程池总结 概念介绍 1:什么是线程池 2:为什么使用线程池 3:线程池有哪些优势 什么是池 什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runna.

拉格朗日的学习笔记 12万+

PyTorch模型封装实战:从nn.Module到CIFAR-10图像分类

在深度学习工程实践中,模型封装是构建可维护、可复用代码的核心概念。其原理在于通过面向对象编程思想,将网络层、参数和前向传播逻辑组织为高内聚的模块单元,这不仅提升了代码的清晰度,更便于参数管理、设备迁移和模型保存。从技术价值看,良好的封装是工程化落地的基石,能显著提升开发效率和团队协作能力。在应用场景上,无论是计算机视觉中的图像分类、目标检测,还是自然语言处理中的序列建模,模块化设计都至关重要。本文以PyTorch的`nn.Module`为切入点,结合**损失函数**与**优化器**这两个关键组件,通过构建一

weixin_30383279的博客 394

基于单光子探测的高重频多通道符合测距

TDC专栏之基于单光子探测的高重频多通道符合测距

sdau2005的博客 1202

什么是 SAP ABAP Secure Storage

此过程将单独的密钥存储在密钥路径中的密钥文件中,并自动使用新加密密钥加密安全存储中的所有数据记录。需要注意的是,不要在没有命令行工具的情况下操作密钥文件,例如,不要用不同的版本替换密钥文件,否则,安全存储中的数据记录可能变得不可读。当需要访问这些数据时,系统会对其进行解密。文件系统中的安全存储(Secure Storage in the File System)也是 SAP NetWeaver Application Server for ABAP 的一部分,主要用于安全存储连接相关的数据,如密码等。

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

Pytorch:TypeError: apply() missing 1 required positional argument: ‘fn‘(已解决)

TypeError: apply() missing 1 required positional argument: 'fn'(已解决)

Vertira的博客 2567

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PyTorch原生10倍加速LLaMA推理:torch.compile+KV缓存优化实战

大语言模型本地推理性能瓶颈往往不在GPU算力,而在CPU调度、内存拷贝与KV缓存管理等系统级开销。理解Transformer自回归生成的本质——‘计算→缓存→循环’闭环,是实现高效推理的前提。基于PyTorch 2.0+的torch.compile机制,通过编译器级图优化、预分配KV缓存、prefill/decode分离编译及轻量张量并行,可在不依赖vLLM、llama.cpp等第三方库的前提下,将LLaMA-7B在单卡A100上的吞吐从24提升至244 token/s。该方案兼顾工程可维护性与硬件利用率,

diegouyi3472的博客 428

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

PyTorch核心架构与深度学习框架设计解析

深度学习框架作为现代人工智能工程的核心基础设施,其架构设计直接影响模型开发效率与系统性能。PyTorch采用模块化设计理念,从基础张量运算到高层神经网络构建,形成了完整的计算图体系。在自动微分领域,动态计算图技术通过grad_fn属性和Function类实现高效的反向传播,解决了传统静态图的灵活性不足问题。框架内置的nn.Module采用组合模式设计,配合Parameter类和状态字典机制,大幅提升了复杂模型的构建效率。在分布式训练场景下,DDP模块通过all-reduce梯度同步策略,结合混合精度训练技术

weixin_34238633的博客 324

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TensorFlow 2.x 与 PyTorch 2.0 模型搭建对比:3个核心API差异与MNIST实战代码

本文对比了TensorFlow 2.x与PyTorch 2.0在模型搭建中的核心API差异,包括模型定义、训练流程和关键API操作,并以MNIST手写数字识别为例提供实战代码。通过详细分析两者的设计哲学和性能表现,帮助开发者在人工智能项目中做出更精准的技术选型。

weixin_34320724的博客 380

PyTorch内部机制深度解析:从Autograd到执行引擎的核心原理

自动微分是现代深度学习框架的核心技术,它通过构建计算图自动计算梯度,极大简化了神经网络的训练过程。其原理基于链式法则,在动态计算图中记录前向传播的操作序列,并在反向传播时按逆序执行梯度计算。这一机制的技术价值在于实现了模型训练的自动化,让开发者能够专注于模型设计而非繁琐的梯度推导。在PyTorch等主流框架中,自动微分广泛应用于神经网络训练、优化器更新以及自定义层实现等场景。本文将结合PyTorch Internals手册,深入剖析Tensor元数据、Autograd引擎与执行调度的协同工作机制,帮助开发者

weixin_34208185的博客 385
上一篇: PixelShuffle原理笔记(paper,pytorch实现)
下一篇: leetcode 763. Partition Labels(划分字母区间)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值