30分钟吃掉pytorch中的各种归一化层

pytorch中的归一化:BatchNorm、LayerNorm 和 GroupNorm 训练深度神经网络是一项具有挑战性的任务。 多年来,研究人员提出了不同的方法来加速和稳定学习过程。 归一化是一种被证明在这方面非常有效的技术。 阅读详情

一,归一化层概述

归一化技术对于训练深度神经网络非常重要。

它们的主要作用是让模型的中间层的输入分布稳定在合适的范围,加快模型训练过程的收敛速度,并提升模型对输入变动的抗干扰能力。

各种归一化层使用的公式都是一样的,如下所示:

其中的 和 是可学习的参数。注意到,当 恰好取标准差,恰好取均值时,归一化层刚好是一个恒等变换。这就能够保证归一化层在最坏的情况下,可学习为一个恒等变换,不会给模型带来负面影响。

本文节选自 eat pytorch in 20 days 的 《5-2,模型层》前半部分。公众号后台回复关键词:pytorch,获取本文全部源代码和吃货本货BiliBili视频讲解哦🍉🍉

二,BatchNorm和LayerNorm的差别?

pytorch中内置的归一化层包括 nn.BatchNorm2d(1d), nn.LayerNorm, nn.GroupNorm, nn.InstanceNorm2d 等等。

其中最常用的是BatchNorm2d(1d)和LayerNorm。

不同的归一化层的差异主要是计算均值和方差时候参与计算的数据不一样。

BatchNorm是在样本维度进行归一化(一个批次内不同样本的相同特征计算均值和方差),而LayerNorm是在特征维度进行归一化(同一个样本的不同特征计算均值和方差)。

BatchNorm常用于结构化数据(BatchNorm1D)和图片数据(BatchNorm2D),LayerNorm常用于文本数据。

import torch 
from torch import nn 

batch_size, channel, height, width = 32, 16, 128, 128

tensor = torch.arange(0,32*16*128*128).view(32,16,128,128).float() 

bn = nn.BatchNorm2d(num_features=channel,affine=False)
bn_out = bn(tensor)


channel_mean = torch.mean(bn_out[:,0,:,:]) 
channel_std = torch.std(bn_out[:,0,:,:])
print("channel mean:",channel_mean.item())
print("channel std:",channel_std.item())
channel mean: 1.1920928955078125e-07
channel std: 1.0000009536743164
import torch 
from torch import nn 

batch_size, sequence, features = 32, 100, 2048
tensor = torch.arange(0,32*100*2048).view(32,100,2048).float() 

ln = nn.LayerNorm(normalized_shape=[features],
                  elementwise_affine = False)

ln_out = ln(tensor)

token_mean = torch.mean(ln_out[0,0,:]) 
token_std = torch.std(ln_out[0,0,:])
print("token_mean:",token_mean.item())
print("token_mean:",token_std.item())
token_mean: -5.8673322200775146e-08
token_mean: 1.0002442598342896

三,为什么不同类型的数据要使用不同的归一化层?

  • 结构化数据通常使用BatchNorm1D归一化 【结构化数据的主要区分度来自每个样本特征在全体样本中的排序,将全部样本的某个特征都进行相同的放大缩小平移操作,样本间的区分度基本保持不变,所以结构化数据可以做BatchNorm,但LayerNorm会打乱全体样本根据某个特征的排序关系,引起区分度下降】

29fbfdba82fab667c83e268c7006dbe0.jpeg
  • 图片数据最常用的是BatchNorm2D,有些场景也会用LayerNorm,GroupNorm或者InstanceNorm【图片数据的主要区分度来自图片中的纹理结构,所以图片数据的归一化一定要在图片的宽高方向上操作以保持纹理结构,此外在Batch维度上操作还能够引入少许的正则化,对提升精度有进一步的帮助。】

2e766719f19fbfbed2e54532039a9cd1.jpeg
  • 文本数据一般都使用LayerNorm归一化 【文本数据的主要区分度来自于词向量(Embedding向量)的方向,所以文本数据的归一化一定要在 特征(通道)维度上操作 以保持 词向量方向不变。此外文本数据还有一个重要的特点是不同样本的序列长度往往不一样,所以不可以在Sequence和Batch维度上做归一化,否则将不可避免地将padding位置对应的向量和普通的词向混合起来进行归一,这会让变成padding对应的向量变成非零向量,从而对梯度产生不合预期的影响。即使做特殊处理让padding位置的向量不参与归一化保持为0值,由于样本间序列长度的差异,也会造成参与运算的归一的数据量在不同样本和批次间剧烈波动,不利于模型的稳定学习。】

fde868160d27d7cce84eac92b71c6bde.jpeg
  • 有论文提出了一种可自适应学习的归一化:SwitchableNorm,可应用于各种场景且有一定的效果提升。【SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。参考论文:https://arxiv.org/pdf/1806.10779.pdf】

四,BatchNorm补充问题

(1)BatchNorm放在激活函数前还是激活函数后?

原始论文认为将BatchNorm放在激活函数前效果较好,后面的研究一般认为将BatchNorm放在激活函数之后更好。

(2)BatchNorm在训练过程和推理过程的逻辑是否一样?

不一样!训练过程BatchNorm的均值和方差和根据mini-batch中的数据估计的,而推理过程中BatchNorm的均值和方差是用的训练过程中的全体样本估计的。因此预测过程是稳定的,相同的样本不会因为所在批次的差异得到不同的结果,但训练过程中则会受到批次中其他样本的影响所以有正则化效果。

(3)BatchNorm的精度效果与batch_size大小有何关系?

如果受到GPU内存限制,不得不使用很小的batch_size,训练阶段时使用的mini-batch上的均值和方差的估计和预测阶段时使用的全体样本上的均值和方差的估计差异可能会较大,效果会变差。这时候,可以尝试LayerNorm或者GroupNorm等归一化方法。

本文节选自 eat pytorch in 20 days 的 《5-2,模型层》前半部分。公众号后台回复关键词:pytorch,获取本文全部源代码和吃货本货BiliBili视频讲解哦🍉🍉

b9f92ee9d8125d818dd01f541b8062f2.png

pytorch中有哪些归一化的方式? 将输入数据缩放到特定范围(如[0, 1]或[-1, 1]normalized_x = (x - x_min) / (x_max - x_min) # 归一化到 [0, 1]2. 批归一化 (Batch Normalization) 阅读详情

相关推荐

【Timm 问题1】LayerNorm2d

所以我直接找到/home/sla/.conda/envs/sla_envs/lib/python3.8/site-packages/timm/models/layers/norm.py", line 23, 修改。在timm 0.8.6.dev0 version中。安装的timm 是0.4.12 version。如果有问题, 请留言。

挪威的深林的博客 1190

Pytorch归一化(MinMaxScaler、零均值归一化)

pytorch实现两种归一化:minmaxscaler、零均值归一化

飞机火车巴雷特的博客 4万+

PyTorch实战:5分钟搞定Conv+BN融合,推理速度提升30%的秘诀

本文详细介绍了在PyTorch中实现卷积层与批归一化层融合的实战技巧,通过结构重参数化技术将训练时的Conv-BN序列合并为推理时的单一卷积层。该方法能显著提升模型推理效率,实测在移动端可带来超过30%的加速,并降低内存占用,且不损失模型精度。文章提供了完整的融合代码、性能对比及部署避坑指南。

weixin_28223453的博客 318

pytorch中的归一化函数

在 PyTorch 的nn模块中,有一些常见的归一化函数,用于在深度学习模型中进行数据的标准化和归一化。这些函数用于批量归一化 (Batch Normalization) 操作。它们可以应用于一维、二维和三维数据,通常用于卷积神经网络中。批量归一化有助于加速训练过程,提高模型的稳定性。Layer Normalization 是一种归一化方法,通常用于自然语言处理任务中。它对每个样本的每个特征进行归一化,而不是对整个批次进行归一化。可用于一维数据。

thy0000的博客 4957

PyTorch工业级深度学习实战:从电路板缺陷检测看模型调试与部署

深度学习在工业视觉场景中并非理论推演,而是受限于数据质量、硬件约束与工程鲁棒性的系统性实践。理解神经网络的前向传播与反向传播原理是基础,但真正决定落地成败的是对PyTorch底层机制的掌控能力——包括梯度流动监控、显存优化技巧、数据增强的物理建模,以及TensorRT部署中的精度与延迟权衡。Focal Loss与IoU Loss组合解决小样本缺陷识别的类别不平衡与定位漂移问题;GroupNorm替代BatchNorm缓解产线光照变异导致的归一化失真;而手动构建训练循环与state_dict保存策略,则保障了

weixin_30274627的博客 411

PyTorch vs PyTorch Lightning:项目阶段驱动的AI训练工程选型指南

深度学习训练框架本质上是工程效率与控制粒度的权衡。PyTorch提供全栈可控的底层抽象,适合算法探索与定制化研究;PyTorch Lightning则通过契约式编程(如LightningModule、Trainer、DataModule)将设备管理、梯度同步、日志聚合等重复劳动封装为可配置组件,显著降低协作熵值与维护成本。其技术价值在于将分布式训练、混合精度、早停检查点等高阶能力降维为参数配置,使团队能聚焦模型逻辑而非基础设施。典型应用场景包括中大型AI产研团队的MLOps落地、多卡快速迭代实验、以及从原型

weixin_33719619的博客 310

PyTorch实战:5分钟搞定RMSNorm层实现(附完整代码)

本文详细介绍了如何在PyTorch中高效实现RMSNorm层,包括基础版本、内存优化版本和CUDA加速版本。通过对比实验,展示了RMSNorm在计算效率、内存占用和训练稳定性方面的优势,特别适合大规模语言模型的应用场景。附完整代码实现和性能优化技巧,帮助开发者快速集成RMSNorm到深度学习项目中。

ooo22的博客 198

2020年机器学习工程化关键博客指南:PyTorch、Triton与弱监督实战

机器学习博客是连接前沿研究与工业落地的重要桥梁,其核心价值在于提供可复现、可调试、带失败记录的实操知识。在框架快速迭代(如PyTorch 1.4–1.7跃迁)、部署复杂度上升(Triton动态批处理)、数据瓶颈凸显(弱监督兴起)的背景下,高质量技术博客成为工程师解决‘毫米级问题’的关键信源。它不止于概念讲解,更聚焦数值稳定性、模型监控、标签噪声治理等MLOps真实挑战,并通过作者身份锚定、错误披露密度、技术栈时效性等维度保障信息可信度。本文精选2020年最具工程指导力的12个博客,覆盖理论穿透、工程鲁棒、数

ajwqb06628的专栏 449

gRPC 的 Kokoro 内部 CI 体系:tools/internal_ci 任务配置与测试脚本入口全解析

gRPC 是一个横跨 C++、Python、Ruby、Objective-C、PHP、C# 等多语言的 RPC 框架,其绝大部分开源测试都由名为 "Kokoro"(又称 "internal CI")的持续集成工具承载。本文以仓库内 [tools/internal_ci/README.md](https://link.gitcode.com/i/a8baf6164ccb4e47cfad365d061

gitblog_00109的博客 1070

PyTorch模型生产部署:分层熔断、特征固化与可观测性实战

机器学习模型部署远不止于导出pkl或启动Flask服务,其本质是构建具备故障容错、低延迟响应、数据漂移感知与业务韧性的工程系统。从模型序列化、CUDA环境兼容性到特征预处理固化,再到Unix Socket通信隔离与Prometheus原生埋点,每一个决策都直接影响线上稳定性与推理可信度。本文聚焦PyTorch模型在真实生产环境中的关键断点——包括无CUDA环境加载、FP16输入校验、计算层OOM防控及蓝绿发布原子性升级,结合分层熔断架构与冷热分离特征工程,为电商推荐、工业质检、金融风控等高并发、强SLA场景

weixin_33700350的博客 405

梯度下降原理与实战:从直觉理解到PyTorch训练全流程

梯度下降是机器学习最基础的优化算法,其核心是利用损失函数对模型参数的梯度(即局部变化率)确定最速下降方向,通过迭代更新参数以最小化预测误差。它依赖可导性、学习率调控和批量策略三大支柱,广泛应用于线性回归、逻辑回归及深度神经网络等场景。理解梯度的向量本质、学习率对收敛性的影响,以及Mini-batch在效率与稳定性间的平衡,是掌握模型训练的关键。本文结合数学推导、手写代码与PyTorch工程实践,系统解析梯度下降从概念到落地的完整链路,并覆盖标准化、交叉熵选择、梯度诊断、Adam优化等高频实战要点。

weixin_30781433的博客 373

告别模型水土不服:用TENT的熵最小化,5分钟搞定PyTorch模型的在线自适应

本文介绍了如何使用TENT技术实现PyTorch模型的在线自适应调优,通过熵最小化策略快速适应新数据分布。TENT仅需调整BN层参数,无需重新标注数据,5行代码即可集成到现有项目,适用于医疗影像、自动驾驶等场景,显著提升模型在新环境中的表现。

weixin_30729609的博客 367

ZBrush 2021来了

这次给大家带来的是:zbrush2021.1.1 win安装教程 1.下载压缩包之后解压到文件夹当中,然后打开ZBrush_2021_Installer.exe进行软件安装, 如下图 2.在这里我们保持默认的简体中文版即可,然后点击确认,如下图 3.第三步我们点击前进即可,如下图 4.第四步我们来到许可协议,在这里我们点击我接受此协议,然后点击前进,如下图 5.第五步我们来到安装目录,在这里我们可以设置安装路径,如下图 6.在这里我将安装目录修改安装到E盘为例,然后点击下一

3D游戏建模 1189

使用PyTorch构建生成对抗网络(GAN)实战教程

通过PyTorch与CUDA加速,结合容器化镜像环境,快速实现DCGAN生成手写数字图像。涵盖网络结构设计、训练流程、GPU优化及工程实践技巧,帮助开发者高效掌握生成对抗网络的核心技术与部署方法。

weixin_42612804的博客 789

Python自动化办公:5分钟搞定钉钉群文件自动发送(附完整代码)

本文详细介绍了如何利用Python实现钉钉群文件的自动化发送。通过结合钉钉企业内部应用与群机器人API,构建了包含智能令牌管理、文件上传与消息发送的完整工作流。文章提供了可直接复用的完整代码,并分享了定时任务、目录监听等进阶实战方案,帮助职场人士高效解决重复性文件发送难题,实现办公自动化。

7z8x2c4v6b9的博客 328

【simulink模型】独立悬架振动模型,七自由度整车simulink模型

车辆悬架系统的设计对提升车辆行驶平顺性和操纵稳定性具有重要意义。本文构建了独立悬架的振动仿真模型以及七自由度整车动力学模型,基于 Simulink 平台实现对模型的动态响应仿真。通过对比不同工况下的车辆振动响应,验证了模型的准确性与实用性。研究结果为车辆悬架系统的优化设计提供了有力支持。

2401_84610415的博客 1584

PyTorch-OpCounter终极指南:如何通过计算量统计优化GPU利用率

想要在PyTorch项目中实现最佳性能优化?THOP(PyTorch-OpCounter)正是你需要的终极工具!这个强大的PyTorch扩展库专门用于精确计算深度学习模型的MACs(乘加操作)和FLOPs(浮点操作),帮助你深入理解模型的计算复杂度,从而做出更明智的优化决策。 ## 🔥 为什么需要PyTorch-OpCounter? 在深度学习开发中,我们经常面临这样的挑战: - 模型训练速

gitblog_00073的博客 666

Spring AI实现RAG(检索增强生成)详解与实践

支持多种文件格式的文档加载实现高效的向量存储和检索构建智能的问答系统提供可追溯的知识服务RAG技术为AI应用提供了强大的知识增强能力,使得模型能够基于实际文档生成准确、可靠的回答。

beiduofen2011的专栏 1239

如何5分钟部署高精度口罩检测系统:面向开发者的完整指南

在疫情防控常态化背景下,智能口罩检测技术已成为公共场所安全防护的重要工具。FaceMaskDetection项目凭借其轻量化设计和多框架支持,为开发者提供了一套完整的解决方案。 ## 项目价值与场景应用 口罩检测系统在现代社会具有广泛的应用价值,从公共交通枢纽到商业办公区域,从医疗机构到餐饮场所,都需要快速准确地识别口罩佩戴情况。本项目支持多种深度学习框架,包括PyTorch、TensorFl

gitblog_01082的博客 596

Windows 10/11下Drive Composer Pro 2.9.0完整安装与连接ACS880变频器实战教程

本文详细介绍了在Windows 10/11系统上安装Drive Composer Pro 2.9.0并连接ACS880变频器的完整教程。从系统环境准备、软件安装到许可证配置,再到USB、蓝牙和以太网三种连接方式的实战操作,帮助工业自动化工程师快速掌握ABB变频器的调试技巧。

weixin_32956805的博客 530

RK3588芯片CAN总线调试秘籍:SocketCAN与错误帧攻略

RK3588芯片在嵌入式领域凭借8nm工艺和强大性能成为核心控制器。本文详细介绍了其CAN总线配置流程,包括硬件连接、内核驱动配置及SocketCAN命令操作,并深入解析了CAN通信中的错误帧机制及分析方法。通过智能工厂案例,展示了从问题定位到解决方案的全过程,强调了稳定通信对工业应用的重要性。文章为RK3588的CAN总线应用提供了实用技术参考,并对未来智能诊断技术在该领域的应用进行了展望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 521

5分钟上手regnety_064.pycls_in1k:从安装到图像分类的完整指南

想要快速掌握高效的图像分类技术吗?🤔 今天我们将为您带来一份完整的RegNetY-6.4GF模型使用指南,让您在短短5分钟内就能上手这个强大的深度学习模型!无论您是AI初学者还是经验丰富的开发者,这份指南都将帮助您轻松实现图像分类任务。💪 RegNetY-6.4GF(regnety_064.pycls_in1k)是一个基于RegNet架构的高性能图像分类模型,由Facebook Resear

gitblog_00211的博客 472

【STM32项目】基于stm32智能鱼缸控制系统的设计与实现(完整工程资料源码)

随着现代化经济的快速发展,物质条件富足的人开始追求精神富足,越来越多的人通过饲养观赏鱼来充实生活、释放压力,但并非所有饲养者都有时间和经验来管理好鱼缸。一种由单片机控制,可实时检测和调节鱼缸环境,可把鱼缸环境实时反映给用户并能被用户远程操控的系统,可以解决养鱼成活率低、耗费时间和精力、参与感不强等诸多难题。

嵌入式技术开发 7355

PyTorch从零实现GPT-2:手写可训练、可调试的Transformer骨架

Transformer是现代大语言模型的核心架构,其本质是基于自注意力与前馈网络的堆叠式编码器结构。理解其底层原理需穿透API封装,掌握位置编码、多头注意力、LayerNorm、梯度流等关键组件的数学表达与工程实现。技术价值在于摆脱黑盒依赖,支撑定制化训练(如课程学习、token-level reward建模)、低延迟推理优化及跨架构迁移(Llama/Qwen/Phi-3)。典型应用场景包括金融风控中的相对位置建模、医疗文本生成的细粒度loss掩码、边缘设备上的数值稳定性加固。本文聚焦GPT-2的PyTor

Ha12312的博客 469

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

零基础入门:用PyTorch Lightning快速搭建CIFAR-10分类器(GPU加速版)

本文详细介绍了如何使用PyTorch Lightning快速搭建CIFAR-10图像分类器,并利用GPU加速提升训练效率。通过模块化设计和自动化流程,即使是零基础开发者也能在30分钟内完成项目部署,涵盖数据管道构建、CNN模型设计、训练配置及性能优化等关键步骤。

git9versioner的博客 350

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 源码级理解Pytorch中的Dataset和DataLoader
下一篇: pytorch卷积层基础七问
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值