深度學習caffe數據結構(一)—— 數據結構概述

        caffe框架中,數據結構主要包括:Blob、Layer、Net、Solver。caffe的所有數據結構都在caffe根目錄下的src/caffe/proto/caffe.proto文件中進行了描述。

        首先,Blob是caffe中基本的數據結構,如果把caffe比作一棟大樓,那麼Blob就是每一塊磚。通過Blob這些磚構建成一層一層的樓層Layer,每一層合在一起就構成了大樓Net。prototxt用來描述網絡和求解器,它可以看做是大樓的圖紙,而Solver則可以看做是大樓的建築工藝。

1、Blob

        Blob是caffe的基本數據結構,它在內存中表示4維數組,維度由高到低爲(num、channels、height、width)。這四個維度可以這樣理解,它們用來描述一組圖像,num可以理解爲圖像的個數,channels可以理解爲顏色通道,比如RGB的每個通道,height和width則可以理解爲圖像的高和寬。Blob存儲了包括神經元的激活值、參數、以及相應的梯度。在進行網絡計算時,每層的輸入輸出都是需要通過Blob對象緩衝。

2、Layer

        代表神經網絡的層,由各種各樣的層來構成整個網絡。一般一個圖像或樣本會從數據層中讀進來,然後一層一層的往後傳。所以每個Layer至少有一個輸入Blob和一個輸出Blob,部分Layer帶有權值和偏置項,有兩個運算方向:前向傳播和反向傳播,其中前向傳播計算會對輸入Blob進行某種處理(有權值和偏置項的Layer會利用這些對輸入進行處理),得到輸出Blob;而反向傳播計算則對輸出Blob的diff進行某種處理,得到輸入Blob的diff(有權值和偏置項的Layer會計算權值Blob、偏置項Blob的diff)。

3、Net

        Net在caffe中代表一個完整的CNN模型,它包含若干Layer實例。它相當於一張圖紙,在caffe中通過.prototxt文件進行描述。通過對.prototxt文件的研究,發現Net就是若干Layer的集合體。

4、Slover

        Solver是按solver.prototxt的參數定義對Net進行訓練,首先會初始化一個TrainNet和一個TestNet,然後其中的Step函數會對網絡不斷進行迭代,主要就是兩個步驟反覆迭代:(1)不斷利用ComputeUpdateValue計算迭代相關參數。(2)調用Net的Update函數對整個網絡進行更新。迭代中的訓練日誌中的大部分輸出也是在這裏輸出的。

        本文只對caffe的數據結構進行簡單介紹,在接下來的文章中,我們將會對caffe數據結構進行代碼級的詳細介紹,逐層揭開caffe的神祕面紗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章