caffe Layers及參數(shù)

1、Convolution層:

層類型:Convolution
參數(shù):
lr_mult: 學(xué)習(xí)率系數(shù),最終的學(xué)習(xí)率 = lr_mult *base_lr,如果存在兩個則第二個為偏置項的學(xué)習(xí)率,偏置項學(xué)習(xí)率為權(quán)值學(xué)習(xí)率的2倍
num_output: 卷積核的個數(shù)
kernel_size:卷積核大小
stride:卷積核步長
pad:邊緣填充
weight_filler:權(quán)值初始化。默認(rèn)為:“constant”:0,可以使用xavier算法進行初始化,也可設(shè)置為“gaussian”
bias_filler:偏置項初始化,設(shè)置為“constant”:0
bias_term:是否開啟偏置項,默認(rèn)為true
decay_mult:權(quán)值衰減
group: 分組,默認(rèn)為1組。如果大于1,我們限制卷積的連接操作在一個子集內(nèi)。如果我們根據(jù)圖像的通道來分組,那么第i個輸出分組只能與第i個輸入分組進行連接。
dilation: 擴張卷積參數(shù),制定該大小以后則會在進行卷積計算時,添加相應(yīng)的空洞

輸入數(shù)據(jù)維度為W*W
Filter大小 F×F
步長 S
padding的像素數(shù) P
可以得出
N = (W ? F + 2P )/S+1
輸出大小為 N×N

2、Pooling層
層類型:Pooling
參數(shù):
kernel_size:必選參數(shù),在一定池化的卷積核大小
pool:池化方法,默認(rèn)為MAX,還有AVE或STOCHASTIC(按照概率取,數(shù)據(jù)越大被取到概率越大)
pad:邊緣填充,默認(rèn)為0
stride:池化的步長 一般為2,不重疊池化
在反向傳播時,我們首先會把δl的所有子矩陣矩陣大小還原成池化之前的大小,然后如果是MAX,則把δl的所有子矩陣的各個池化局域的值放在之前做前向傳播算法得到最大值的位置。如果是Average,則把δl的所有子矩陣的各個池化局域的值取平均后放在還原后的子矩陣位置。這個過程一般叫做upsample。

3、softmax-loss\softmax層

softmax-loss層和softmax層計算大致是相同的。
softmax是一個分類器,計算的是類別的概率(Likelihood)
假設(shè)我們有一個數(shù)組,V,Vi表示V中的第i個元素,那么這個元素的Softmax值就是


capture.png

也就是說,是該元素的指數(shù),與所有元素指數(shù)和的比值
分類可以計算每個分類的概率 分類通道 N(分類數(shù))H(圖像高度)W(圖像寬度),可以得出分類數(shù)的概率
softmax-loss layer:輸出loss值
在神經(jīng)網(wǎng)絡(luò)的計算當(dāng)中,我們經(jīng)常需要計算按照神經(jīng)網(wǎng)絡(luò)的正向傳播計算的分?jǐn)?shù)S1,和按照正確標(biāo)注計算的分?jǐn)?shù)S2,之間的差距,計算Loss,才能應(yīng)用反向傳播。Loss定義為交叉熵

Loss.png

取log里面的值就是這組數(shù)據(jù)正確分類的Softmax值,它占的比重越大,這個樣本的Loss也就越小

layer
{
    name:"loss"
    type:"SofmaxWithLoss"
    bottom:"ip1"
    bottom:"label"
    top:"loss"
}
layer
{
    name:"maxSoft"
    type:"Softmax"
    bottom:"cls3_fc"
    top:"prob"
}

4、Inner Product層

層類型:InnnerProduct
全連接層與卷積層一樣 ,卷積核與數(shù)據(jù)大小一致 因此生成的數(shù)據(jù)為1*1的數(shù)據(jù),不用指定 卷積核大小

layer
{
    name:"quanlianjie"
    type:"InnerProduct"
    bottom:"pool1"
    top:"ip1"
    param
    {
        lr_mult:1
    }
    param
    {
        lr_mult:1
    }
    inner_product_param
    {
        num_output:500
        weight_filler
        {
            type:"xavier"
         }
        bias_filler:
        {
            type:"constant"
        }
    }
}

5、Accuracy層

層類型:Accuracy
輸出分類(預(yù)測)準(zhǔn)確度,只有test階段才有因此需要加入include參數(shù)

layer
{
    name:"acc"
    type:"Accuracy"
    bottom:"ip2"
    top:"accuracy"
    include
    {
        phase:TEST
    }
}

6、reshape層

層類型:Accuracy
在不改變數(shù)據(jù)的情況下,改變輸入的維度

layer
{
    name:"reshape"
    type:"Reshape"
    bottom:"input"
    top:"output"
    reshape_param
    {
        shape
        {
            dim:0    //保持原來的維度不變
            dim:2    // 將原來的維度變?yōu)?維
            dim:3    // 將原來的維度變?yōu)?維
            dim:-1  // 系統(tǒng)自動計算維度
          }
        }
    }

7、Dropout層

層類型:Dropout
防止過擬合的trick,可以隨機讓網(wǎng)絡(luò)某些隱藏個層節(jié)點的權(quán)重不工作

layer
{
    name:"drop"
    type:"Dropout"
    bottom:"fc7-conv"
    top:"fc7-conv"
    dropout+param
    {
        dropout_ratio:0.5
    }
}

8、Eltwise層

Eltwise層的操作有三個:product(點乘), sum(相加減) 和 max(取大值),其中sum是默認(rèn)操作: 實現(xiàn)element_wise的A+B,即A和B的對應(yīng)元素相加。

layer
{
    name:"eltwise_layer"
    type:"Eltwise"
    bottom:"A"    
    bottom:"B"
    top:"DIFF"
    eltwise_param
    {
        operation:SUM
        # 若要實現(xiàn)A-B則可以直接指定參數(shù):
        coeff:1
        coeff:-1
    }
}

9、Crop層

主要作用進行裁剪,使用第二個bottom的尺寸裁剪第一個bottom
A(20,50,512,512) B(20,10,256,256)
從第二個軸開始進行裁剪
C = A[:,25:25+B.shape[1], 128+B.shape[2],128+B.shape[3]]

layer
{
    name:"crop_layer"
    type:"Crop"
    bottom:"A"    
    bottom:"B"
    top:"C"
    crop_param
    {
        axis:1
        offset:25        
        offset:128      
        offset:128
    }
}

10、InterP層

對圖像進行插值運算

layer
{
    name:"input"
    type:"Interp"
    bottom:"output"
    interp_param
    {
        # 方式一:
        shrink_factor:4  #縮小因子 height_out =  ( heght_in_eff - 1)/shrink_factor +1
        zoom_factor:3   #放大因子height_out + (height_out -1) * (zoom_factor - 1)
        pad_beg:0         # 前/上部填充內(nèi)容 height_in_eff = height_in + pad_beg+ pad_end      
        pad_end:0        # 下/后部填充內(nèi)容    

        #########################
        # 方式二:
        height: 65       #指定插值后的圖形高度
        width: 65         #指定插值后的圖形寬度
    }
}

11、Concat層

把多個bottom拼接為1個output
對于兩個bottom N1C1W1H1和bottom N2C2W2H2
可以對N和C進行拼接 W和H一定要一樣 concat_dim

layer
{
    name:"Concat_layer"
    type:"Concat"
    bottom:"A"    
    bottom:"B"
    top:"C"
    concat_param
    {
        concat_dim:0   #為0是合并N 為1時合并C
     }
}

12、數(shù)據(jù)層圖像輸入層ImageData

source為 圖片路徑+‘ ’+ label標(biāo)簽

layer {
  name: "demo"
  type: "ImageData"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
    mean_value: 128
  }
  image_data_param {
    source: "/Data/WEP/learn-caffe/CUB_200_2011/image_label.txt"
    root_folder: "/Data/WEP/learn-caffe/CUB_200_2011/images/"
    new_height: 128
    new_width: 128
    is_color: false
    batch_size: 256
    shuffle: true
  }
}

13、激活層

能夠增加模型的非線性性,以擬合復(fù)雜的函數(shù)
ReLU與其說是一個在做一個逼近,不如說是在做一個分段

14、BN層

BN就是在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中對每層的輸入數(shù)據(jù)加一個標(biāo)準(zhǔn)化處理。


BN.png

在caffe網(wǎng)絡(luò)中 最后一步γ*s2 +β由scale層實現(xiàn),因此在caffe中scale層一般跟在BatchNorm層后

layer {
    bottom: "res2a_branch2b"
    top: "res2a_branch2b"
    name: "bn2a_branch2b"
    type: "BatchNorm"
    batch_norm_param {
        use_global_stats: false
    }
}

12、maxout層

同時連接多個激活函數(shù),選擇激活值最大的函數(shù)為輸出,因此參數(shù)會比一個激活函數(shù)多k個,因此參數(shù)會成倍增加,該層可以看做是對激活層的學(xué)習(xí)

未完待續(xù)...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容