常见的归一化(Normalization)方法

本文详解深度学习中常见的归一化方法。
【归一化是将数据按比例缩放,使之落入一个特定的区间】

目录

  • 1. 批量归一化(Batch Normalization,BN)
    • 1.1 数学原理
    • 1.2 代码示例
  • 2. 层归一化(Layer Normalization,LN)
    • 2.2 代码示例
  • 3. 实例归一化(Instance Normalization,IN)
    • 3.1 数学原理
    • 3.2 代码示例​

1. 批量归一化(Batch Normalization,BN)

1.1 数学原理

对于一个包含 m m m个样本的小批量数据 x = { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } x = \{x^{(1)}, x^{(2)}, \cdots, x^{(m)}\} x={x(1),x(2),,x(m)}, 在第 k k k个特征维度上,批量归一化的步骤如下:

  1. 计算该维度上的均值 μ k \mu_k μk:
    μ k = 1 m ∑ i = 1 m x k ( i ) \mu_k = \frac{1}{m}\sum_{i = 1}^{m}x^{(i)}_k μk=m1i=1mxk(i)

  2. 计算该维度上的方差 σ k 2 \sigma^2_k σk2:
    σ k 2 = 1 m ∑ i = 1 m ( x k ( i ) − μ k ) 2 \sigma^2_k = \frac{1}{m}\sum_{i = 1}^{m}(x^{(i)}_k - \mu_k)^2 σk2=m1i=1m(xk(i)μk)2

  3. 对该维度上的每个样本进行归一化:
    x ^ k ( i ) = x k ( i ) − μ k σ k 2 + ϵ \hat{x}^{(i)}_k = \frac{x^{(i)}_k - \mu_k}{\sqrt{\sigma^2_k + \epsilon}} x^k(i)=σk2+ϵ xk(i)μk
    其中 ϵ 是一个很小的常数,用于防止分母为零

1.2 代码示例

在 PyTorch 中,可以使用torch.nn.BatchNorm2d来实现批量归一化:

import torch
import torch.nn as nn# 定义一个批量归一化层,输入通道数为3
bn = nn.BatchNorm2d(3)# 模拟一个小批量的图像数据,形状为 (batch_size, channels, height, width)
x = torch.randn(16, 3, 32, 32)# 进行批量归一化
y = bn(x)
print(y.shape)

2. 层归一化(Layer Normalization,LN)

层归一化是对单个样本的所有特征维度进行归一化。对于一个样本 x = [ x 1 , x 2 , ⋯ , x n ] x = [x_1, x_2, \cdots, x_n] x=[x1,x2,,xn], 其归一化步骤如下:

  1. 计算该样本的均值 μ \mu μ:
    μ = 1 n ∑ i = 1 n x i \mu = \frac{1}{n}\sum_{i = 1}^{n}x_i μ=n1i=1nxi

  2. 计算该样本的方差 σ 2 \sigma^2 σ2:
    σ 2 = 1 n ∑ i = 1 n ( x i − μ ) 2 \sigma^2 = \frac{1}{n}\sum_{i = 1}^{n}(x_i - \mu)^2 σ2=n1i=1n(xiμ)2

  3. 对该样本的每个特征进行归一化:
    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ

2.2 代码示例

在 PyTorch 中,可以使用torch.nn.LayerNorm来实现层归一化:

import torch
import torch.nn as nn# 定义一个层归一化层,归一化的维度为32
ln = nn.LayerNorm(32)# 模拟一个样本数据,形状为 (batch_size, sequence_length, features)
x = torch.randn(16, 10, 32)# 进行层归一化
y = ln(x)
print(y.shape)

3. 实例归一化(Instance Normalization,IN)

3.1 数学原理

实例归一化主要用于图像生成和风格迁移等任务,它是对每个样本的每个通道分别进行归一化。对于一个样本的第 c c c个通道的特征图 x c x_c xc, 其归一化步骤如下:

  1. 计算该通道的均值 μ c \mu_c μc:
    μ c = 1 H × W ∑ i = 1 H ∑ j = 1 W x c ( i , j ) \mu_c = \frac{1}{H \times W}\sum_{i = 1}^{H}\sum_{j = 1}^{W}x_c(i, j) μc=H×W1i=1Hj=1Wxc(i,j)

其中 H H H W W W 分别是特征图的高度和宽度。

  1. 计算该通道的方差 σ c 2 \sigma^2_c σc2:
    σ c 2 = 1 H × W ∑ i = 1 H ∑ j = 1 W ( x c ( i , j ) − μ c ) 2 \sigma^2_c = \frac{1}{H \times W}\sum_{i = 1}^{H}\sum_{j = 1}^{W}(x_c(i, j) - \mu_c)^2 σc2=H×W1i=1Hj=1W(xc(i,j)μc)2

  2. 对该通道的每个像素进行归一化:
    x ^ c ( i , j ) = x c ( i , j ) − μ c σ c 2 + ϵ \hat{x}_c(i, j) = \frac{x_c(i, j) - \mu_c}{\sqrt{\sigma^2_c + \epsilon}} x^c(i,j)=σc2+ϵ xc(i,j)μc

3.2 代码示例​

在 PyTorch 中,可以使用torch.nn.InstanceNorm2d来实现实例归一化:

import torch
import torch.nn as nn# 定义一个实例归一化层,输入通道数为3
in_layer = nn.InstanceNorm2d(3)# 模拟一个小批量的图像数据,形状为 (batch_size, channels, height, width)
x = torch.randn(16, 3, 32, 32)# 进行实例归一化
y = in_layer(x)
print(y.shape)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (参考文献部分)

行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第一部分)-CSDN博客 行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分&…

大模型可视化应用敏捷开发方案:Dify+Echarts

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 Moe模式:或将是最好的大模型应用开发路径一文带你了解大模型RAG详细记录…

23种GoF设计模式

GoF(Gang of Four)设计模式是由四位计算机科学家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的设计模式 目录 一、创建型模式(Cre…

Losson 4 NFS(network file system(网络文件系统))

网络文件系统:在互联网中共享服务器中文件资源。 使用nfs服务需要安装:nfs-utils 以及 rpcbind nfs-utils : 提供nfs服务的程序 rpcbind :管理nfs所有进程端口号的程序 nfs的部署 1.客户端和服务端都安装nfs-utils和rpcbind #安装nfs的软件rpcbind和…

C++ 入门六:多态 —— 同一接口的多种实现之道

在面向对象编程中,多态是最具魅力的特性之一。它允许我们通过统一的接口处理不同类型的对象,实现 “一个接口,多种实现”。本章将从基础概念到实战案例,逐步解析多态的核心原理与应用场景,帮助新手掌握这一关键技术。 …

关于C使用Windows API获取系统管理员权限和对文本属性的操作,以及windows API的核心操作

关于windows系统的操作程序开发&#xff0c;本文介绍一部分重要的文本属性操作&#xff0c;和运行计次器。 获取系统管理员权限 #include <windows.h> VOID ManagerRun(LPCSTR exe, LPCSTR param, INT nShow) { //注意&#xff1a;会跳出提示。SHELLEXECUTEINFO ShExec…

Web 项目实战:构建属于自己的博客系统

目录 项目效果演示 代码 Gitee 地址 1. 准备工作 1.1 建表 1.2 引入 MyBatis-plus 依赖 1.3 配置数据库连接 1.4 项目架构 2. 实体类准备 - pojo 包 2.1 dataobject 包 2.2 request 包 2.3 response 包 2.3.1 统一响应结果类 - Result 2.3.2 用户登录响应类 2.3.3…

从“被动跳闸”到“主动预警”:智慧用电系统守护老旧小区安全

安科瑞顾强 近年来&#xff0c;老旧小区电气火灾事故频发&#xff0c;成为威胁居民生命财产安全的重要隐患。据统计&#xff0c;我国居住场所火灾伤亡人数远超其他场所&#xff0c;仅今年一季度就发生8.3万起住宅火灾&#xff0c;造成503人遇难。这些建筑多建于上世纪&#x…

【深入浅出 Git】:从入门到精通

这篇文章介绍下版本控制器。 【深入浅出 Git】&#xff1a;从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …

Mybatis的简单介绍

文章目录 MyBatis 简介 1. MyBatis 核心特点2. MyBatis 核心组件3. MyBatis 基本使用示例(1) 依赖引入&#xff08;Maven&#xff09;(2) 定义 Mapper 接口(3) 定义实体类(4) 在 Service 层调用 4. MyBatis 与 JPA/Hibernate 对比 MyBatis 简介 MyBatis 是一款优秀的 持久层框…

Android Studio 在 Windows 上的完整安装与使用指南

Android Studio 在 Windows 上的完整安装与使用指南—目录 一、Android Studio 简介二、下载与安装1. 下载 Android Studio2. 安装前的依赖准备3. 安装步骤 三、基础使用指南1. 首次启动配置2. 创建第一个项目3. 运行应用4. 核心功能 四、进阶功能配置1. 配置 SDK 和工具2. 自定…

WPF 绑定方式举例

WPF 绑定方式举例 一、如果ItemsControl 控件的ItemsSource要绑定到List类型&#xff0c;可以如下&#xff1a; List<string> Names new List<string>(); Names.Add("aaa"); Names.Add("bbb");<ItemsControl ItemsSource"{Binding …

LangSmith 设置指南

什么是 LangSmith&#xff1f; LangSmith 是 LangChain 团队开发的一个统一开发者平台&#xff0c;用于构建、测试、评估和监控基于大型语言模型&#xff08;LLM&#xff09;的应用程序。它提供了一套工具&#xff0c;帮助开发者更好地理解、调试和改进他们的 LLM 应用。 注册…

手撕TCP内网穿透及配置树莓派

注意&#xff1a; 本文内容于 2025-04-13 15:09:48 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;手撕TCP内网穿透及配置树莓派。感谢您的关注与支持&#xff01; 之前入手了树莓派5&#xff0c;…

Java从入门到“放弃”(精通)之旅——程序逻辑控制④

Java从入门到“放弃”&#xff08;精通&#xff09;之旅&#x1f680;&#xff1a;程序逻辑的完美理解 一、开篇&#xff1a;程序员的"人生选择" 曾经的我&#xff0c;生活就像一段顺序执行的代码&#xff1a; System.out.println("早上8:00起床"); Syste…

学习笔记九——Rust所有权机制

&#x1f980; Rust 所有权机制 &#x1f4da; 目录 什么是值类型和引用类型&#xff1f;值语义和引用语义&#xff1f;什么是所有权&#xff1f;为什么 Rust 需要它&#xff1f;所有权的三大原则&#xff08;修正版&#xff09;移动语义 vs 复制语义&#xff1a;变量赋值到底…

Cocos Creator Shader入门实战(八):Shader实现圆形、椭圆、菱形等头像

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 Shader的学习是一条漫长的道路。 理论知识的枯燥无味&#xff0c;让很多人选择了放弃。然而不得不说&#xff1a;任何新知识、新领域的学习&#xff0c;本身面临的都是问题&#xff01; 互联网和AI给了我…

深入理解计算机操作系统(持续更新中...)

文章目录 一、计算机系统漫游1.1信息就是位上下文 一、计算机系统漫游 1.1信息就是位上下文 源程序实际上就是一个由值0和1组成的位&#xff08;又称为比特&#xff09;&#xff0c;八个位被组织成一组&#xff0c;称为字节。每个字节表示程序中的某些文本字符 大部分现代计…

YOLO V8的​​Anchor-Free​​、​​解耦头(Decoupled Head)、损失函数定义(含​​Varifocal Loss)

YOLOv8 的 ​​Anchor-Free​​ 设计摒弃了传统 YOLO 系列中依赖预定义锚框&#xff08;Anchor Boxes&#xff09;的机制&#xff0c;转而直接预测目标的中心点和边界框尺寸。这种设计简化了模型结构&#xff0c;降低了超参数调优的复杂度提升了检测速度和精度。以下是其核心实…

QuarkPi-CA2 RK3588S卡片电脑:6.0Tops NPU+8K视频编解码+接口丰富,高性能嵌入式开发!

QuarkPi-CA2 RK3588S卡片电脑&#xff1a;6.0Tops NPU8K视频编解码接口丰富&#xff0c;高性能嵌入式开发&#xff01; 芯片框架 视频介绍 https://www.bilibili.com/video/BV1btdbYkEjY 开发板介绍 核心升级&#xff0c;产品炸裂 QuarkPi-CA2卡片电脑搭载瑞芯微RK3588S芯片…