Caffe源码解读:Layer类

Layer类简介

  • 至少有一个输入,输出Blob。
  • 部分Layer带有权值和偏置项(如:激活层没有权值项)
  • 前向传播对输入Blob处理,得到输出Blob。反向传播对输出的diff进行处理,得到输入的diff

ProtoBuffer描述

打开./caffe/src/caffe/caffe.proto文件,找到LayerParameter,查看对应的数据结构描述如下(根据这个数据结构描述,相当于约定,就可以自动生成对应的.hpp文件):

// 注意
// 定义了自己的层的话,一定要更新下一个可用ID
// 下一个ID是147,最近更新:recurrent_param
message LayerParameter {
  optional string name = 1; // 可选参数,层的名字,string类型,下面类似
  optional string type = 2; // 层的类型
  repeated string bottom = 3; // 输入Blob对应的名字
  repeated string top = 4; // 输出Blob的名字

  // Train/Test阶段
  optional Phase phase = 10;

  // 每一层损失函数的权重,通常为0或者1,0表示不参与损失函数计算,1表示参与
  repeated float loss_weight = 5;

  // 具体的训练参数(比如相对于全局学习速率的缩放因子,权值衰减因子,这样就可以针对每一层设置不同的学习速率了)以及用于权值共享的名称(只有在需要权值共享的时候才需要名词)和其他设置,ParamSpec类型(这个类型的数据结构描述同样可以在当前文件中看到)
  repeated ParamSpec param = 6;

  // 该层的数值参数,BlobProto类型
  repeated BlobProto blobs = 7;

  // 是否需要对Bottom Blob进行反向传播,如果未指定,caffe会自动推断。该字段的维度数目应等于Bottom Blob的个数。即每层Bottom Blob都要指明是否需要反向传播
  repeated bool propagate_down = 11;

  // 根据当前网络状态规则,确定该层是否包含在网络中,如果没有指定任何规则,则一直被包含在网络中
  repeated NetStateRule include = 8;
  repeated NetStateRule exclude = 9;

  // 数据预处理参数
  optional TransformationParameter transform_param = 100;

  // 所有损失层共享的参数
  optional LossParameter loss_param = 101;

 // 不同层类型的参数
  // 注意,一些层实现可能有多种计算引擎(比如:caffe实现,以及cudnn实现),这些层包括一个引擎类型和一个引擎参数实现,默认引擎是在编译阶段的makefile里面设置的
  optional AccuracyParameter accuracy_param = 102;
  optional ArgMaxParameter argmax_param = 103;
  optional BatchNormParameter batch_norm_param = 139;
  optional BiasParameter bias_param = 141;
  optional ConcatParameter concat_param = 104;
  optional ContrastiveLossParameter contrastive_loss_param = 105;
  optional ConvolutionParameter convolution_param = 106;
  optional CropParameter crop_param = 144;
  optional DataParameter data_param = 107;
  optional DropoutParameter dropout_param = 108;
  optional DummyDataParameter dummy_data_param = 109;
  optional EltwiseParameter eltwise_param = 110;
  optional ELUParameter elu_param = 140;
  optional EmbedParameter embed_param = 137;
  optional ExpParameter exp_param = 111;
  optional FlattenParameter flatten_param = 135;
  optional HDF5DataParameter hdf5_data_param = 112;
  optional HDF5OutputParameter hdf5_output_param = 113;
  optional HingeLossParameter hinge_loss_param = 114;
  optional ImageDataParameter image_data_param = 115;
  optional InfogainLossParameter infogain_loss_param = 116;
  optional InnerProductParameter inner_product_param = 117;
  optional InputParameter input_param = 143;
  optional LogParameter log_param = 134;
  optional LRNParameter lrn_param = 118;
  optional MemoryDataParameter memory_data_param = 119;
  optional MVNParameter mvn_param = 120;
  optional ParameterParameter parameter_param = 145;
  optional PoolingParameter pooling_param = 121;
  optional PowerParameter power_param = 122;
  optional PReLUParameter prelu_param = 131;
  optional PythonParameter python_param = 130;
  optional RecurrentParameter recurrent_param = 146;
  optional ReductionParameter reduction_param = 136;
  optional ReLUParameter relu_param = 123;
  optional ReshapeParameter reshape_param = 133;
  optional ScaleParameter scale_param = 142;
  optional SigmoidParameter sigmoid_param = 124;
  optional SoftmaxParameter softmax_param = 125;
  optional SPPParameter spp_param = 132;
  optional SliceParameter slice_param = 126;
  optional TanHParameter tanh_param = 127;
  optional ThresholdParameter threshold_param = 128;
  optional TileParameter tile_param = 138;
  optional WindowDataParameter window_data_param = 129;
}

Layer之间的继承关系

在看头文件声明之前,先看一下各个Layer之间的继承关系:

1794530-c13622d0873b75dc.png
Layer类的派生类
1794530-c3cfd54974e07b6d.png
Neuron Layers类继承关系
1794530-d17510fb6e1c9baa.png </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值