Caffe_Layer

1.基本数据结构

    //Layer层主要的的参数
LayerParamter layer_param_; // protobuf内的layer参数
vector<shared_ptr<Blob<Dtype>*>>blobs_;//存储layer的参数,
vector<bool>param_propagate_down_;//表示是否计算各个blobs反向误差。

2.主要函数接口

    virtual void SetUp(const vector<Blob<Dtype>*>&bottom,
vector<Blob<Dtype>*>& top);
Dtype Forward(const vector<Blob<Dtype>*>&bottom,
vector<Blob<Dtype>*>&top);
void Backward(const vector<Blob<Dtype>*>&top,
const vector<bool>param_propagate_down,vector<Blob<Dtype>*>& bottom);

3.具体的Layer分析

具体的常用Layer分析

(1) DataLayer

数据通过数据层进入Layer,可以来自于数据库(LevelDB或者LMDB),也可以来自内存,HDF5等

    //Database:类型 Database
//必须参数 source,batch_size
//可选参数:rand_skip,mirror,backend[default LEVELDB] // In-Memory:类型 MemoryData
// 必选参数:batch_size,channels,height,width //HDF5 Input:类型 HDF5Data
//必选参数: source,batch_size //Images : 类型 ImageData
//必要参数:source(文件名label),batch_size
//可选参数:rand_skip,shuffle,new_width,new_height;

(2) 激励层(neuron_layers)

一般来说,激励层是element-wise,输入输出大小相同,一般非线性函数
输入:n*c*h*w
输出:n*c*h*w
    //ReLU/PReLU
//可选参数 negative_slope 指定输入值小于零时的输出。
// f(x) = x*(x>0)+negative_slope*(x<=0)
//ReLU目前使用最为广泛,收敛快,解决梯度弥散问题
layer{
name:"relu"
type:"ReLU"
bottom:"conv1"
top:"conv1"
} //Sigmoid
//f(x) = 1./(1+exp(-x)); 负无穷--正无穷映射到-1---1
layer{
name:"sigmoid-test"
bottom:"conv1"
top:"conv1"
type:"Sigmoid"
}

(3) 视觉层(vision-layer)

常用layer操作
     //卷积层(Convolution):类型Convolution
//包含学习率,输出卷积核,卷积核size,初始方式,权值衰减
//假使输入n*ci*hi*wi,则输出
// new_h = ((hi-kernel_h)+2*pad_h)/stride+1;
// new_w = ((wi-kernel_w)+2*pad_w)/stride+1;
//输出n*num_output*new_h*new_w;
layer{
name: "conv1"
type: "CONVOLUTION"
bottom: "data"
top: "conv1"
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 96
kernel_size: 11
stride: 4
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
} //池化层(Pooling) 类型 Pooling
// (hi-kernel_h)/2+1;
layer{
name:"pool1"
type:"POOLING"
bottom:"conv1"
top:"conv1"
pooling_param{
pool:MAX //AVE,STOCHASTIC
kernel_size:3
stride:2
}
} //BatchNormalization
// x' = (x-u)/δ ;y = α*x'+β;

(4) 损失层

最小化输出于目标的LOSS来驱动学习更新
    //Softmax

4.说明

SetUp函数需要根据实际的参数设置进行实现,对各种类型的参数初始化;Forward和Backward对应前向计算和反向更新,输入统一都是bottom,输出为top,其中Backward里面有个propagate_down参数,用来表示该Layer是否反向传播参数。

在Forward和Backward的具体实现里,会根据Caffe::mode()进行对应的操作,即使用cpu或者gpu进行计算,两个都实现了对应的接口Forward_cpu、Forward_gpu和Backward_cpu、Backward_gpu,这些接口都是virtual,具体还是要根据layer的类型进行对应的计算(注意:有些layer并没有GPU计算的实现,所以封装时加入了CPU的计算作为后备)。另外,还实现了ToProto的接口,将Layer的参数写入到protocol buffer文件中。

Caffe学习--Layer分析的更多相关文章

  1. Caffe学习--Blob分析

    Caffe_blob 1.基本数据结构 Blob为模板类,可以理解为四维数组,n * c * h * w的结构,Layer内为blob输入data和diff,Layer间的blob为学习的参数.内部封 ...

  2. Caffe学习--Net分析

    Caffe_Net 1.基本数据 vector<shared_ptr<Layer<Dtype> > > layers_; // 记录每一层的layer参数 vect ...

  3. caffe 学习(3)——Layer Catalogue

    layer是建模和计算的基本单元. caffe的目录包含各种state-of-the-art model的layers. 为了创建一个caffe model,我们需要定义模型架构在一个protocol ...

  4. Caffe学习笔记(三):Caffe数据是如何输入和输出的?

    Caffe学习笔记(三):Caffe数据是如何输入和输出的? Caffe中的数据流以Blobs进行传输,在<Caffe学习笔记(一):Caffe架构及其模型解析>中已经对Blobs进行了简 ...

  5. Caffe学习笔记(一):Caffe架构及其模型解析

    Caffe学习笔记(一):Caffe架构及其模型解析 写在前面:关于caffe平台如何快速搭建以及如何在caffe上进行训练与预测,请参见前面的文章<caffe平台快速搭建:caffe+wind ...

  6. Caffe学习系列(3):视觉层(Vision Layers)及参数

    所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe学习系列(2):数据层及参数 本文只讲解视觉层(Vision La ...

  7. Caffe学习系列(23):如何将别人训练好的model用到自己的数据上

    caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...

  8. Caffe学习系列(12):训练和测试自己的图片

    学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...

  9. 转 Caffe学习系列(12):训练和测试自己的图片

    学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...

随机推荐

  1. 有关PHP数组

    在PHP中,数组就是关键字和值的集合,我们可以使用array关键字创建: $arr=array[100,200,300,400,500]:           //这是一个自定义数组,数组里面的值是自 ...

  2. 五年磨一剑:Java 开源博客 Solo 1.0.0 发布了!

    从 Solo 第一个版本发布至今,已经过去 5 年了.今天我们非常自豪地宣布,Solo 1.0.0 正式发布,感谢一直以来关注 B3log 开源的朋友! 目前 B3log 开源有三款产品: GitHu ...

  3. Hibernate配置文件 hibernate.cfg.xml

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...

  4. WinDebug使用

    File->Symbol File Path-> SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols     ...

  5. SpringMVC视频

    视频内容: 1.下载spring mvc以及spring mvc示例演示http://pan.baidu.com/s/1kTHRfDH 2.配置完善&初步探究控制器拦截http://pan.b ...

  6. memcache session共享问题(ubuntu)

    memcache session共享问题 环境:三台ubuntu 12.04.5虚拟机,均安装php-fpm,并重用了之前搭建的简单的负载均衡 u1(192.168.240.130)    u2(19 ...

  7. CDR X7正版优惠,3折来袭,好礼相送,行不行动?

    意料之中的是,CorelDRAW系列软件在618期间成绩再次突破历史,成为新高.因为X7版本活动在6月15号的才上, 加之在此之前从没有过X7的活动优惠,势头之猛,可想而知,如此一来,官方预定的限量2 ...

  8. 洛谷 P1582 倒水 (二进制)

    这道题实际上是考二进制 很容易看出杯子水量一定是2的i次方 所以n杯水最后剩下的水一定是n用二进制表示中1的个数 所以就枚举n来求什么时候1的个数小于k 那么这里有个优化,不然会超时 因为每次加的目的 ...

  9. mysql存储小数

    线下不知道什么版本的古董了,经本人亲测,varchar类型的数据,可以直接执行mysql的sum函数. ________________________________________________ ...

  10. C# .net IDE Rider入门

    话说史上最强IDE Visual Studio 所向披靡数十载尚无敌手,现在Intellij带着统一IDE界的目标来挑战VS的霸主地位.了解Rider后发现,哎哟亮点多多,还不错哦! Rider是一款 ...