前面几篇文章主要分析了Caffe中的Blob和Layer源码,了解到了Caffe中的参数数据结构文件caffe.proto,掌握了各个Layer是如何注册到Caffe中,下面将分析Net层。

在分析Net层之前首先要了解Net层入参NetParameter

NetParameter

NetParameter参数数据结构同一定义在caffe.proto文件中,其结构总体如下:

message NetParameter {optional string name = 1;//网络名称repeated string input = 3; //网络的输入Blob名称,可以有多个入参repeated BlobShape input_shape = 8;//输入参数Blob的维度信息repeated int32 input_dim = 4;//维度信息,在旧的版本中使用,最新版本中已经使用input_shape代替optional bool force_backward = 5 [default = false]; //是否强制网络中每层执行后向传播计算,如果设置为False,那么是否执行向后传播计算由网络结构,学习速率决定optional NetState state = 6;//网络状态包括phase,level,和stage,在某些层中可以依靠设置层中的included/excluded中的state依靠一些规则来过滤某些层optional bool debug_info = 7 [default = false];//当运行Net::Backward, and Net::Update,是否打印结构的调试信息repeated LayerParameter layer = 100;  // 网络中各个层的参数.repeated V1LayerParameter layers = 2;//旧版本中各层的参数,已经废弃,使用layer代替
}

NetParameter定义结构相对较少,最主要的部分是在layer中,LayerParameter layer中包含了 各个已知所有层的参数,

LayerParameter

LayerParameter参数结构主要如下,定义了所有层的参数数据结构

message LayerParameter {optional string name = 1; // the layer nameoptional string type = 2; // the layer typerepeated string bottom = 3; // the name of each bottom blobrepeated string top = 4; // the name of each top blob// The train / test phase for computation.optional Phase phase = 10;// The amount of weight to assign each top blob in the objective.// Each layer assigns a default value, usually of either 0 or 1,// to each top blob.repeated float loss_weight = 5;// Specifies training parameters (multipliers on global learning constants,// and the name and other settings used for weight sharing).repeated ParamSpec param = 6;// The blobs containing the numeric parameters of the layer.repeated BlobProto blobs = 7;// Specifies whether to backpropagate to each bottom. If unspecified,// Caffe will automatically infer whether each input needs backpropagation// to compute parameter gradients. If set to true for some inputs,// backpropagation to those inputs is forced; if set false for some inputs,// backpropagation to those inputs is skipped.//// The size must be either 0 or equal to the number of bottoms.repeated bool propagate_down = 11;// Rules controlling whether and when a layer is included in the network,// based on the current NetState.  You may specify a non-zero number of rules// to include OR exclude, but not both.  If no include or exclude rules are// specified, the layer is always included.  If the current NetState meets// ANY (i.e., one or more) of the specified rules, the layer is// included/excluded.repeated NetStateRule include = 8;repeated NetStateRule exclude = 9;// Parameters for data pre-processing.optional TransformationParameter transform_param = 100;// Parameters shared by loss layers.optional LossParameter loss_param = 101;// Layer type-specific parameters.//// Note: certain layers may have more than one computational engine// for their implementation. These layers include an Engine type and// engine parameter for selecting the implementation.// The default for the engine is set by the ENGINE switch at compile-time.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;
}

prototxt文件

NetParameter层只是描述了数据结构,而整个神经网络的是在prototxt文件中定义的,不仅包含网络结构,还包含各个网络参数,例如定义如下:

name: "CaffeNet"
layer {name: "data"type: "Input"top: "data"input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
}
layer {name: "conv1"type: "Convolution"bottom: "data"top: "conv1"convolution_param {num_output: 96kernel_size: 11stride: 4}
}

当然layer部分一般是由多个网络组成的,可以包含多个layer。

Caffe数据结构框架

结合NetParameter和LayerParameter层,其相关数据结构框架如下:

在编写新的layer中会经常遇到上述结构,对整个深入理解caffe也是非常重要。

剖析Caffe源码之Net(上)---NetParameter参数相关推荐

  1. 剖析Caffe源码之Net---Net构造函数

    目录 Net构造函数 读取Prototxt ReadProtoFromTextFile UpgradeNetAsNeeded 设置网络状态 Init函数 FilterNet InsertSplits ...

  2. 剖析Caffe源码之Layer_factory

    在<剖析Caffe源码之Layer>,对Layer代码进行了基本分析,可以知道Layer是所有的其他Layer的基本类,由此来扩展出各个神经网络中所需要的Layer,体现了caffe的可扩 ...

  3. 剖析Caffe源码之Net类变量

    在<解析Net的构造函数源码>过程中,可以看到Net类有很多变量,用于存储网络中的各种信息,caffe中类的变量命名规则统一在变量名中加上'_',查看net.hpp代码可以看到使用了很多变 ...

  4. 剖析Caffe源码之Layer

    目录 Layer介绍 Layer分析 LayerParameter Class Layer Layer派生类 Layer源码 Layer构造函数 SetUp函数 Forward函数 Backward函 ...

  5. 剖析Caffe源码之ImageDataLayer

    目录 ImageDataLayer参数 Source root_folder new_height.new_width is_color crop_size Prototxt配置 Class Imag ...

  6. 剖析Caffe源码之Net---NetParameter参数

    前面几篇文章主要分析了Caffe中的Blob和Layer源码,了解到了Caffe中的参数数据结构文件caffe.proto,掌握了各个Layer是如何注册到Caffe中,下面将分析Net层. 在分析N ...

  7. 剖析Caffe源码之Blob

    目录 介绍 用例 Class Blob Blob主要源码分析 Blob构造函数 Blob各个维度大小设置 Blob维度信息获取 Blob计算偏移量 Blob数据存储与读取相关操作 Blob数据操作 B ...

  8. 剖析Caffe源码之InputLayer

    ImageDataLayer可以完成caffe自动读取图片进行模型训练和推断,但是在实际的应用中一般图像都是通过sensor采集而来,将采集得到的图片送到训练好的模型中进行识别.推断,此时就需要用到I ...

  9. 深入剖析Vue源码 - 响应式系统构建(上)

    从这一小节开始,正式进入Vue源码的核心,也是难点之一,响应式系统的构建.这一节将作为分析响应式构建过程源码的入门,主要分为两大块,第一块是针对响应式数据props,methods,data,comp ...

最新文章

  1. 文件到Java中的byte []
  2. Asp.net mvc4用JQuery插件实现异步上传
  3. 树莓派:交叉编译,以及带wiringPi库的如何交叉编译
  4. 深度学习Deep learning:四十一(Dropout简单理解)
  5. Spring+ehcache缓存实例
  6. eclipse远程连接hadoop_hadoop集群搭建详细方法
  7. Java多线程(线程同步)
  8. vue store的值刷新就被覆盖解决方案
  9. Xshell5 访问虚拟机Ubuntu16.04
  10. 【HUST】网安|计算机网络安全实验|实验一 TCP协议漏洞及利用
  11. 简指南越狱的iOS及原因,负责其
  12. java制作主页,JSP教程基础篇之简单首页制作
  13. 《关键对话》要点整理
  14. TypeError: torch.FloatTensor is not a Module subclass
  15. 数学界再出变态神人!竟用一个比基尼方程,暴力吊打美国数学家!看完我惊了......
  16. 社交消费时代到来,趣享付占领社交营销一线
  17. 达达开放平台php,达达开放平台对接的使用教程
  18. 就Java开发的Linux环境,进行完整版的安装,多适用于小白
  19. 基于SSM+SpringBoot+Vue的仓库物流信息管理系统(附文档)
  20. WinEdt中伪代码不显示For循环

热门文章

  1. Oracle的Endgame,或被Amazon收购或自生自灭?
  2. Linux信号实践(1) --Linux信号编程概述
  3. PostgreSQL SSL启用与CA证书生成、配置
  4. UPS不间断电源的种类有哪些 常见的3类UPS电源
  5. Unity3D 渲染统计窗口
  6. 路由器在多个OSPF进程下的路由学习问题
  7. DDD:四色原型、DDD、DCI之间的关系
  8. toString、equals方法进阶
  9. 三星android rom开发者,六年老机吃上奥利奥:第三方三星S2安卓8.0刷机包发布
  10. java 对象引用 弱引用吗_Java对象的强引用、软引用、弱引用和虚引用 笔记