caffe official tutorial: https://caffe.berkeleyvision.org/tutorial/net_layer_blob.htmlhtml
blobs, Layers, and Nets: anatomy of a caffe model 數組
深度網絡是一個由多個部件組成的模型,它能表徵一系列做用於一堆數據的全鏈接層。這個網絡從輸入數據到輸出loss定義了整個模型的bottom-to-top結構。數據及其衍生的中間數據經過forward和backward流經整個網路, 交流以及操縱信息都是經過blobs結構。blob 是一個標準數組以及框架內統一的內存接口。layer是模型和計算的基石。net是網和網之間的鏈接。blob的細節部分描述了信息是如何在layers/ nets中存儲並進行交流的。網絡
solver 用於將模型與優化進行分隔, 解耦使得整個框架的面向對象屬性更濃。框架
blob storage and communication模塊化
blob是一個caffe的數據包裝器,同時保證在CPU和GPU中同步。數學上,blob是一個n維數組存儲在連續空間中。工具
caffe存儲和交流數據都是用blobs。blob提供統一的接口存儲數據:圖像數據,模型參數,優化超參等!優化
caffe中的blob能夠存儲圖像數據,存儲格式爲NKHW。舉個例子, 在一個四維的blob中,索引爲(n,k,h,w)的數值物理上在內存中的地址爲((n * K + k) * H + h) * W + w.atom
除了四維的圖像數據,blob 還能夠表徵兩維的全鏈接數據。blobs(shape(N, D)).htm
參數blob的維度受到層的類型type和configuration 所決定。若是是一個卷積層, 有96個filters, 每一個filter的大小是11 * 11, 輸入維度爲3, 那麼這個blob的參數個數爲96 * 3 * 11 * 11。 若是是一個全鏈接層, 輸出維度是1000, 輸入維度是1024, 那麼該層的blob形狀爲1000 * 1024.對象
對於自定義數據, 可能須要破解您本身的輸入準備工具或者數據層,可是一旦自定義數據完成,我的的工做部分就完成了。 層的模塊化會幫您完成接下來的工做。
implementation details
咱們常常關心blob的梯度, 一個blob存儲兩塊存儲信息,一塊是參數數據,一塊是梯度。 前者是咱們正常通過的參數信息,後者是網絡所計算的梯度。
更進一步,實際的數值存儲在CPU或者GPU上, 有兩種不一樣的方式去獲取它們,一是常數方式,不改變數值;一是可變方式。
有一段cpu gpu同步的東西沒太看懂。
layer computation and connections
layer是模型的本質, 是計算的基本單元。layer 包括卷積,池化, 全鏈接, relu , sigmoid , eltwise,load data, 計算loss(如softmax, hinge等)。
layer 的輸入時bottom, 輸出是top.
每一層包括三種關鍵的計算:setup、forward 和 backward。
更特別地, 有兩種forward和backward function須要實現,一種是cpu版本,一種是GPU版本。