Caffe中卷基層和全連線層訓練引數個數如何確定

2021-07-22 05:06:36 字數 2504 閱讀 1036

慢慢填坑中,今天來仔細講一下卷基層和全連線層訓練引數個數如何確定的問題。我們以mnist為例,首先貼出網路配置檔案:

[python]view plain

copy

name: 

"lenet"

layer   

transform_param   

include:   

}  layer   

transform_param   

include:   

}  layer   

param   

convolution_param   

bias_filler   

}  }  

layer    

param   

param   

}  layer   

}  layer   

}  layer   

layer   

param   

convolution_param   

bias_filler   

}  }  

layer    

param   

param   

}  layer   

}  layer   

}  layer   

layer   

param   

inner_product_param   

bias_filler   

}  }  

layer   

layer   

param   

inner_product_param   

bias_filler   

}  }  

layer   

}  layer   

ok,在開始講解之前我們先說明幾個問題:

1、輸入的大小是28*28,;

2、我們將分三部分講解,因為三部分計算方式不同;

3、由於偏置量b的個數與卷積核的個數相同,因此我們講解的主要是權重,偏置量個數加上就可以了。

1、第乙個卷積conv1,之所把第乙個卷積單獨拿出來,是因為他和後面的卷積計算方式不同,他訓練引數個數計算並不關心輸入,這裡的資料就是指data層中batch_size大小。也可以說第乙個卷基層並不關心特徵組合,只是提取特徵。

在每乙個卷積層中都以乙個引數

num_output,這個引數怎麼理解呢?

兩種理解方式1、卷積的種類個數;2、輸出特徵圖的個數,我麼可以認為一種卷積核提取一種特徵,然後輸出一張特徵。

由於第乙個卷積層只是簡單的提取特徵,並沒有進行特徵組合,因此訓練引數個數計算只是num_output*kernel_size^2.這裡怎麼理解呢?(由於我不會畫圖,需要大家一點想象力)假設我們的輸入有5張圖,num_output=3,kernel_size=5。沒有進行特徵組合,只是簡單提取特徵,指的是一種卷積核對5張圖的同一區域使用相同的權重進行卷積計算,這樣每幅圖使用相同的卷積核就能提取到相同的特徵,然後相同的特徵組成一張特徵圖。

2、第二個卷積至全連線層之間的卷積,這些卷積層的訓練引數個數和輸入特徵圖的數量有關,因為這些卷積層需要進行特徵組合。舉個例子:conv1的num_output=20,說明卷積1層輸出了20個特徵圖,那麼卷積2層的輸入就是20。conv2的num_output=50,kernel_size=5,那麼計算公式是20*50*5*5.

為什麼這些卷積層的訓練個數和輸入的特徵圖的數量有關呢?重點還是在特徵組合。輸入的20個特徵圖,每個特徵圖代表一種特徵,如果我們給每種特徵不同的權重那是不是就進行了特徵組合呢?conv2的卷積核是5*5,對20個特徵圖進行卷積,那就會有20組(5*5)個連線(每張特徵圖是一組),如果這20組卷積核的權重相同,那就回到了第乙個卷積層的情況,沒有對20個特徵進行組合,因為權重相同嘛!只能看成簡單的相加,如果20組權重不同,是不是就進行了線性相加了呢?所以對於乙個卷積核(5*5)我們要學習的引數不是25個,而是25*20個。說到這裡我相信你應該已經明白了吧!

3、全連線層,全連線層就是普通的神經網路,全連線層的num_output和卷積層中num_output的理解不同,全連線層的num_output應該看成神經元的個數。

3.1、這裡要細分一下,先說ip1也就是第乙個全連線層。先講一下ip1的輸入,比如最後乙個卷積層的num_output=50,那麼ip1的輸入是50嗎?注意這裡不是,要理解這個問題,我們只需將全連線層看成是一些列的普通神經網路就可以。比如ip1的num_output=500,也就是有500個神經元,每個神經元都和輸入的每乙個畫素相連,最後乙個卷積層輸出了50個特徵圖,每個特徵圖大小是4*4(輸入影象是28*28)那麼每個神經元連線的個數就是50*16=800個,也就有800個引數需要學習。總共有500個神經元,因此對於ip1層共需要學習800*500=400,000個引數。

3.2、對於ip2層,ip2的輸入就是ip1的輸出了,因為ip1輸出的不是影象了(或矩陣)而是500個數字。比如ip2的num_output=10,也就是輸出資料500維,輸出10維的普通神經網路,那麼需要學習的引數就是500*10=5000個。

Caffe原始碼閱讀 1 全連線層

發表於 2014 09 15 今天看全連線層的實現。主要看的是 主要是三個方法,setup,forward,backward 主體的思路,作者的注釋給的很清晰。主要是要弄清楚一些變數對應的含義 123 m 表示的樣本數 k 表示單個樣本的特徵長度 n 表示輸出神經元的個數 為了打字方便,以下省略下劃...

全連線層和啟用層

1.全連線層 經過前面若干次卷積 激勵 池化後,終於來到了輸出層,模型會將學到的乙個高質量的特徵全連線層。其實在全連線層之前,如果神經元數目過大,學習能力強,有可能出現過擬合。因此,可以引入dropout操作,來隨機刪除神經網路中的部分神經元,來解決此問題。還可以進行區域性歸一化 資料增強等操作,來...

全連線層後面加bn層 池化層和全連線層應用

實際的卷積網路很少僅通過卷積層來構建。它們通常還有其他型別的層。最簡單的是全連線層。這是一種普通的卷積網路層,其中前一層的所有輸出被連線到下一層上的所有節點。通常,這些層位於網路末端。您會在卷積網路中看到的另一種重要的層是池化層。池化層具有多種形式,但最常用的是最大池化,其中輸入矩陣被拆分為相同大小...