caffe學習(1)caffe模型三種結構

小一一啦發表於2016-11-04

caffe模型三種結構

Blobs, Layers, and Nets: anatomy of a Caffe model


Blob:儲存和傳遞(communication)

blob是資料儲存和傳輸的包裝,並且還在底層提供CPU和GPU之間的同步能力。Blob提供了儲存資料的統一儲存器介面; 例如影象批次,模型引數和用於優化的導數。 在數學上,blob是以C連續方式(C-contiguous fashion)儲存的N維陣列。
關於C連續方式,stackoverflow有一個解釋。該方式主要與Fortran和Matlab相反,是一種以行為主順序(Row-major order)的儲存方式,簡單的說就是把一行存完,再存下一行,把第一個通道(channel)的所有行寫完後寫完再寫下一個通道。例如對一批(batches)影象,用4維blob儲存,表示為number N(資料批量大小) x channel K(通道、維度特徵) x height H (高)x width W(寬),對於索引 (n, k, h, w) 的實體地址就是:((n * K + k) * H + h) * W + w,注意區分大小寫,大寫是總的,小寫是索引值。對於影象是4D的,當然也可以不用4D。具體引數需要根據層型別和資料大小配置。
blob使用了兩塊儲存區域,為data(資料)和diff(網路梯度),實際值可以儲存在CPU或GPU上,訪問也可以不變(const)訪問或者可變(mutable)訪問。
const Dtype* cpu_data() const;
Dtype* mutable_cpu_data();
同理可得GPU上diff型別資料操作。官網上有一個example,展示了資料在CPU和GPU上流動操作。

Layer計算和連線

Layer包括很多計算方法,如

  • Vision Layers:Convolution、Pooling、LRN
  • Loss Layers:Softmax、Sum-of-Squares

既然作為計算,就有輸入輸出,輸入從底部(bottom)獲取,並通過頂部(top)連線輸出。每層須有三個關鍵計算:setup, forward, and backward。

  • setup:初始化層和連線。
  • forward:底部向頂部計算。
  • backward:給定梯度,從top計算傳回bottom。A layer with parameters computes the gradient w.r.t. to its parameters and stores it internally.(是說存在layer中嗎)

forward和backward也分為CPU和GPU兩個版本。

If you do not implement a GPU version, the layer will fall back to the CPU functions as a backup option. This may come handy if you would like to do quick experiments, although it may come with additional data transfer cost

這裡好像是說使用GPU會因為資料需要從CPU複製到GPU上,因此會有資料傳輸成本,但GPU跑的還是快一些,所以是quick experiments。

Net定義和操作

Net由Layer組成(The net is a set of layers connected in a computation graph有向無環圖)。模型初始化由Net :: Init()處理:主要是建立blob和layer,並呼叫layer裡的setup,同時會輸出INFO。

模型格式

模型定義在.prototxt檔案中,訓練好的模型在model目錄下.binaryproto格式的檔案中,模型的格式由caffe.proto定義。

相關文章