blob資料結構是caffe中基本的資料儲存單元,它主要儲存的資料是網路中的中間資料變數,比如各層的輸入和輸出;代價函式關於網路各層引數的梯度。為什麼要專門為資料設計乙個儲存結構,我的理解是這樣保證的網路中的資料儲存結構的統一性,由於網路中每個網路的計算過程都是相似的,所以如果能把資料儲存也統一起來,使得整個程式也就很有結構。
1,blob中除了儲存重要的資料之外,還有一些標記資料的引數,下面就羅列一下blob中的資料成員:
protected:
shared_ptrdata_;
shared_ptrdiff_;
shared_ptrshape_data_;
vectorshape_;
int count_;
int capacity_;
data_:表示網路各層的輸入和輸出;
diff_:表示代價函式相對於各層引數的梯度;
shape_:是乙個可變陣列,shape_中主要儲存4個變數:num表示乙個batch中的樣本數量,從這我們可以看出blob的儲存是以batch為基本單位的;chennels表示對應層的通道,比如卷積層有20個卷積核,channels的值就是20;height和width就表示單個資料的尺寸,可能是一副影象的尺寸,也可能表示卷積核的尺寸,在每一層所代表的含義也不相同。
count_:表示這個blob裡已經儲存的元素的個數;
capacity_:表示這個blob的容量;
網上說可以把blob看作乙個四維的陣列,其實是可以從這個角度看,但是本質上blob還是一維的儲存結構,只不過是利用四個引數來進行定址(shape_裡的四個引數)。所以說blob其實並不是含有什麼複雜的結構。
2,blob中除了資料成員之外,也有很多用於運算元據的函式成員,下面就說幾個比較重要的:
void blob::reshape():這個函式是在原來分配的記憶體不夠的情況下重新分配記憶體。
const dtype* blob::cpu_data():這個是獲取blob結構體中的data_資料的指標,同時限制不能對返回的指標指向的內容進行更改。
const dtype* blob::cpu_diff():這個是獲取blob結構體中的diff_資料的指標,同時限制不能對返回的指標指向的內容進行更改。
dtype* blob::mutable_cpu_data():獲取blob結構體中的data_資料的指標,同時可以對指標指向的內容更改。
dtype* blob::mutable_cpu_diff():獲取blob結構體中的diff_資料的指標,同時可以對指標指向的內容更改。
void blob::sharedata(const blob& other):讓其他blob的data_資料和當前blob共享。
void blob::sharediff(const blob& other):讓其他blob的diff_和當前的blob共享。
這就是關於blob的主要內容,關於blob中的syncedmemory資料型別,這裡不深究,現在只知道data_和diff_都是使用這種資料型別構造資料。
Caffe中的Blob資料結構
blob是caffe最基礎的資料結構。它有4維 num channels height width 我們通過 來看看 include include include using namespace caffe using namespace std int main void caffe使用blob...
Caffe資料結構一Blob
blob是caffe的基本儲存單元,用於儲存權值 data 和權值增量 diff blobproto物件實現磁碟,記憶體之間的資料通訊。對於載入,儲存訓練好的模型的權值非常實用。include include include include using namespace caffe using n...
caffe 基本資料結構blob
tags caffe blob blob是caffe中的基本資料結構,簡單理解就是乙個 4維陣列 但是,這個4維陣列有什麼意義?btw,tensorflow這款google出的框架,帶出了tensor 張量 的概念。雖然是數學概念,個人還是傾向於簡單理解為 多維陣列 那麼放在這裡,caffe的blo...