caffe的caffe.proto

caffe的caffe.proto

经过前面“caffe的protocol buffer使用例子”的学习,对caffe.proto熟悉了。

看caffe源码先从这里开始吧。
它位于…\src\caffe\proto目录下,在这个文件夹下还有一个.pb.cc和一个.pb.h文件,这两个文件都是由caffe.proto编译而来的。 
在caffe.proto中定义了很多结构化数据,包括:
  • BlobProto
  • Datum
  • FillerParameter
  • NetParameter
  • SolverParameter
  • SolverState
  • LayerParameter
  • ConcatParameter
  • ConvolutionParameter
  • DataParameter
  • DropoutParameter
  • HDF5DataParameter
  • HDF5OutputParameter
  • ImageDataParameter
  • InfogainLossParameter
  • InnerProductParameter
  • LRNParameter
  • MemoryDataParameter
  • PoolingParameter
  • PowerParameter
  • WindowDataParameter
  • V0LayerParameter
从caffe.proto编译而来的,无非就是一些关于这些数据结构(类)的标准化操作,比如:
  void CopyFrom();//在ByteString中定义实现ByteString和字节数组/字符串互相转换函数
  void MergeFrom();//用于合并
  void Clear();
  bool IsInitialized() const;
  int ByteSize() const;

  bool MergePartialFromCodedStream();//解码时可以调用C++接口ParseFromArray,编码时可以先调用C++接口ByteSize预先获得编码后的数据大小,让后动态分配内存后调用SerializeToArray进行编码即可。

  void SerializeWithCachedSizes() const;//序列化打包
  SerializeWithCachedSizesToArray() const;
  int GetCachedSize()//打包后出来的大小
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize() const;

[cpp] view plain copy
 
  1. <0> BlobProto  
  2. message BlobProto {//blob的属性以及blob中的数据(data\diff)  
  3.   
  4.   optional int32 num = 1 [default = 0];  
  5.   optional int32 channels = 2 [default = 0];  
  6.   optional int32 height = 3 [default = 0];  
  7.   optional int32 width = 4 [default = 0];  
  8.   
  9.   repeated float data = 5 [packed = true];//存放数据,指向SyncedMemory的智能指针  
  10.   repeated fl  
  11. oat diff = 6 [packed = true];//存放梯度  
  12. }  
  13. <1> Datum  
  14.   message Datum {  
  15.   optional int32 channels = 1;  
  16.   optional int32 height = 2;  
  17.   optional int32 width = 3;  
  18.   optional bytes data = 4;//真实的图像数据,以字节存储(bytes)  
  19.   optional int32 label = 5;  
  20.   repeated float float_data = 6;//datum也能存float类型的数据(float)  
  21. }  
  22. <2> LayerParameter  
  23. message LayerParameter {  
  24.   repeated string bottom = 2; //输入的blob的名字(string)  
  25.   repeated string top = 3; //输出的blob的名字(string)  
  26.   optional string name = 4; //层的名字  
  27.   enum LayerType { //层的枚举(enum,和c++中的enum一样)  
  28.     NONE = 0;  
  29.     ACCURACY = 1;  
  30.     BNLL = 2;  
  31.     CONCAT = 3;  
  32.     CONVOLUTION = 4;  
  33.     DATA = 5;  
  34.     DROPOUT = 6;  
  35.     EUCLIDEAN_LOSS = 7;  
  36.     ELTWISE_PRODUCT = 25;  
  37.     FLATTEN = 8;  
  38.     HDF5_DATA = 9;  
  39.     HDF5_OUTPUT = 10;  
  40.     HINGE_LOSS = 28;  
  41.     IM2COL = 11;  
  42.     IMAGE_DATA = 12;  
  43.     INFOGAIN_LOSS = 13;  
  44.     INNER_PRODUCT = 14;  
  45.     LRN = 15;  
  46.     MEMORY_DATA = 29;  
  47.     MULTINOMIAL_LOGISTIC_LOSS = 16;  
  48.     POOLING = 17;  
  49.     POWER = 26;  
  50.     RELU = 18;  
  51.     SIGMOID = 19;  
  52.     SIGMOID_CROSS_ENTROPY_LOSS = 27;  
  53.     SOFTMAX = 20;  
  54.     SOFTMAX_LOSS = 21;  
  55.     SPLIT = 22;  
  56.     TANH = 23;  
  57.     WINDOW_DATA = 24;  
  58.   }  
  59.   optional LayerType type = 5; // 层的类型  
  60.   repeated BlobProto blobs = 6; //blobs的数值参数  
  61.   repeated float blobs_lr = 7; //学习速率(repeated),如果你想设置一个blob的学习速率,你需要设置所有blob的学习速率。  
  62.   repeated float weight_decay = 8; //权值衰减(repeated)  
  63.   
  64.   // 相对于某一特定层的参数(optional)  
  65.   optional ConcatParameter concat_param = 9;  
  66.   optional ConvolutionParameter convolution_param = 10;  
  67.   optional DataParameter data_param = 11;  
  68.   optional DropoutParameter dropout_param = 12;  
  69.   optional HDF5DataParameter hdf5_data_param = 13;  
  70.   optional HDF5OutputParameter hdf5_output_param = 14;  
  71.   optional ImageDataParameter image_data_param = 15;  
  72.   optional InfogainLossParameter infogain_loss_param = 16;  
  73.   optional InnerProductParameter inner_product_param = 17;  
  74.   optional LRNParameter lrn_param = 18;  
  75.   optional MemoryDataParameter memory_data_param = 22;  
  76.   optional PoolingParameter pooling_param = 19;  
  77.   optional PowerParameter power_param = 21;  
  78.   optional WindowDataParameter window_data_param = 20;  
  79.   optional V0LayerParameter layer = 1;  
  80. }  
  81. <3> NetParameter  
  82. message NetParameter {  
  83.   optional string name = 1;//网络的名字  
  84.   repeated LayerParameter layers = 2; //repeated类似于数组  
  85.   repeated string input = 3;//输入层blob的名字  
  86.   repeated int32 input_dim = 4;//输入层blob的维度,应该等于(4*#input)  
  87.   optional bool force_backward = 5 [default = false];//网络是否进行反向传播。如果设置为否,则由网络的结构和学习速率来决定是否进行反向传播。  
  88. }  
  89. <4> SolverParameter  
  90. message SolverParameter {  
  91.   optional string train_net = 1; // 训练网络的proto file  
  92.   optional string test_net = 2; // 测试网络的proto file  
  93.   optional int32 test_iter = 3 [default = 0]; // 每次测试时的迭代次数  
  94.   optional int32 test_interval = 4 [default = 0]; // 两次测试的间隔迭代次数  
  95.   optional bool test_compute_loss = 19 [default = false];  
  96.   optional float base_lr = 5; // 基本学习率  
  97.   optional int32 display = 6; // 两次显示的间隔迭代次数  
  98.   optional int32 max_iter = 7; // 最大迭代次数  
  99.   optional string lr_policy = 8; // 学习速率衰减方式  
  100.   optional float gamma = 9; // 关于梯度下降的一个参数  
  101.   optional float power = 10; // 计算学习率的一个参数  
  102.   optional float momentum = 11; // 动量  
  103.   optional float weight_decay = 12; // 权值衰减  
  104.   optional int32 stepsize = 13; // 学习速率的衰减步长  
  105.   optional int32 snapshot = 14 [default = 0]; // snapshot的间隔  
  106.   optional string snapshot_prefix = 15; // snapshot的前缀  
  107.   optional bool snapshot_diff = 16 [default = false]; // 是否对于 diff 进行 snapshot  
  108.   enum SolverMode {  
  109.     CPU = 0;  
  110.     GPU = 1;  
  111.   }  
  112.   optional SolverMode solver_mode = 17 [default = GPU]; // solver的模式,默认为GPU  
  113.   optional int32 device_id = 18 [default = 0]; // GPU的ID  
  114.   optional int64 random_seed = 20 [default = -1]; // 随机数种子  
  115. }  
posted @ 2016-03-28 15:36  菜鸡一枚  阅读(866)  评论(0编辑  收藏  举报