CAFFE 學習 1 基本的CAFFE結構

2021-07-30 06:32:06 字數 1969 閱讀 4022

主要參考:

甘宇飛 -

樓燚(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 程...