[深度学习主流框架解析一] Caffe
[深度学习主流框架解析一] 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相关推荐
- [深度学习主流框架解析一] Onnx
[深度学习主流框架解析一] Onnx 1.模型文件协议解析 Onnx同样也是采用了Protobuf协议进行模型文件的整体构建,与Caffe相比,Onnx使用了多proto文件描述模型.因此,解析Onn ...
- 深度学习主流框架介绍(PyTorch、TensorFlow、Keras、Caffe、Theano、MXNET)
深度学习主流框架介绍(PyTorch.TensorFlow.Keras.Caffe.Theano.MXNET) 1.Theano Theano是最早的深度学习框架之一,由 Yoshua Bengio ...
- 怎样快速掌握深度学习TensorFlow框架?
TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理. Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...
- 【github干货】主流深度学习开源框架从入门到熟练
文章首发于微信公众号<有三AI> [github干货]主流深度学习开源框架从入门到熟练 今天送上有三AI学院第一个github项目 01项目背景 目前深度学习框架呈百家争鸣之态势,光是为人 ...
- 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目
这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...
- 12大深度学习开源框架(caffe,tensorflow,pytorch,mxnet等)汇总详解
这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...
- 系统学习深度学习(七)--主流深度学习开源框架对比
转自:http://blog.csdn.net/u010167269/article/details/51810613,本文做了相关修改. 参考论文:<Comparative Study of ...
- 深度学习推理框架调研总结
深度学习推理框架 作者介绍 1.移动端深度学习推理框架调研 1.1 小米的MACE(2017) 1.2 阿里的MNN 1.3 腾讯的TNN 1.4 ARM的tengine 1.5 百度的paddle- ...
- 深度学习计算框架综述(二)计算框架的组成与设计要点
本章主要介绍一个通用计算框架主要包含哪几个模块,以及这些模块的设计要点,建议大家阅读本章前,了解一下Protocol Buffer 以及 FlatBuffer 的概念及基本用法. 首先,我们先分析一下 ...
最新文章
- Ubuntu下允许Root用户直接登录图形界面
- 软件研发中的N条原则
- 让一切“并行”——任务并行库原理及应用
- MPU6050工作原理及STM32控制MPU6050
- Bootstrap_导航
- 【原创·总结】影响sql查询性能的因素
- 明解c语言第7章答案,明解C语言 入门篇 第六章答案
- Backtrader量化回测8——手续费
- php收藏影视,十个值得收藏的影视资源网站
- 实战一:给定一段音频,请提取12维MFCC特征,阅读代码预加重、分帧、加窗部分,完善作业代码中fbank和mfcc部分,并给出最终的Fbank和MFCC特征,用默认的配置参数,无需进行修改
- [CDOJ 5] Diligent Boys Don’t Love [动态规划]
- 硬件设备的软件测试,智能设备的软硬件测试都要测什么?
- 计算机结构体系-CISC与RISC
- pycharm preparing workspace 项目打不开怎么办?
- 【Redis】Redis的五大数据类型
- elementPlus el-dialog 自适应
- java计算机毕业设计社区健康信息管理系统源程序+mysql+系统+lw文档+远程调试
- Matplotlib数据可视化之堆叠图、饼图(plt.stackplot\plt.pie)
- Linux-wm8960
- Windows7安装Framework .NET4.0失败