caffe的基本資料結構
1. 結構的生成:caffe的基本結構是採用google的proto庫自動生成的,基本流程就是定義一個配置檔案,副檔名為proto,呼叫proto庫的編譯器編譯這個檔案可以生成相應的類的c++的程式碼。具體的可以參見proto庫的介紹。
下面來介紹caffe中用到的一些結構
2.Blob結構:
a. blob是一個標準的Array,主要負責caffe中資料的儲存(stores)、關聯(communicates)、以及資料的操作(manipulates)。資料在網路結構中要經過正向以及反向轉播的過程,在這個過程中要對於資料進行儲存、資料之間的通訊、以及資料的操作,blob就是負責這個工作的。
在具體的形式上blob是一個4-D結構的array,是按照(Num,Channels,Height and Width)的順序儲存的,這裡的Num相當於minibatch SGD中的batch這樣一個概念。此處據作者的解釋是應為legacy reason。
b. blob中資料的dimentions為Num N*channel K * Height H * Width W.記憶體是行優先的(row-major)。訪問資料的時候按照如下的規則來訪問index(n,k,h,w) 在物理上位於index((n*K + k) *H + h)*W + w. 這裡要注意,index(n,k,h,w)實際上訪問的是記憶體中(n+1,k+1,h+1,w+1)位置的資料,這是因為索引是從0開始的。
N是batch size of data,在ImageNet中這個值是256,Channls是feature dimention對於RGB影象來說K = 3. blob的維度是根據layer的type和configuration不同計算不同的,對於一個有96個filter,11*11的spatialdimension,3個input的blob的conv layer來說,其dimention為96*3*11*11,對於一個有1000個ouput channel以及1024個input channnels的 fully-connected layer來說blob的維度為1*1*1000*4096。
c.blob中的資料訪問方法:const方式以及mutable方式,前者訪問不能改變資料,後者訪問可以改變資料。這種設計主要為了cpu和gpu之間資料的同步,具體的還要深入研究一下。這個有GPU和CPU兩個版本。
d.blob中資料分為兩個chunks一個是data一個是diff,前者是正常的的傳遞的資料,後者是網路計算的gradient。
3. Layer結構:
a. Layer是一個核心的結構,它主要定義了基本的計算單元,也就是每一層的具體形式。這個層包括convolve filter、pools、inner products、loss等不同定義
b. 每一個Layer定義了三個核心的計算:
1)Setup:初始化layer和its connections
2)Forward:根據從bottom來的輸入計算輸出送到top
3)Backward:根據top output的gradient計算input的gradient,然後輸送到bottom。同時還會計算相對於parameters的gradient,並在內部儲存
4. Net結構:
a.Net是一個DAG/directed acyclic graph,其節點就是一個個的Layer結構,net從data layer開始,以loss layer結束。
b.通過呼叫Net::Init()來初始化net,初始化做了兩個工作,一個是建立blobs和layers,呼叫layer::setup(),一個是做一些bookkeeping的事情,比如驗證網路結構的有效性,輸出一些log等。在net建立後,則根據Caffe::mode()使用cpu或者gpu進行計算。
5. 總結
在caffe裡面這幾個關鍵的結構中,blob負責的是資料的儲存,Layer負責了資料計算的傳輸,而net則將前兩者又包了一層,net將會扔到slover(關於slover後邊再分析)中進行最終的學習。
下面來介紹caffe中用到的一些結構
2.Blob結構:
a. blob是一個標準的Array,主要負責caffe中資料的儲存(stores)、關聯(communicates)、以及資料的操作(manipulates)。資料在網路結構中要經過正向以及反向轉播的過程,在這個過程中要對於資料進行儲存、資料之間的通訊、以及資料的操作,blob就是負責這個工作的。
在具體的形式上blob是一個4-D結構的array,是按照(Num,Channels,Height and Width)的順序儲存的,這裡的Num相當於minibatch SGD中的batch這樣一個概念。此處據作者的解釋是應為legacy reason。
b. blob中資料的dimentions為Num N*channel K * Height H * Width W.記憶體是行優先的(row-major)。訪問資料的時候按照如下的規則來訪問index(n,k,h,w) 在物理上位於index((n*K + k) *H + h)*W + w. 這裡要注意,index(n,k,h,w)實際上訪問的是記憶體中(n+1,k+1,h+1,w+1)位置的資料,這是因為索引是從0開始的。
N是batch size of data,在ImageNet中這個值是256,Channls是feature dimention對於RGB影象來說K = 3. blob的維度是根據layer的type和configuration不同計算不同的,對於一個有96個filter,11*11的spatialdimension,3個input的blob的conv layer來說,其dimention為96*3*11*11,對於一個有1000個ouput channel以及1024個input channnels的 fully-connected layer來說blob的維度為1*1*1000*4096。
在caffe文件中指出 blob的dimensions vary according to the type and configuration of the layers,N代表的含義在不同的層中是不一樣的,在輸入的Data層中,N代表了mini batch size,也就是一次可以處理的影象的數目,在conv層中,N確實代表了filter的數目,這是程式碼結構定義方面的問題,和演算法本身沒有關係。)
c.blob中的資料訪問方法:const方式以及mutable方式,前者訪問不能改變資料,後者訪問可以改變資料。這種設計主要為了cpu和gpu之間資料的同步,具體的還要深入研究一下。這個有GPU和CPU兩個版本。
d.blob中資料分為兩個chunks一個是data一個是diff,前者是正常的的傳遞的資料,後者是網路計算的gradient。
3. Layer結構:
a. Layer是一個核心的結構,它主要定義了基本的計算單元,也就是每一層的具體形式。這個層包括convolve filter、pools、inner products、loss等不同定義
b. 每一個Layer定義了三個核心的計算:
1)Setup:初始化layer和its connections
2)Forward:根據從bottom來的輸入計算輸出送到top
3)Backward:根據top output的gradient計算input的gradient,然後輸送到bottom。同時還會計算相對於parameters的gradient,並在內部儲存
4. Net結構:
a.Net是一個DAG/directed acyclic graph,其節點就是一個個的Layer結構,net從data layer開始,以loss layer結束。
b.通過呼叫Net::Init()來初始化net,初始化做了兩個工作,一個是建立blobs和layers,呼叫layer::setup(),一個是做一些bookkeeping的事情,比如驗證網路結構的有效性,輸出一些log等。在net建立後,則根據Caffe::mode()使用cpu或者gpu進行計算。
5. 總結
在caffe裡面這幾個關鍵的結構中,blob負責的是資料的儲存,Layer負責了資料計算的傳輸,而net則將前兩者又包了一層,net將會扔到slover(關於slover後邊再分析)中進行最終的學習。
相關文章
- caffe study - 資料結構(1)資料結構
- 基本資料結構梳理資料結構
- 資料結構的基本概念資料結構
- 七、基本資料結構(樹形結構)資料結構
- c++基本資料結構C++資料結構
- Python基本資料結構Python資料結構
- 【資料結構】樹的基本知識資料結構
- Caffe程式碼結構
- Redis基本資料結構之ZSetRedis資料結構
- 基本資料結構演算法資料結構演算法
- Redis概述及基本資料結構Redis資料結構
- caffe學習(1)caffe模型三種結構模型
- C++資料結構連結串列的基本操作C++資料結構
- MySQL InnoDB表--BTree基本資料結構MySql資料結構
- 資料結構的一些基本概念資料結構
- 資料結構筆記——樹的基本概念資料結構筆記
- Redis基本資料型別底層資料結構Redis資料型別資料結構
- (2)caffe總結之目錄結構
- php實現基本資料結構之連結串列PHP資料結構
- 基本線性資料結構的Python實現資料結構Python
- Redis 學習-資料結構基本簡介Redis資料結構
- 資料結構-基本概念和術語資料結構
- iOS探索:Runtime之基本資料結構iOS資料結構
- 驅動開發之基本資料結構資料結構
- 資料結構——圖相關基本概念資料結構
- TS基本概念和資料結構(轉資料結構
- 程式語言基本組成:資料結構資料結構
- 資料結構基本概念和術語資料結構
- Vuejs基本知識(一)【專案資料夾基本結構】VueJS
- 資料結構實驗5、鏈佇列的基本操作資料結構佇列
- 你真的懂Redis的5種基本資料結構嗎?Redis資料結構
- 資料結構之第一講 基本概念資料結構
- Linux檔案結構及基本資料夾Linux
- 資料結構3-4周總結(1) 基本操作資料結構
- JS 中普通物件資料型別的基本結構和操作JS物件資料型別
- 張量tensor:機器學習的基本資料結構介紹 - Santiago機器學習資料結構Go
- C++ 手撕--基本資料結構的簡單實現C++資料結構
- caffe study- AlexNet 之結構篇