自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Batch Normalization 训练与推理期间统计量的区别与累积方法

阶段统计量来源是否更新全局统计量输出稳定性要求训练当前 mini-batch(μₘ, σ²ₘ)是(EMA)允许波动推理全局累积(μ_global, σ²_global)否必须稳定在训练过程中,BN 层会利用每个 mini-batch 计算实时均值和方差,并通过指数加权移动平均方法不断更新全局统计量,以反映整个训练数据集的分布;而在推理阶段,为保证归一化的一致性和稳定性,直接使用累积的全局均值和全局方差进行数据归一化。

2025-04-08 12:38:07 537

原创 PyTorch DataLoader 参数详解

使用DataLoaderbatch_size:控制每个批次的样本数;shuffle:决定数据顺序是否随机打乱;:通过多进程加速数据加载;pin_memory:用于加快 GPU 数据传输;drop_last:确保批次样本数一致;collate_fn:自定义 batch 拼接逻辑。在训练 Stable Diffusion(SD)模型时,通过自定义Dataset类整合图片和 JSON 数据,并合理设置DataLoader的参数,可以显著提升数据加载效率和训练稳定性。

2025-04-08 12:12:40 595

原创 PyTorch 与 Python 装饰器及迭代器的比较与应用

概念Python 装饰器是一种语法糖,用于在不修改原函数代码的前提下动态地增强或改变函数的行为。日志记录性能计时缓存优化权限验证异常处理常见用法:用于保持被装饰函数的元数据(如函数名、文档字符串)。自定义装饰器:例如记录函数调用时间、重试机制等。作用:在训练或调试过程中,可利用装饰器来封装日志记录、异常捕获、性能监控等功能。示例代码。

2025-04-08 11:39:41 997

原创 Flow Matching, Rectified Flow, DDPM, DDIM 的区别与联系

​方法​​理论基础​​训练目标​​采样方式​​速度​​核心优势​​DDPM​随机扩散(SDE)变分下界(ELBO)多步去噪(百-千步)慢生成质量高,理论严谨​DDIM​确定性扩散(ODE)同DDPM,改变采样方式灵活步数(数十步)较快加速采样,兼容DDPM模型​最优传输(ODE)匹配目标概率路径ODE求解(少步)快路径高效,理论简洁​修正流(ODE)迭代优化轨迹直线化极简步数(1-2步)极快超快速采样,通用性强。

2025-04-08 01:03:21 752

原创 层归一化详解及在 Stable Diffusion 中的应用分析

Stable Diffusion 主要采用GroupNorm和LayerNorm,分别用于图像(U-Net、VAE)和文本(CLIP)处理模块;避免使用BatchNorm和,主要因为对 batch size 敏感或表达能力受限;归一化策略是 SD 成功的稳定性关键之一,合理选择不同模块的归一化方式有助于模型更高效、更稳定地训练和推理;如果你在构建自己的扩散模型或进行微调(如 LoRA、ControlNet),建议保留原有归一化配置,避免误用 BN 或 IN 导致生成质量下降。

2025-04-07 23:57:49 827

原创 【PyTorch】矩阵乘法操作大全(dot、*、mm、bmm、@、matmul)详细讲解与对比

需求推荐用法向量点积普通二维矩阵乘法torch.mm()或批量矩阵乘法或matmul()任意维度乘法(推荐)按元素相乘。

2025-04-07 00:37:55 383

原创 PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)

本文提供一个适用于图像输入的多头注意力机制(Multi-Head Attention)PyTorch 实现,适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。

2025-04-06 23:54:27 686 1

原创 常见优化器介绍大全(含 AdamW、Lion、8bit 优化器、DAdaptation 等)

优化器名称是否8bit是否自适应LR内存效率是否需调学习率应用场景AdamW否是中是通用大模型训练AdamW8bit✅是高是多卡训练、节省显存✅✅是极高是单卡大模型微调Lion否否(仅动量)中是图像生成 / Transformer否否高是图像分类、传统 CNN✅否高是轻量部署否✅(动态)中否 ✅快速实验、免调参任务AdaFactor否是✅可选超大模型(如 T5、Switch)训练。

2025-04-06 12:35:53 468

原创 Stable Diffusion XL、SD3 与 Flux 模型常用优化器总结

模型常用优化器调度策略适配场景SDXL全量训练 & 微调SD3多卡大模型训练Flux.1微调 & 显存优化任务。

2025-04-06 12:28:01 636

原创 常见优化器总结(附原理、公式与优缺点)

优化器学习率自适应动量机制收敛速度参数调节适用场景SGD✘✘慢简单通用基础✘✔中中收敛困难时可用Adagrad✔✘前快后慢简单稀疏数据(NLP)RMSprop✔✘快需调γ\gammaγ非平稳目标Adam✔✔快稳定大多数深度模型AdamW✔✔快稳定。

2025-04-06 12:13:10 576

原创 Stable Diffusion 中 Cross Attention 实现原理解析(含代码讲解)

在 Stable Diffusion 的 U-Net 中,是将文本提示与图像特征对齐融合的关键模块,本文将结合一段 Python 实现代码,逐行解释其原理。

2025-04-06 11:43:29 538 1

原创 手把手带你理解 Non-Maximum Suppression(NMS)与 IOU 算法(Python实现)

非极大值抑制(NMS,Non-Maximum Suppression)就是:从多个候选框中,优先选择得分最高的框,并将与它重叠过大的其他框全部去除,重复此操作,直到只剩下相互独立的框。

2025-04-05 18:53:44 936

原创 LeetCode :86. 分隔链表(Python)

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。输入:head = [1,4,3,2,5,2], x = 3。你应当 保留 两个分区中每个节点的初始相对位置。输入:head = [2,1], x = 2。链表中节点的数目在范围 [0, 200] 内。输出:[1,2,2,4,3,5]

2025-03-18 09:43:33 298

原创 Vision Transformer (ViT) 详细描述及 PyTorch 代码全解析

输入图像被分割成多个固定大小的patch,每个patch经过线性投影变成嵌入向量,然后加上位置编码。接着,这些嵌入向量会和类别标签(class token)拼接在一起,输入到多个Transformer块中。每个Transformer块包含多头自注意力机制和前馈网络,最后用类别标签对应的输出来进行分类。

2025-03-09 23:55:53 788

原创 Flow Matching 和 Rectified Flow的区别

是通过匹配目标向量场来训练CNF,比如通过最小化目标向量场和模型预测之间的差异。的核心思想是学习一个确定性轨迹,将数据分布转换为噪声分布,比如通过线性插值或者更复杂的路径。

2025-03-08 22:45:10 1044

原创 扩散模型中三种加入条件的方式:Vanilla Guidance,Classifier Guidance 以及 Classifier-Free Guidance

在生成过程中,模型从一个随机噪声开始,通过多次迭代去噪,最终生成有意义的数据,比如图像。这时候,如果需要生成特定类别的数据,比如生成猫的图像而不是狗的,就需要加入条件引导,控制生成的方向。这就是条件扩散模型的作用。而Classifier-Free Guidance则是在训练时,有时告诉模型生成猫,有时不告诉任何条件,然后在推理时通过调整条件和非条件的权重来加强条件的影响,比如让条件预测的权重更大,从而生成更符合要求的猫的图像。通过理解这三种方法的差异,可根据具体任务需求选择最适合的条件引导策略。

2025-03-08 22:18:22 1092

原创 torch 中 model.eval() 和 model.train() 的作用

在 PyTorch 中,的作用是将模型切换到(training mode),主要影响模型中某些特定层(如 Dropout 和 BatchNorm)的行为,使其在训练时启用随机性和动态统计量。

2025-03-08 21:51:03 444

原创 Triplet Loss原理及 Python实现

Triplet Loss 是一种用于训练特征嵌入(feature embedding)的损失函数,广泛应用于人脸识别、图像检索等需要度量相似性的任务。其核心思想是通过学习将同类样本的嵌入距离拉近,不同类样本的嵌入距离推远。优化的目标是让loss越小越好,使得 d ( d(a,p)−d(a,n)+margin 越小越好,直到d(a,p)−d(a,n)+margin小于等于0,就不优化了。当 d(a,p)+margin<d(a,n) 时,损失为 0,无需优化。margin:超参数,控制正负样本的最小间隔。

2025-03-08 11:30:17 1163

原创 LeetCode 102. 二叉树的层序遍历,BFS(广度优先搜索)(Python)

给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]输入:root = [] 输出:[]

2025-03-07 23:56:26 317

原创 理解BatchNorm和LayerNorm的区别和共同点,以及代码解释

BatchNorm:通过跨样本归一化稳定训练,适合图像等静态数据。LayerNorm:通过单样本归一化处理动态数据,适合序列模型。共同目标:加速收敛,减少对初始化的敏感度。【深度学习】BatchNorm、LayerNorm。

2025-03-06 21:52:06 1749

原创 LeetCode 718.最长重复子数组(动态规划,Python)

给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度。输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]解释:长度最长的公共子数组是。

2025-03-05 17:03:06 347

原创 LeetCode 152.乘积最大子数组(Python)

给你一个整数数组 nums ,请你找出数组中乘积最大的子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。示例 1:输入: nums = [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: nums = [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

2025-03-05 00:18:42 424

原创 除了DeepSpeed,在训练和推理的时候,显存不足还有什么优化方法吗?FlashAttention 具体是怎么做的

显存优化需结合算法、系统、硬件多层面策略,而FlashAttention通过算法创新显著降低了注意力机制的显存需求,是Transformer模型长序列训练的突破性优化。实际应用中,可混合使用多种方法(如混合精度+梯度累积+FlashAttention)实现最佳效果。

2025-03-04 23:53:30 1441

原创 LeetCode 200. 岛屿数量(Python)

下面是一种使用深度优先搜索(DFS)的解决方案。思路是:对于每个格子,如果是陆地(‘1’),则启动一次 DFS,将与该陆地相连的所有陆地都“淹没”(即改为 ‘0’),这样就保证不重复计数。每启动一次 DFS,岛屿数量加 1。

2025-03-04 00:19:45 694

原创 LeetCode 125. 验证回文串(python)

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。给你一个字符串 s,如果它是 回文串 ,返回 true;输入: s = “A man, a plan, a canal: Panama”输出:true 解释:在移除非字母数字字符之后,s 是一个空字符串 “”。解释:“amanaplanacanalpanama” 是回文串。由于空字符串正着反着读都一样,所以是回文串。解释:“raceacar” 不是回文串。输入:s = “race a car”

2025-03-04 00:07:12 370

原创 LeetCode 121.买卖股票的最佳时机(Python)

•。

2025-03-03 23:25:56 774

原创 LeetCode 21. 合并两个有序链表(Python)

比较 l1 与 l2 当前节点的值,将较小的节点接到新链表的尾部,并移动对应链表的指针。来遍历两个链表,比较各自的节点值,将较小值的节点连接到新链表上,直至其中一个链表为空,最后将剩余部分直接接到新链表后面。• 如果 l1.val 小于等于 l2.val,则将 l1 作为当前节点,并将 l1.next 指向递归合并后的结果。的核心思想是:比较两个链表的头节点,较小的那个作为合并后链表的头,然后递归合并剩下的部分。递归完成后,每一层调用都会返回合并后的链表头,最终返回整个合并后的链表。

2025-03-03 22:55:29 385

原创 torch.einsum 的 10 个常见用法详解以及多头注意力实现

torch.einsum 是 PyTorch 提供的一个高效的张量运算函数,能够用紧凑的 Einstein Summation 约定(Einstein Summation Convention, Einsum)描述复杂的张量操作,例如矩阵乘法、转置、内积、外积、批量矩阵乘法等。

2025-03-02 11:31:27 1274

原创 Q-Former 的设计与应用

Q-Former 是 BLIP2 框架中用于实现视觉语义与大规模语言模型(LLM)语义高效融合的关键模块。其主要思想在于利用一组可学习的“软提示”(Learnable Queries),直接将经过预训练的视觉编码器提取到的视觉特征,通过交叉注意力(Cross Attention)的机制转化为更适合后续 LLM 理解的视觉语义表示,从而有效地减少信息转换过程中可能产生的细粒度信息损失。

2025-03-01 23:56:13 949

原创 Diffusion Transformers (DiT) 原理总结

Diffusion Transformers (DiT) 是一种基于Transformer架构的扩散模型,旨在替代传统的U-Net结构,解决其计算冗余、参数效率低和长程依赖建模不足的问题。DiT通过将VAE输出的潜在特征分块并展平成序列,结合ViT的标准架构来处理这些序列,从而提升了生成质量和计算效率。此外,DiT引入了自适应条件注入机制,通过改进的adaLN-Zero块有效融合时间步和类别信息,使得模型能更好地处理不同条件下的生成任务。实验结果表明,DiT在图像生成任务中展现了强大的性能,尤其在Image

2025-02-28 23:41:13 839

原创 ZeRO分布式训练策略

ZeRO(Zero Redundancy Optimizer)是微软提出的分布式训练优化框架,与传统数据并行方法不同,ZeRO通过将模型的参数、梯度和优化器状态分散到多个设备上,从而实现内存和计算资源的高效利用。

2025-02-28 00:54:09 1698

原创 为什么深度学习选择Tensor而非NumPy数组?核心优势深度解析

支持 GPU 加速:Tensor 提供对 GPU 的原生支持,能够有效加速计算,而 NumPy 则通常只能在 CPU 上运行。支持自动求导:深度学习模型的训练依赖于参数的优化,而 Tensor 提供了自动求导功能,避免了手动实现梯度计算的繁琐,NumPy 则不具备该功能。内存管理:Tensor 具有高效的内存管理机制,优化内存使用,而 NumPy 在大规模数据处理时可能存在内存开销较大的问题。分布式训练支持。

2025-02-27 23:25:00 1003

原创 LeetCode 20. 有效的括号

左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。1 <= s.length <= 104 s 仅由括号 ‘()[]{}’ 组成。解法 3:这是一个减少内存占用,增快速度的写法。输入:s = “()[]{}”输入:s = “([])”输入:s = “()”输入:s = “(]”

2025-02-25 23:47:52 461

原创 Leetcode : LCR 174. 寻找二叉搜索树中的目标节点(中序遍历,清晰图解)

1. 合并判断:我们首先检查 if not root or self.cnt == 0,这样可以避免在后续的递归中重复检查 self.cnt == 0。这种优化方式通过合并判断和提前终止递归,使得代码更加简洁,并且避免了重复的 if self.cnt == 0 检查,同时提升了执行效率。2. 早期返回:在 if self.cnt == 0 的地方,我们可以直接返回,避免继续递归其他子树,提升效率。记录结果: 若cnt=0,代表当前节点为第cnt大的节点,因此记录res=root.val;

2025-02-24 17:54:55 739

原创 Flux 结构解读

文本和图片模态的结合:Flux 利用预训练的文本编码器(如T5-XXL 和CLIP-L)提取文本的粗粒度和细粒度特征,将这些文本特征与 图片特征结合。粗粒度的文本信息用于调制生成过程,细粒度的文本特征与图片补丁序列一起作为输入,用于图片生成。潜在空间的噪声预测:模型在潜在的VAE空间中进行噪声预测,通过训练模型在从噪声到数据的转换路径中进行预测。双流和单流结构:模型首先将文本和图片数据输入双流模块,在此阶段,文本和图片作为独立的模态进行处理,并通过注意力机制在两者之间交换信息。

2025-02-24 16:07:44 264

原创 视频模型生成架构

给定输入视频序列和参考肖像图像,从视频中提取表情感知的面部标志点,这些标志点作为运动描述符,用于将表情传递到肖像上。本文的方法基于DiT(扩散Transformer)的条件视频生成框架,将这些表情感知的面部标志点直接集成到输入潜在空间中。该组件将表情感知的面部标志点编码为DiT框架的条件输入,从而使模型能够捕捉关键的低维视觉属性,同时保持面部特征的语义完整性。文本提示通过一个大语言模型编码后作为条件输入模型,引导模型通过对高斯噪声的多步去噪,输出一个视频的隐空间表示。1、HunyuanVideo 的架构。

2025-02-24 11:19:10 233

原创 如何理解“梯度消失”和“梯度爆炸”?(附代码解释)

**梯度消失** 通常发生在反向传播过程中,梯度逐层变得非常小,尤其是在使用某些激活函数(如 Sigmoid 或 Tanh)时。当梯度趋近于零时,网络的早期层几乎不更新,导致网络训练缓慢或停滞。**梯度爆炸** 是在反向传播过程中,梯度值逐层增大,导致更新过大,可能导致模型参数不稳定甚至数值溢出。

2025-02-23 17:13:07 300

原创 PyTorch backward()原理及示例详解。哪些数据需要手动设置 requires_grad=True

backward() 函数的主要作用是根据当前计算图的梯度信息,自动计算出各个张量(tensor)的梯度。具体来说,它通过链式法则(**chain rule**)对损失函数(通常是神经网络的输出与目标值之间的差异)对各个模型参数的梯度进行计算,并把这些梯度储存在每个张量的 .grad 属性中。

2025-02-23 15:37:35 934

原创 leetcode 15. 三数之和

输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 解释: nums[0] +输入:nums = [0,0,0] 输出:[[0,0,0]] 解释:唯一可能的三元组和为 0。• j = 1, k = 5,即 nums[j] = -1 和 nums[k] = 2。1. 排序后: nums = [-4, -1, -1, 0, 1, 2]。3. 最终结果: [[-1, -1, 2], [-1, 0, 1]]。• 时间复杂度: O(n^2),

2025-02-22 23:59:44 334

原创 leetcode 167. 两数之和 II - 输入有序数组

输入:numbers = [2,7,11,15], target = 9 输出:[1,2] 解释:2 与 7 之和等于目标数 9。输入:numbers = [-1,0], target = -1 输出:[1,2] 解释:-1 与 0 之和等于目标数 -1。5. 最后返回 [left + 1, right + 1] = [1, 2],表示索引 1 和 2(即数字 2 和 7)的和为 9。• 13 > 9,所以继续减小和,right -= 1,right 变为 1(指向 7)。返回 [1, 2]。

2025-02-22 23:37:30 868

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除