在caffe中,layer数据结构是在caffe根目录下的src/caffe/proto/caffe.proto文件中描述的,这个文件是对caffe的数据结构进行描述的文件。在文件中,message LayerParameter是对layer进行描述的。在caffe网络中,包含若干个层,每个层对应一个layer描述结构。下面我们对message LayerParameter中的内容进行解读。
message LayerParameter {
optional string name = 1;
//layer的名字,比如在手写字体实例中,用来训练的网络,第一层的名字为mnist,第二层的名字为conv1,更详细的内容可以参考手写体字体的文章《深度学习caffe--手写字体识别例程(六)》
optional string type = 2;
// layer的类型,比如在手写字体实例中,用来训练的网络,第一层的类型为Data,第二层的类型为Convolution。
repeated string bottom = 3;
//输入Blob的名称,比如在手写字体实例中,用来训练的网络,第一层没有输入Blob,第二层的输入Blob为data。
repeated string top = 4;
//输出Blob的名称,比如在手写字体实例中,用来训练的网络,第一层输出Blob为data和label,第二层的输出Blob为conv1。
optional Phase phase = 10;
//当前阶段,为TRAIN或者TEST
repeated float loss_weight = 5;
//每个输出Blob的损失权重,每个层会有默认值,为0或者1,表示不参与目标函数计算或参与算是函数计算。
repeated ParamSpec param = 6;
//描述训练参数(例如相对全局学习常数的缩放因子,以及用于权值共享的名称或其他设置)
repeated BlobProto blobs = 7;
//该layer包含的所有Blob。
repeated bool propagate_down = 11;
//定义是否对每一个输入Blob进行反向传播计算。
repeated NetStateRule include = 8;
repeated NetStateRule exclude = 9;
//控制某个层在某个时刻是否包含在网络中。基于 NetState,可以为include或exclude指定非零值。如果不指定,那么该层一直包含在网络中。
optional TransformationParameter transform_param = 100;
数据预处理参数
optional LossParameter loss_param = 101;
//所有损失层共享的参数
//下面的参数为特定类型层的参数,需要注意的是,一些层在实现时可能有多余一种的计算引擎,这些层包括一个引擎类型和引擎参数来选择实现。默认引擎是在编译阶段由引擎开关设置的。
optional AccuracyParameter accuracy_param = 102;
optional ArgMaxParameter argmax_param = 103;
optional BatchNormParameter batch_norm_param = 139;
optional BiasParameter bias_param = 141;
optional ClipParameter clip_param = 148;
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 SwishParameter swish_param = 147;
optional TanHParameter tanh_param = 127;
optional ThresholdParameter threshold_param = 128;
optional TileParameter tile_param = 138;
optional WindowDataParameter window_data_param = 129;
}