[深度学习主流框架解析一] Caffe

1、模型文件协议解析

重点解析caffe.proto模型文件中的内容,整体的模型文件可见下图。

模型结构相关特性:

  • 含有训练和测试推理的开关和相关的必要参数
  • 不包含中间blob的shape,所以shape推导都是在运行时进行的
  • 网络层的可训练参数是用BlobProto代表的

2、Caffe内部推理

特点总结:

  • 对于Caffe而言,caffe::Net是对外的总体接口,也是最重要的接口,不管是训练还是推理
  • cpu还是gpu的切换时非常简单的
  • Caffe最让我惊讶的是反向传播的实现和传递,待继续研究和总结
  • 外部接口采用了模板函数的写法,但是目前只支持float类型

3、Caffe反向传播实现细节

运用到的数学原理是《求导的链式法则》,相关表达式如下所示:

δyδz=δyδx∗δxδz\frac{\delta y}{\delta z} = \frac{\delta y}{\delta x} * \frac{\delta x}{\delta z}δzδy​=δxδy​∗δzδx​

下面以caffe中的sigmoid算子进行说明caffe内部的反向传播过程是如何的。

3.1、sigmoid算子介绍

sigmoid是激活函数,具体的数学公式如下所示:

f(x)=1(1+e−x)f(x) = \frac{1}{(1 + e^{-x})}f(x)=(1+e−x)1​

3.2、sigmoid的偏导

δf(x)δx=f(x)∗(1−f(x))\frac{\delta f(x)}{\delta x} = f(x) * (1 - f(x))δxδf(x)​=f(x)∗(1−f(x))

3.3、具体的caffe反向传播代码解析

template <typename Dtype>
void SigmoidLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,const vector<bool>& propagate_down,const vector<Blob<Dtype>*>& bottom) {/*top表示网络层的输出blobbottom表示网络的输入blobpropagate_down表示是否反向传播到输入的标识符,一般为true*/if (propagate_down[0]) {const Dtype* top_data = top[0]->cpu_data();//上次前向传播的该层的输出值const Dtype* top_diff = top[0]->cpu_diff();//该层之后的网络层到该层的输出的反向传播偏导值Dtype* bottom_diff = bottom[0]->mutable_cpu_diff();//该层需要计算的反向传播值const int count = bottom[0]->count();for (int i = 0; i < count; ++i) {const Dtype sigmoid_x = top_data[i];//相当于f(x)//相当于偏导的链式传播法则的计算(d_loss/d_x = d_loss/d_top * (f(x) * (1 - f(x))))bottom_diff[i] = top_diff[i] * sigmoid_x * (1. - sigmoid_x);}}
}

[深度学习主流框架解析一] Caffe相关推荐

  1. [深度学习主流框架解析一] Onnx

    [深度学习主流框架解析一] Onnx 1.模型文件协议解析 Onnx同样也是采用了Protobuf协议进行模型文件的整体构建,与Caffe相比,Onnx使用了多proto文件描述模型.因此,解析Onn ...

  2. 深度学习主流框架介绍(PyTorch、TensorFlow、Keras、Caffe、Theano、MXNET)

    深度学习主流框架介绍(PyTorch.TensorFlow.Keras.Caffe.Theano.MXNET) 1.Theano Theano是最早的深度学习框架之一,由 Yoshua Bengio ...

  3. 怎样快速掌握深度学习TensorFlow框架?

    TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理. Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...

  4. 【github干货】主流深度学习开源框架从入门到熟练

    文章首发于微信公众号<有三AI> [github干货]主流深度学习开源框架从入门到熟练 今天送上有三AI学院第一个github项目 01项目背景 目前深度学习框架呈百家争鸣之态势,光是为人 ...

  5. 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

  6. 12大深度学习开源框架(caffe,tensorflow,pytorch,mxnet等)汇总详解

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

  7. 系统学习深度学习(七)--主流深度学习开源框架对比

    转自:http://blog.csdn.net/u010167269/article/details/51810613,本文做了相关修改. 参考论文:<Comparative Study of ...

  8. 深度学习推理框架调研总结

    深度学习推理框架 作者介绍 1.移动端深度学习推理框架调研 1.1 小米的MACE(2017) 1.2 阿里的MNN 1.3 腾讯的TNN 1.4 ARM的tengine 1.5 百度的paddle- ...

  9. 深度学习计算框架综述(二)计算框架的组成与设计要点

    本章主要介绍一个通用计算框架主要包含哪几个模块,以及这些模块的设计要点,建议大家阅读本章前,了解一下Protocol Buffer 以及 FlatBuffer 的概念及基本用法. 首先,我们先分析一下 ...

最新文章

  1. Ubuntu下允许Root用户直接登录图形界面
  2. 软件研发中的N条原则
  3. 让一切“并行”——任务并行库原理及应用
  4. MPU6050工作原理及STM32控制MPU6050
  5. Bootstrap_导航
  6. 【原创·总结】影响sql查询性能的因素
  7. 明解c语言第7章答案,明解C语言 入门篇 第六章答案
  8. Backtrader量化回测8——手续费
  9. php收藏影视,十个值得收藏的影视资源网站
  10. 实战一:给定一段音频,请提取12维MFCC特征,阅读代码预加重、分帧、加窗部分,完善作业代码中fbank和mfcc部分,并给出最终的Fbank和MFCC特征,用默认的配置参数,无需进行修改
  11. [CDOJ 5] Diligent Boys Don’t Love [动态规划]
  12. 硬件设备的软件测试,智能设备的软硬件测试都要测什么?
  13. 计算机结构体系-CISC与RISC
  14. pycharm preparing workspace 项目打不开怎么办?
  15. 【Redis】Redis的五大数据类型
  16. elementPlus el-dialog 自适应
  17. java计算机毕业设计社区健康信息管理系统源程序+mysql+系统+lw文档+远程调试
  18. Matplotlib数据可视化之堆叠图、饼图(plt.stackplot\plt.pie)
  19. Linux-wm8960
  20. Windows7安装Framework .NET4.0失败

热门文章

  1. Java面试汇总四 当下主流MQ消息队列的优缺点
  2. js中的对象、函数定义以及形参和实参
  3. RouterOS AC+AP简易配置指南
  4. 苹果应用打包IPA之后上线以及签名
  5. python爬取去哪儿网酒店信息
  6. 深入理解什么是TCP 粘包?粘包警察是什么梗?
  7. 安卓逆向小案例——某map搜索接口【rpc调用】
  8. Word中关于参考文献连续引用
  9. JSP基础语法-动作(Action)
  10. Java 轻量级框架Spring曝出0day漏洞