深度學習caffe數據結構(三)—— blob數據結構描述

        在caffe中,blob數據結構是在caffe根目錄下的src/caffe/proto/caffe.proto文件中描述的,這個文件是對caffe的數據結構進行描述的文件。blob相關的描述如下所示

message BlobShape {
  repeated int64 dim = 1 [packed = true];
}

message BlobProto {
  optional BlobShape shape = 7;
  repeated float data = 5 [packed = true];
  repeated float diff = 6 [packed = true];
  repeated double double_data = 8 [packed = true];
  repeated double double_diff = 9 [packed = true];

  // 4D dimensions -- deprecated.  Use "shape" instead.
  optional int32 num = 1 [default = 0];
  optional int32 channels = 2 [default = 0];
  optional int32 height = 3 [default = 0];
  optional int32 width = 4 [default = 0];
}

        與blob相關的描述主要有兩個,其中BlobShape爲blob形狀的描述,它由若干個維度信息構成,維度的變量類型爲int64。比如在《深度學習caffe數據結構(二)》中的實例,則dim中有四個維度,分別爲2、2、3、3。需要注意的是,dim = 1 並不是賦值的語句,後邊的1是變量的ID,packed表示這些數值在內存中的排列方式,爲true表示數值在內存中緊密排列,不存在間隔。

        BlobProto是blob的詳細描述,它是Blob在磁盤中序列化後的形態,下面逐行進行解讀

optional BlobShape shape = 7;

這行定義的是blob的形狀,是一個BlobShape對象,它是可選的。

repeated float data = 5 [packed = true];

這行定義的是blob中的數據data,包含若干浮點型元素,它存儲的是數據或者權值,元素個數爲所有維度數的乘積,在《深度學習caffe數據結構(二)》實例中,data的元素個數爲num*channels*height*width。

  repeated float diff = 6 [packed = true];

這行定義的事blob中的增量信息diff,它包含若干浮點型元素,維度與data相同。

  repeated double double_data = 8 [packed = true];
  repeated double double_diff = 9 [packed = true];

這兩行定義的內容與data,diff相對應,只不過這兩行定義的數據是double型的。

  optional int32 num = 1 [default = 0];
  optional int32 channels = 2 [default = 0];
  optional int32 height = 3 [default = 0];
  optional int32 width = 4 [default = 0];

這四行是描述文件的最後四行,定義的是blob的維度信息,這四個維度的信息,是在老版本caffe中使用的,新版本依然支持,但是推薦使用shape對維度信息進行描述。

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