深度学习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对维度信息进行描述。

发布了97 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bhniunan/article/details/104518484