前面几篇文章主要分析了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 name
optional 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: 96
kernel_size: 11
stride: 4  }
}

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

Caffe数据结构框架

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

剖析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源码之Net(上)---NetParameter参数

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

  5. 剖析Caffe源码之Layer

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

  6. 剖析Caffe源码之ImageDataLayer

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

  7. 剖析Caffe源码之Blob

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

  8. 剖析Caffe源码之InputLayer

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

  9. Caffe源码中Solver文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/solver.hpp文件的 ...

最新文章

  1. Angular模态框
  2. 深入理解 JVM Class文件格式(五)
  3. 论文浅尝 | 改善多语言KGQA的 Zero-shot 跨语言转换
  4. java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包
  5. 西瓜书——极大似然估计和朴素贝叶斯
  6. 如何订阅MQTT服务器历史消息,MQTT协议之消息订阅
  7. 编码的奥秘:两种典型的微处理器
  8. 都在说云原生?到底什么是云原生?
  9. 支付宝当面付_小小的支付完成页上,微信和支付宝“打起来了”
  10. 用HTML和CSS3做个鱼,如何使用CSS和D3实现小鱼游动的交互动画(附代码)
  11. AI换脸在电竞圈火了!大司马PDD大秀肌肉辣舞
  12. 2022年的ISTQB,你考了没?
  13. 利用R语言如何判别和分类
  14. jetson nano如何拓展磁盘空间
  15. ThinkPad X1 Extreme隐士 Ubuntu 18.04装机双显卡配置解决方法
  16. 对于取英文变量名网站
  17. 接着这次机会,发一下我做试管的经历~
  18. macbook系统占用硬盘大_Sketch占满MacBook200G硬盘的解决方法
  19. matlab模拟出现较大误差是什么原因,【求助】matlab 对复杂计算会出现较大误差吗?...
  20. CSS prefers-color-scheme 与 matchMedia() 深浅色模式

热门文章

  1. UI标签库专题六:JEECG智能开发平台 Autocomplete(自动补全标签 )
  2. oracle 层次查询判断叶子和根节点
  3. SpringBoot2基础,进阶,数据库,中间件等系列文章目录分类
  4. SSIM与MS-SSIM图像评价函数
  5. vscode安装live server
  6. 在 CSS 中,width 和 height 指的是内容区域的宽度和高度
  7. MySQL5.6从库修改主机名同步停止的解决办法
  8. 数值保留几位小数后四舍五入、向上取值、向下取值、
  9. Ubuntu 14.04 / 13.10 / 13.04 / 12.04使用PPA安装NVIDIA GeForce显卡驱动
  10. 非使用FindControl方法找到深层嵌套的控件