Normalization 歸一化方法 BN LN IN GN

1.分類

  1. BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN對較小的batch size效果不好。BN適用于固定深度的前向神經網絡,如CNN,不適用于RNN;
  2. LN在通道方向上,對C、H、W歸一化,主要對RNN效果明顯;
  3. IN在圖像像素上,對H、W做歸一化,用在風格化遷移;
  4. GN將channel分組,然后再做歸一化。

在這里插入圖片描述

2.BN

為什么要進行BN呢?
1)在深度神經網絡訓練的過程中,通常以輸入網絡的每一個mini-batch進行訓練,這樣每個batch具有不同的分布,使模型訓練起來特別困難。
(2)Internal Covariate Shift (ICS) 問題:在訓練的過程中,激活函數會改變各層數據的分布,隨著網絡的加深,這種改變(差異)會越來越大,使模型訓練起來特別困難,收斂速度很慢,會出現梯度消失的問題。
BN的主要思想:針對每個神經元,使數據在進入激活函數之前,沿著通道計算每個batch的均值、方差,‘強迫’數據保持均值為0,方差為1的正態分布,避免發生梯度消失。具體來說,就是把第1個樣本的第1個通道,加上第2個樣本第1個通道 … 加上第 N 個樣本第1個通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是單純除以 N,最后得到的是一個代表這個 batch 第1個通道平均值的數字,而不是一個 H×W 的矩陣)。求通道 1 的方差也是同理。對所有通道都施加一遍這個操作,就得到了所有通道的均值和方差。
BN的使用位置:全連接層或卷積操作之后,激活函數之前。

BN算法過程:
沿著通道計算每個batch的均值μ
沿著通道計算每個batch的方差σ2
做歸一化
加入縮放和平移變量 γ 和 β

其中 ε 是一個很小的正值1e-8,比如 。加入縮放和平移變量的原因是:保證每一次數據經過歸一化后還保留原有學習來的特征,同時又能完成歸一化操作,加速訓練。 這兩個參數是用來學習的參數。
BN的作用:
(1)允許較大的學習率;

(2)減弱對初始化的強依賴性

(3)保持隱藏層中數值的均值、方差不變,讓數值更穩定,為后面網絡提供堅實的基礎;

(4)有輕微的正則化作用(相當于給隱藏層加入噪聲,類似Dropout)

BN存在的問題:
(1)每次是在一個batch上計算均值、方差,如果batch size太小,則計算的均值、方差不足以代表整個數據分布。

(2)batch size太大:會超過內存容量;需要跑更多的epoch,導致總訓練時間變長;會直接固定梯度下降的方向,導致很難更新。

3.LN

針對BN不適用于深度不固定的網絡(sequence長度不一致,如RNN),LN對深度網絡的某一層的所有神經元的輸入按以下公式進行normalization操作。
在這里插入圖片描述

LN中同層神經元的輸入擁有相同的均值和方差,不同的輸入樣本有不同的均值和方差。
對于特征圖在這里插入圖片描述 ,LN 對每個樣本的 C、H、W 維度上的數據求均值和標準差,保留 N 維度。其均值和標準差公式為:
在這里插入圖片描述

Layer Normalization (LN) 的一個優勢是不需要批訓練,在單條數據內部就能歸一化。LN不依賴于batch size和輸入sequence的長度,因此可以用于batch size為1和RNN中。LN用于RNN效果比較明顯,但是在CNN上,效果不如BN。

4.Instance Normalization, IN

IN針對圖像像素做normalization,最初用于圖像的風格化遷移。在圖像風格化中,生成結果主要依賴于某個圖像實例,feature map 的各個 channel 的均值和方差會影響到最終生成圖像的風格。所以對整個batch歸一化不適合圖像風格化中,因而對H、W做歸一化。可以加速模型收斂,并且保持每個圖像實例之間的獨立。

對于,IN 對每個樣本的 H、W 維度的數據求均值和標準差,保留 N 、C 維度,也就是說,它只在 channel 內部求均值和標準差,其公式如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535207.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 服務器拷貝遠程文件 SCP

1.復制文件 (1)將本地文件拷貝到遠程 (有時候權限不允許) scp 文件名 用戶名計算機IP或者計算機名稱:遠程路徑 scp /root/install.* root192.168.1.12:/usr/local/src(2)從遠程將文件拷回本地 scp 用戶名…

Pytorch: model.eval(), model.train() 講解

文章目錄1. model.eval()2. model.train()兩者只在一定的情況下有區別:訓練的模型中含有dropout 和 batch normalization 1. model.eval() 在模型測試階段使用 pytorch會自動把BN和DropOut固定住,不會取每個batchsize的平均,而是用訓練好的…

Job for smbd.service failed because the control process exited with error code. See “systemctl statu

錯誤 $ sudo service smbd restartJob for smbd.service failed because the control process exited with error code. See "systemctl status smbd.service" and "journalctl -xe" for details.$ systemctl status smbd.servicesmbd.service - Samba SM…

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace o

問題 RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [4]] is at version 1; expected version 0 instead 分析 nn.relu(True) # 這個引起的問題原來的變量被替換掉了&#xff…

batchsize大小對訓練速度的影響

1.batchsize越大 是不是訓練越快? GPU :一塊2080Ti 平臺:pytorch cuda 圖片數量:2700 batchsize一個圖片處理時間GPU內存占用GPU算力使用一個epoch 所用時間10.117s2.5G20%2700 * 0.0117 318s50.516s8G90%2700 * 0.516/5 279s batchsize大…

os.environ[‘CUDA_VISIBLE_DEVICES‘]= ‘0‘設置環境變量

os.environ[‘環境變量名稱’]‘環境變量值’ #其中key和value均為string類型 import os os.environ["CUDA_VISIBLE_DEVICES"]‘6‘’,‘7’這個語句的作用是程序可見的顯卡ID。 注意 如果"CUDA_VISIBLE_DEVICES" 書寫錯誤,也不報…

nn.ReLU() 和 nn.ReLU(inplace=True)中inplace的作用

inplace 作用: 1.用relu后的變量進行替換,直接把原來的變量覆蓋掉 2.節省了內存 缺點: 有時候出現梯度回傳失敗的問題,因為之前的變量被替換了,找不到之前的變量了 參考這篇文章

pytorch:加載預訓練模型(多卡加載單卡預訓練模型,多GPU,單GPU)

在pytorch加載預訓練模型時,可能遇到以下幾種情況。 分為以下幾種在pytorch加載預訓練模型時,可能遇到以下幾種情況。1.多卡訓練模型加載單卡預訓練模型2. 多卡訓練模型加載多卡預訓練模型3. 單卡訓練模型加載單卡預訓練模型4. 單卡訓練模型加載多卡預訓…

python中 numpy轉list list 轉numpy

list to numpy import numpy as np a [1,2] b np.array(a)numpy to list a np.zero(1,1) a.tolist()

知識蒸餾 knowledge distill 相關論文理解

Knowledge Distil 相關文章1.FitNets : Hints For Thin Deep Nets (ICLR2015)2.A Gift from Knowledge Distillation:Fast Optimization, Network Minimization and Transfer Learning (CVPR 2017)3.Matching Guided Distillation&#xff08…

模型壓縮 相關文章解讀

模型壓縮相關文章Learning both Weights and Connections for Efficient Neural Networks (NIPS2015)Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding(ICLR2016)Learning both Weights and …

Linux 殺死進程

kill -9 進程名 殺死進程

計算圖片相似度的方法

文章目錄1.余弦相似度計算2.哈希算法計算圖片的相似度3.直方圖計算圖片的相似度4.SSIM(結構相似度度量)計算圖片的相似度5.基于互信息(Mutual Information)計算圖片的相似度1.余弦相似度計算 把圖片表示成一個向量,通…

.size .shape .size() type的運用

.size ndarray.size 數組元素的總個數,相當于 .shape 中 n*m 的值 a np.array([2,2]) print(a.size)2.shap ndarray.shape 數組的維度,對于矩陣,n 行 m 列 a np.array([2,2]) print(a.shape) (1,2)torch.tensor 數組的維度 x torch.r…

矩陣相加

tensor 類型 a torch.randn(1,3,3) b torch.randn(1,3,3) c a b numpy.array 類型 a np.array([2,2]) b np.array([2,2]) print(type(a)) print(ab)[4,4]

Latex 生成的PDF增加行號 左右兩邊

增加行號 \usepackage[switch]{lineno}\linenumbers \begin{document} \end{document}

pytorh .to(device) 和.cuda()的區別

原理 .to(device) 可以指定CPU 或者GPU device torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 單GPU或者CPU model.to(device) #如果是多GPU if torch.cuda.device_count() > 1:model nn.DataParallel(model,devic…

Linux 修改用戶名的主目錄 家目錄

首先root 登陸 sudo -i 輸入密碼然后 vim /etc/passwd 找到用戶名 然后修改后面的路徑即可

ubunt16.04 安裝3090顯卡驅動 cuda cudnn pytorch

安裝驅動 需要的安裝包 30系列顯卡是新一代架構,新驅動不支持cuda9以及cuda10,所以必須安裝cuda11、而pytorch現在穩定版為1.6,最高僅支持到cud10.2。所以唯一的辦法就是使用上處于beta測試的1.7或1.8。這也是為啥一開始就強調本文的寫作時…

3090顯卡 torch.cuda.is_available()返回false的解決辦法

問題 1.執行Nvidia-smi 命令沒有報錯,能夠顯示驅動信息; 2.執行 torch.backends.cudnn.enabled is TRUE 3.torch.cuda.is_available()一直返回False 解決 把torch,torchvision等相關安裝包全部刪除,安裝適合版本的torch。 30系…