常見的歸一化(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?=m1?i=1m?xk(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?=m1?i=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 μ=n1?i=1n?xi?

  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=n1?i=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×W1?i=1H?j=1W?xc?(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×W1?i=1H?j=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.pswp.cn/pingmian/76633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76633.shtml
英文地址,請注明出處:http://en.pswp.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芯片…