国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示

這篇具有很好參考價(jià)值的文章主要介紹了nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1 nn.BatchNorm

??????? BatchNorm是深度網(wǎng)絡(luò)中經(jīng)常用到的加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練,加速收斂速度及穩(wěn)定性的算法,是深度網(wǎng)絡(luò)訓(xùn)練必不可少的一部分,幾乎成為標(biāo)配;

????????BatchNorm 即批規(guī)范化,是為了將每個(gè)batch的數(shù)據(jù)規(guī)范化為統(tǒng)一的分布,幫助網(wǎng)絡(luò)訓(xùn)練, 對輸入數(shù)據(jù)做規(guī)范化,稱為Covariate shift;

??????? 數(shù)據(jù)經(jīng)過一層層網(wǎng)絡(luò)計(jì)算后,數(shù)據(jù)的分布也在發(fā)生著變化,因?yàn)槊恳淮螀?shù)迭代更新后,上一層網(wǎng)絡(luò)輸出數(shù)據(jù),經(jīng)過這一層網(wǎng)絡(luò)參數(shù)的計(jì)算,數(shù)據(jù)的分布會發(fā)生變化,這就為下一層網(wǎng)絡(luò)的學(xué)習(xí)帶來困難 -- 也就是在每一層都進(jìn)行批規(guī)范化(Internal Covariate shift),方便網(wǎng)絡(luò)訓(xùn)練,因?yàn)樯窠?jīng)網(wǎng)絡(luò)本身就是要學(xué)習(xí)數(shù)據(jù)的分布;

??????? 下面通過代碼掩飾BatchNorm的作用;

??????? 首先要清楚,BatchNorm后是不改變輸入的shape的;

????????nn.BatchNorm1d: N * d --> N * d

????????nn.BatchNorm2d: N * C * H * W? -- > N * C * H * W

????????nn.BatchNorm3d: N * C * d * H * W --> N * C * d * H * W

下面講解nn.BatchNorm1d,和nn.BatchNorm2d的情況

1.1 nn.BatchNorm1d

??????? 首先看其參數(shù):

CLASStorch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, 
track_running_stats=True, device=None, dtype=None)

??????? 主要參數(shù)介紹:

??????????????? num_features: 輸入維度,也就是數(shù)據(jù)的特征維度;

??????????????? eps: 是在分母上加的一個(gè)值,是為了防止分母為0的情況,讓其能正常計(jì)算;

??????????????? affine: 是仿射變化,將nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示,分別初始化為1和0;

??????? 使用方法介紹:

????????主要作用在特征上,比如輸入維度為N*d, N代表batchsize大小,d代表num_features;

????????而nn.BatchNorm1d是對num_features做歸一化處理,也就是對批次內(nèi)的特征進(jìn)行歸一化;

如輸入 N = 5(batch_size = 5), d = 3(數(shù)據(jù)特征維度為3);

nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示

???????? 上圖中的r, b是可學(xué)習(xí)的參數(shù),文檔中成為放射變換,文檔中稱為nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示,? 可以使用x.weight 和 x.bias獲得, r初始化值為1,b初始化值為0;

??????? 上圖中方差的計(jì)算是采用的有偏估計(jì);

??????? 歸一化處理公式:

nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示

???????????????? E(x)表示均值, Var(x)表示方差;nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示表示為上述參數(shù)的eps,防止分母為0 的情況;

??????? 演示代碼:

>>> import torch 
>>> import torch.nn as nn
 m = nn.BatchNorm1d(3) #首先要實(shí)例化,才能使用,3 對應(yīng)輸入特征,也就是number_features 
>>> m.weight # 對應(yīng)r ,初始化值為1
Parameter containing:
tensor([1., 1., 1.], requires_grad=True)
>>> m.bias # 對應(yīng)b,初始化為0
Parameter containing:
tensor([0., 0., 0.], requires_grad=True)
>>> output.mean(dim = 0) # 歸一化后,平均值都是0, e-08 實(shí)際上也就是0了
tensor([ 0.0000e+00, -1.1921e-08, -2.3842e-08], grad_fn=<MeanBackward1>)
>>> output.std(dim = 0,unbiased = False) # 標(biāo)準(zhǔn)差為1, 有偏估計(jì),所以unbiased = False
tensor([1.0000, 1.0000, 1.0000], grad_fn=<StdBackward0>)

?采用普通方法實(shí)現(xiàn)BatchNorm:

>>> x
tensor([[ 0.0482, -0.1098,  0.4099],
        [ 0.9851,  2.8229, -0.7795],
        [ 0.3493, -1.0165, -0.0416],
        [ 1.5942, -1.3420,  1.0296],
        [ 0.0452, -1.0462, -1.1866]])
>>> mean = x.mean(dim = 0)
>>> mean
tensor([ 0.6044, -0.1383, -0.1136])
>>> std = torch.sqrt(1e-5 + torch.var(x,dim = 0, unbiased = False))
>>> std
tensor([0.6020, 1.5371, 0.7976])
>>> (x - mean)/std
tensor([[-0.9239,  0.0185,  0.6564],
        [ 0.6325,  1.9265, -0.8348],
        [-0.4238, -0.5713,  0.0903],
        [ 1.6442, -0.7831,  1.4333],
        [-0.9290, -0.5906, -1.3452]])
>>> m(x) # 和上述計(jì)算結(jié)果相同
tensor([[-0.9239,  0.0185,  0.6564],
        [ 0.6325,  1.9265, -0.8348],
        [-0.4238, -0.5713,  0.0903],
        [ 1.6442, -0.7831,  1.4333],
        [-0.9290, -0.5906, -1.3452]], grad_fn=<NativeBatchNormBackward0>)

1.2 nn.BatchNorm2d

首先看其參數(shù):

CLASStorch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, 
track_running_stats=True, device=None, dtype=None)

使用方法介紹:

??????? 主要作用在特征上,比如輸入維度為B*C*H*W, B代表batchsize大小,C代表channel,H代表圖片的高度維度,W代表圖片的寬度維度;

??????? 而nn.BatchNorm2d是對channel做歸一化處理,也就是對批次內(nèi)的特征進(jìn)行歸一化;

如輸入B * C * H * W = (2 * 3 * 2 * 2):

nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示

???????? 計(jì)算的均值和方差的方式實(shí)際上是把batch內(nèi)對應(yīng)通道的數(shù)據(jù)拉平計(jì)算;

??????? 演示代碼:

>>> y = torch.randn(2,3,2,2)
>>> y
tensor([[[[-0.3008,  0.7066],
          [ 0.5374, -0.4211]],

         [[-0.3935,  0.6193],
          [ 0.5375, -0.2747]],

         [[ 0.8895,  0.0956],
          [-0.0622,  1.7511]]],


        [[[-0.2402,  0.6884],
          [ 0.5264,  0.3918]],

         [[-0.3101, -0.6729],
          [-0.5292, -1.0383]],

         [[-0.6681, -0.3747],
          [ 0.3431,  0.3245]]]])
>>> n = nn.BatchNorm2d(3)
>>> n.weight
Parameter containing:
tensor([1., 1., 1.], requires_grad=True)
>>> n.bias
Parameter containing:
tensor([0., 0., 0.], requires_grad=True)
>>> n(y)
tensor([[[[-1.2111,  1.0613],
          [ 0.6797, -1.4823]],

         [[-0.2544,  1.6433],
          [ 1.4902, -0.0318]],

         [[ 0.8494, -0.2705],
          [-0.4931,  2.0649]]],


        [[[-1.0742,  1.0204],
          [ 0.6549,  0.3513]],

         [[-0.0981, -0.7779],
          [-0.5086, -1.4626]],

         [[-1.3479, -0.9340],
          [ 0.0786,  0.0524]]]], grad_fn=<NativeBatchNormBackward0>)

??????? 關(guān)于均值方差的計(jì)算方法演示:

>>> z = [-1.2111,  1.0613, 0.6797, -1.4823, -1.0742,  1.0204, 0.6549,  0.3513] # 每個(gè)通道拉平計(jì)算
>>> import numpy as np
>>> np.mean(z) # 10的-17次方就是0
-2.7755575615628914e-17
>>> np.std(z) # numpy默認(rèn)是有偏的, torch的模式是無偏的
0.9999846111315913

參考:[pytorch 網(wǎng)絡(luò)模型結(jié)構(gòu)] 深入理解 nn.BatchNorm1d/2d 計(jì)算過程_嗶哩嗶哩_bilibili文章來源地址http://www.zghlxwxcb.cn/news/detail-417277.html

到了這里,關(guān)于nn.BatchNorm講解,nn.BatchNorm1d, nn.BatchNorm2d代碼演示的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一維卷積神經(jīng)網(wǎng)絡(luò)理解(torch.nn.Conv1d)

    一維卷積神經(jīng)網(wǎng)絡(luò)理解(torch.nn.Conv1d)

    in_channels : (int)輸入數(shù)據(jù)的通道數(shù),即對某條訓(xùn)練數(shù)據(jù)來說由多少組向量表示。例如對于由一維向量表示的一條數(shù)據(jù)來說,通道數(shù)為1;對于文本數(shù)據(jù)來說,一個(gè)句子是由m個(gè)單詞組成,那么通道數(shù)就可以是m out_channels : (int)卷積產(chǎn)生的通道數(shù),可以理解為卷積核的個(gè)數(shù) kernel_siz

    2023年04月08日
    瀏覽(23)
  • BatchNorm詳解

    BatchNorm詳解

    前幾天被同事問到了一個(gè)問題:當(dāng)batch_size=1時(shí),Batch Normalization還有沒有意義,沒有說出個(gè)所以然,才意識到自己從來不好好讀過BN的論文(Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift),尋思著看看可不可以從論文中得到答案,本文就是自己學(xué)習(xí)記

    2023年04月08日
    瀏覽(18)
  • Batchnorm 和Layernorm 區(qū)別

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 BatchNorm,一般用于CV任務(wù),是把一個(gè) batch (N張圖片)中 同一通道 的特征,將其標(biāo)準(zhǔn)化??梢岳斫鉃閷atch中的所有圖的每一層像素進(jìn)行標(biāo)準(zhǔn)化。 LayerNorm,一般用于NLP任務(wù)中,是把batch中的 一個(gè)樣本 (

    2024年02月10日
    瀏覽(17)
  • BatchNorm原理解析

    BatchNorm 要解決的問題 我們都知道,深度學(xué)習(xí)的話尤其是在CV中,都需要對 數(shù)據(jù)進(jìn)行歸一化處理 ,因?yàn)樯疃葘W(xué)習(xí)網(wǎng)絡(luò)主要就是為了學(xué)習(xí)訓(xùn)練數(shù)據(jù)的分布,并在測試集中得到更好的泛化效果。但是我們 每一個(gè) batch 輸入的數(shù)據(jù)都具有不同的分布 ,顯然會給網(wǎng)絡(luò)訓(xùn)練帶來困難。此

    2024年02月13日
    瀏覽(14)
  • D. 1D Eraser

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a strip of paper?s?that is?n?cells long. Each cell is either black or white. In an operation you can take any?k?consecutive cells and make them all white. Find the minimum number of operations needed to remove all black cells. Inpu

    2024年02月08日
    瀏覽(18)
  • 深度學(xué)習(xí):BatchNorm、LayerNorm、InstanceNorm、GroupNorm和SwitchableNorm的理解

    深度學(xué)習(xí):BatchNorm、LayerNorm、InstanceNorm、GroupNorm和SwitchableNorm的理解

    在深度學(xué)習(xí)中會經(jīng)常遇到BatchNorm、LayerNorm、InstanceNorm和GroupNorm,四者區(qū)別如下: 除此之外還有SwitchableNorm的方法,下面會逐一進(jìn)行介紹。 BatchNorm 的處理對象是對 一批樣本 的 同一個(gè)通道 特征,BatchNorm 是對這批樣本的同一維度特征計(jì)算均值和方差做歸一化,BatchNorm在CV領(lǐng)域應(yīng)

    2024年02月15日
    瀏覽(11)
  • PyTorch-實(shí)現(xiàn)對表格類型數(shù)據(jù)的一維卷積(CNN1D)

    PyTorch-實(shí)現(xiàn)對表格類型數(shù)據(jù)的一維卷積(CNN1D)

    看到大家都私信要代碼,太多了發(fā)不過來,我把代碼放到github上了: github鏈接: https://github.com/JiaBinBin233/CNN1D 我的數(shù)據(jù)集是一個(gè)二分類的數(shù)據(jù)集,是一個(gè)12維的數(shù)據(jù)(第一列為標(biāo)簽列,其他的11列是屬性列) 首先看一下沒有經(jīng)過處理過的數(shù)據(jù) 輸出結(jié)果如下 原始數(shù)據(jù)是一個(gè)128行

    2024年02月11日
    瀏覽(23)
  • CNN(一維卷積Conv1D)實(shí)現(xiàn)時(shí)間序列預(yù)測(PyTorch版)

    CNN(一維卷積Conv1D)實(shí)現(xiàn)時(shí)間序列預(yù)測(PyTorch版)

    ??項(xiàng)目專欄:【深度學(xué)習(xí)時(shí)間序列預(yù)測案例】零基礎(chǔ)入門經(jīng)典深度學(xué)習(xí)時(shí)間序列預(yù)測項(xiàng)目實(shí)戰(zhàn)(附代碼+數(shù)據(jù)集+原理介紹)

    2024年02月01日
    瀏覽(14)
  • 分類預(yù)測 | MATLAB實(shí)現(xiàn)1D-2D-CNN-GRU的多通道輸入數(shù)據(jù)分類預(yù)測

    分類預(yù)測 | MATLAB實(shí)現(xiàn)1D-2D-CNN-GRU的多通道輸入數(shù)據(jù)分類預(yù)測

    分類效果 基本介紹 結(jié)合1D時(shí)序-2D圖像多模態(tài)融合的CNN-GRU故障識別算法,基于一維時(shí)序信號和二維圖像多元信息融合的卷積神經(jīng)網(wǎng)絡(luò)結(jié)門控循環(huán)單元網(wǎng)絡(luò)的數(shù)據(jù)分類預(yù)測/故障識別算法。要求2020版以上。 采用雙支路輸入,一路為圖像輸入經(jīng)CNN提取特征,一路為特征序列輸入經(jīng)

    2024年02月12日
    瀏覽(38)
  • 基于FPGA的一維卷積神經(jīng)網(wǎng)絡(luò)算法實(shí)現(xiàn)(1D-CNN、BNN的FPGA加速實(shí)現(xiàn))

    基于FPGA的一維卷積神經(jīng)網(wǎng)絡(luò)算法實(shí)現(xiàn)(1D-CNN、BNN的FPGA加速實(shí)現(xiàn))

    本文介紹一種基于FPGA的1維卷積神經(jīng)網(wǎng)絡(luò)算法加速實(shí)現(xiàn)的方案,其中為了進(jìn)一步提升運(yùn)算速度,除了第一層卷積采用的是普通卷積運(yùn)算(CONV),其余卷積層和池化層采用的是二值化運(yùn)算,即二值化的卷積與池化。 運(yùn)算過程包含了卷積層、池化層、批標(biāo)準(zhǔn)化層、全局池化、二值

    2024年02月16日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包