標籤:output 數學 net 儲存 基本操作 之間 back 初始化 batch
深度網路(net)是一個組合模型,它由許多相互串連的層(layers)組合而成。Caffe就是組建深度網路的這樣一種工具,它按照一定的策略,一層一層的搭建出自己的模型。它將所有的資訊資料定義為blobs,從而進行便利的操作和通訊。Blob是caffe架構中一種標準的數組,一種統一的記憶體介面,它詳細描述了資訊是如何儲存的,以及如何在層之間通訊的。
1、blob
Blobs封裝了運行時的資料資訊,提供了CPU和GPU的同步。從數學上來說,Blob就是一個N維數組。它是caffe中的資料基本單位,就像matlab中以矩陣為基本操作對象一樣。只是矩陣是二維的,而Blob是N維的。N可以是2,3,4等等。對於圖片資料來說,Blob可以表示為(N*C*H*W)這樣一個4D數組。其中N表示圖片的數量,C表示圖片的通道數,H和W分別表示圖片的高度和寬度。當然,除了圖片資料,Blob也可以用於非圖片資料。比如傳統的多層感知機,就是比較簡單的全串連網路,用2D的Blob,調用innerProduct層來計算就可以了。
2、layer
層是網路模型的組成要素和計算基本單位。層的類型比較多,如Data,Convolution,Pooling,ReLUmSoftmax-loss,Accuracy等,一個層的定義大致如:
從bottom進行資料的輸入,計算後,通過top進行輸出。圖中的黃色多邊形表示輸入輸出的資料,藍色矩形展示層。
每一種類型的層都定義為三種關鍵的計算:setup,forward and backword
setup:層的建立和初始化,以及在整個模型中的串連初始化。
forward:從bottom得到輸入資料,進行計算,並將計算結果送到top,進行輸出。
backward:從層的輸出端top得到資料的梯度,計算當前層的梯度,並將計算結果送到bottom,向前傳遞。
3、Net
就像搭積木一樣,一個net由多個layer組合而成。
現給出一個簡單的2層神經網路的模型定義(加上loss層就變成三層了),先給出這個網路拓撲。
第一層:name為mnist,type為Data,沒有輸入(bottom),只有兩個輸出(top),一個為data,一個為label
第二層:name為ip,type為InnerProduct,輸入資料data,輸出資料ip
第三層:name為loss,type為SoftmaxWithLoss,有兩個輸入,一個為ip,一個為label,有一個輸出loss,沒有畫出來。
對應的設定檔prototxt就可以這樣寫:
name: "LogReg" layer { name: "mnist" type: "Data" top: "data" top: "label" data_param { source: "input_leveldb" batch_size: 64 } } layer { name: "ip" type: "InnerProduct" bottom: "data" top: "ip" inner_product_param { num_output: 2 } } layer { name: "loss" type: "SoftmaxWithLoss" bottom: "ip" bottom: "label" top: "loss" }
第一行將這個模型取名為LogReg,然後是三個layer的定義,參數都比較簡單,只列出必須的參數。
【轉】Caffe初試(八)Blob,Layer和Net以及對應設定檔的編寫