caffe study - 資料結構(1)
【原文:http://blog.sina.com.cn/s/blog_eb3aea990102v2oq.html】
以下主要是對於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 study- AlexNet 之結構篇
- caffe的基本資料結構資料結構
- caffe學習(1)caffe模型三種結構模型
- Caffe程式碼結構
- Study Blazor .NET(四)資料繫結Blazor
- 資料結構(1):棧資料結構
- 資料結構實驗1資料結構
- caffe study(5) - AlexNet 之演算法篇演算法
- (2)caffe總結之目錄結構
- 可持久化資料結構1持久化資料結構
- caffe study(4) - 優化演算法基本原理優化演算法
- 面試集錦(六)資料結構(1)面試資料結構
- 資料結構學習筆記1資料結構筆記
- 資料結構與演算法(1)資料結構演算法
- 資料結構實驗課五-1資料結構
- App Extension Study 1APP
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- 結構化資料、半結構化資料和非結構化資料
- Caffe 訓練mnist資料
- 資料結構的練習day1資料結構
- 【資料結構篇】認識資料結構資料結構
- .NET Core 資料結構與演算法 1-1資料結構演算法
- 實戰資料結構(1)_單連結串列的操作資料結構
- 資料結構小白系列之資料結構概述資料結構
- 前端資料結構(1)之棧及其應用前端資料結構
- 演算法和資料結構-簡版1演算法資料結構
- 資料結構與集合之(1)ArrayList 與 Arrays資料結構
- day 2 數學基礎 &資料結構1資料結構
- pandas 學習(1): pandas 資料結構之Series資料結構
- 瞭解oracle資料庫體系結構(1)Oracle資料庫
- 資料結構?資料結構
- 資料結構資料結構
- 資料結構3-4周總結(1) 基本操作資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 資料遷移(1)——通過資料泵表結構批量遷移
- 資料結構與演算法(1)- 基礎概念資料結構演算法
- Oracle 19c資料庫體系結構-1Oracle資料庫
- 演算法與資料結構(1)--線性表演算法資料結構