caffe数据结构(三): Net

Net在Caffe中表示一个完整的CNN模型,由一系列无回路有向图(DAG)的Layer组成,配置文件*.prototxt定义Layer间的连接。Net内部包含Layer对象和Blob对象,Blob存储中间结果,Layer执行计算并更新Blob。Net的重要变量和相关数据结构在caffe.proto中定义。

http://yufeigan.github.io/2014/12/09/Caffe%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B02-Caffe%E7%9A%84%E4%B8%89%E7%BA%A7%E7%BB%93%E6%9E%84-Blobs-Layers-Nets/
http://blog.csdn.net/buyi_shizi/article/details/51499869

Net在caffe中代表一个完整的CNN模型,由一系列的Layer组成(无回路有向图DAG),Layer之间的连接由一个文本文件*.prototxt描述.

Net中同时包含Layer对象和Blob对象.
Blob对象用于存放每个Layer输入输出的中间结果, Layer则根据Net描述对指定输入blob进行处理(所有的卷积,下采样,全连接,非线性变换,计算代价函数等操作都在这里实现),输出结果放到指定输出blob中.
输入blob和输出blob对象可能为同一个,所有的Layer对象和Blob对象都用名字区分, 同类间同名的即为同一个.

caffe:Net这个数据结构里包含了很多重要的变量:

    vector< shared_ptr< Layer< Dtype > > > //layers_变量存储的是每层layer结构体的指针。
    vector< shared_ptr< Blob< Dtype > > > //blobs_变量存放的是网络中层与层之间传递的数据,即每层的输入和输出。从这我们可以看出,每层的输入输出并不是存储在对应的层的结构体中的,而是统一存储在Net中。
    vector< vector< Blob< Dtype > * > > //bottom_vecs_变量存储的是每一层的输入的内存首地址,注意这只是存放的指针,真正的数据还是存放在blobs_中。
    vector< vector< Blob< Dtype > * > > //top_vecs_变量存储的是每一层的输出的内存的首地址,注意这也只是存放指针,真正的数据也是在blobs_中。
    vector< shared_ptr< Blob< Dtype > > > //params_存放是网络中每一层的参数。

Net中的重要类对象

layers_  //记录Net prototxt中出现的每个Layer
layer_names_  //记录Net prototxt中出现的每个Layer的名称
layer_names_index_  //记录Net prototxt中每个Layer 和顺序索引的对应关系
layer_need_backward_  //记录每个Layer是否需要反向传播过程

blobs_  //记录Net中所有blob
blob_names_  //记录每个blob名称
blob_name_index_  //记录每个blob名称和顺序索引的对应关系
blob_need_backward_  //记录每个blob 是否需要反向传播

bottom_vecs_  //blobs_ 的影子,记录每个layer的输入blob
bottom_id_vecs_  //与bottom_vecs_ 关联,用于在blobs_中定位每个layer的每个输入blob
bottom_need_backward_  //与bottom_vecs_ 关联,标志每个blob是否需要反向传播

top_vecs_  //blobs_ 的影子,记录每个layer的输出blob
top_id_vecs_  //与top_vecs_ 关联,用于在blobs_中定位每个layer的每个输出blob

blob_loss_weights_  //Net中每个blob对损失函数的投票因子,一般损失层为1,其它层为0

net_input_blob_indices_  //Net输入blob在blobs_中的索引
net_output_blob_indices_  //Net输出blob在blobs_中的索引
net_input_blobs_  //Net输入blob
net_output_blobs_  //Net输出blob

params_  //Net权值blob,用于存储网络权值
param_display_names_  //Net中权值blob的名称

learnable_params_  //Net中可训练的权值blob
params_lr_  //learnable_params_中每个元素的学习速率倍乘因子
has_param_lr_  //标志是否有
params_weight_decay_  //learnable_params_中每个元素的权值衰减倍乘因子
has_params_decay_  //标志是否有

caffe.proto 中和Net相关的数据结构:

message NetParameter {
  optional string name = 1; // consider giving the network a name
  // DEPRECATED. See InputParameter. The input blobs to the network.
  repeated string input = 3;
  // DEPRECATED. See InputParameter. The shape of the input blobs.
  repeated BlobShape input_shape = 8;

  // 4D input dimensions -- deprecated.  Use "input_shape" instead.
  // If specified, for each input blob there should be four
  // values specifying the num, channels, height and width of the input blob.
  // Thus, there should be a total of (4 * #input) numbers.
  repeated int32 input_dim = 4;

  // Whether the network will force every layer to carry out backward operation.
  // If set False, then whether to carry out backward is determined
  // automatically according to the net structure and learning rates.
  optional bool force_backward = 5 [default = false];
  // The current "state" of the network, including the phase, level, and stage.
  // Some layers may be included/excluded depending on this state and the states
  // specified in the layers' include and exclude fields.
  optional NetState state = 6;

  // Print debugging information about results while running Net::Forward,
  // Net::Backward, and Net::Update.
  optional bool debug_info = 7 [default = false];

  // The layers that make up the net.  Each of their configurations, including
  // connectivity and behavior, is specified as a LayerParameter.
  repeated LayerParameter layer = 100;  // ID 100 so layers are printed last.

  // DEPRECATED: use 'layer' instead.
  repeated V1LayerParameter layers = 2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值