- Python 深度学习
- 吕云翔 刘卓然 关捷雄等编著
- 918字
- 2025-02-28 02:11:29
2.1 Caffe
2.1.1 Caffe简介
Caffe(Convolutional Architecture for Fast Feature Embedding)是一种常用的、可读性高的、快速深度学习框架,主要应用在视频、图像处理等方面。
Caffe也是第一个主流的工业级深度学习工具,专精于图像处理。它有很多扩展,但是一些遗留的架构问题不够灵活,且对递归网络和语言建模的支持很差。对于基于层的网络结构,Caffe的扩展性不好,用户如果想要增加层,需要自己来实现。
2.1.2 Caffe的特点
Caffe的基本工作流程是建立在神经网络的一个简单假设,所有的计算都是用层的形式表示的,网络层所做的事情就是输入数据,然后输出计算结果。例如,卷积就是输入一幅图像,然后与这一层的参数(filter)做卷积,最终输出卷积结果。每层需要两种函数计算:一种是forward,从输入计算到输出;另一种是backward,从上层gradient来计算相对于输入层的gradient。这两个函数实现之后,就可以把许多层连接成一个网络,接着输入数据(图像、语音或其他原始数据),然后计算需要的输出(如识别的标签)。在训练时,可根据已有的标签计算loss和gradient,然后用gradient更新网络中的参数。
Caffe是一个清晰而高效的深度学习框架,它基于纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口,可以在CPU和GPU直接无缝切换。它的模型与优化都是通过配置文件来设置的,无须代码。Caffe设计之初就做到了尽可能的模块化,允许对数据格式、网络层和损失函数进行扩展。Caffe的模型定义是用Protocol Buffer(协议缓冲区)语言写进配置文件,以任意有向无环图的形式。Caffe会根据网络需要正确占用内存,通过一个函数调用实现CPU和GPU之间的切换。Caffe每一个单一的模块都对应一个测试,使得测试的覆盖非常方便,同时提供Python和MATLAB接口,用这两种语法进行调用都是可行的。
2.1.3 Caffe层及其网络
Caffe是一种对新手非常友好的深度学习框架模型,它的相应优化都以文本形式而非代码形式给出。它的网络都是有向无环图的集合,可以直接定义,如图2.1所示。
数据及其导数以blobs的形式在层间流动,Caffe层的定义由两部分组成:层属性与层参数,如图2.2所示。

图2.1 caffe网络定义

图2.2 Caffe层定义
图2.2的前4行代码是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数。Blob是用以存储数据的4维数组,例如,对于数据Number*Channel*Height*Width,对于卷积权重Output*Input*Height*Width,对于卷积偏置Output*1*1*1。
在Caffe模型中,网络参数的定义也非常方便,可以随意像图2.3所示那样设置相应参数。

图2.3 Caffe参数配置