主要參考:
甘宇飛 -
樓燚(yì)航的blog
caffe主要有四個類:blob,layer,net,solver,分為三個層次:
caffe支援cuda加速,在資料級別上也做了一些優化。blob為protocol buffer所定義的資料結構的繼承,caffe在盡可能小的記憶體占用下獲得很高的效率。
layer中的blob用下面的形式表示學習到的引數:
vector
> > blobs_;
這裡使用blob指標向量容器,是因為某些layer包含多種學習引數,比如多個卷積核的卷積層。
而layer所傳遞的資料形式,後面也會涉及:
vector
*> ⊥
vector
*> *top
caffe十分強調網路的層次性,也就是說卷積操作,非線性變換(relu等),pooling,權值連線等全部都由某一種layer來表示。
layer有5大派生型別:
在layer內部,資料主要有兩種傳遞方式,正向傳導和反向傳導,均有cpu和gpu的兩種實現。caffe中所有的layer都要用這兩種方法傳遞資料
virtual
void forward(const
vector
*> &bottom,
vector
*> *top) = 0;
virtual
void backward(const
vector
*> &top,
const
vector
&propagate_down,
vector
*> *bottom) = 0;
在網路結構定義檔案(*.proto)中每一層的引數bottom和top數目就決定了vector中元素數目
vector
loss_;
每一層又有乙個loss_值,只有loss_layer才可能產生非0的loss_。
vector
> > blobs_;
layer學習到的引數
net用容器的形式將多個layer有序地放在一起,其自身實現的功能主要是對逐層layer進行初始化,以及提供update( )的介面(更新網路引數),本身不能對引數進行有效地學習過程。
vector
> > layers_;
同樣net也有它自己的
vector
*>& forward(const
vector
* > & bottom, dtype* loss = null);
void net::backward();
他們是對整個網路的前向和方向傳導,各呼叫一次就可以計算出網路的loss了。
這個類中包含乙個net的指標,主要是實現了訓練模型引數所採用的優化演算法,它所派生的類就可以對整個網路進行訓練了。
shared_ptrtype> > net_;
不同的模型訓練方法通過過載函式computeupdatevalue( )實現計算update引數的核心功能
virtual
void computeupdatevalue() = 0;
最後當進行整個網路訓練過程(也就是你執行caffe訓練某個模型)的時候,實際上是在執行caffe.cpp中的train( )函式,而這個函式實際上是例項化乙個solver物件,初始化後呼叫了solver中的solve( )方法。而這個solve( )函式主要就是在迭代執行下面這兩個函式,就是剛才介紹的哪幾個函式。
computeupdatevalue();
net_->update();
Caffe學習之一 Caffe的基本結構
caffe官網教程 org tutorial caffe把模型定義成乙個layer by layer的網路,通過bottom to top連線input data到loss,資料在網路中傳遞時通過前向和反向傳播進行更新。1,blobs,layers,and nets blob是caffe處理和傳遞的...
caffe學習筆記(1)
caffe學習筆記 1 剛開始學習caffe,發現乙個非常好的部落格caffe學習。看了幾遍收益匪淺,但是總是記不住,所以決定安裝該部落格的步驟一點一點實現,然後記錄在該系列的部落格中。原部落格是在ubuntu下實現,而我是在mac下實現的,而且只是cpu模式的caffe,所以有些地方可能會有點詫異...
DL學習筆記 1 執行CAFFE程式
按照大神的 中的教程安裝就好啦 然後我這裡簡要寫一點點自己安裝過程中的問題和簡要的安裝過程 1 安裝vs2012 2 安裝cuda6.5 3 按照教程配置各種變數等 其中系統目錄是指環境變數 系統變數 path 然後成功安裝之後就是閃退啦,用命令列執行會出現這幾條語句 如果不需要編譯 就是根據c 程...