Caffe 官方教程中译本
社区预览版 V1.0
CaffeCN 深度学习社区志愿者集体翻译
http://caffecn.cn | QQ group: 431141753 | @CaffeCN 深度学习社区
CaffeCN 深度学习社区 | http://caffecn.cn
目 录
前言........................................................................................................................................... 4
第一章 Blobs, Layers, and Nets:Caffe 模型解析 ........................................................ 5
1.1 Blob 的存储与交换 ................................................................................................. 5
1.1.1 实现细节 ......................................................................................................... 6
1.2 Layer 的计算和连接 ................................................................................................ 7
1.3 Net 的定义和操作 ...................................................................................................... 8
1.3.1 模型格式 ....................................................................................................... 11
第二章 Forward and Backward(前传/反传) .................................................................. 13
2.1 前传.......................................................................................................................... 13
2.2 反传.......................................................................................................................... 14
2.3 Caffe 中前传和反传的实现...................................................................................... 14
第三章 Loss .......................................................................................................................... 16
3.1 Loss weights .............................................................................................................. 16
第四章 Solver ......................................................................................................................... 18
4.1 Solver 简介 ............................................................................................................. 18
4.2 Methods .................................................................................................................... 18
4.2.1 SGD ................................................................................................................. 19
4.2.2 AdaDelta ......................................................................................................... 21
4.2.3 AdaGrad.......................................................................................................... 21
4.2.4 Adam .............................................................................................................. 21
4.2.5 NAG ................................................................................................................ 22
4.2.6 RMSprop ......................................................................................................... 23
第五章 Layer Cataloge ........................................................................................................... 24
5.1 视觉层 Vision Layers ............................................................................................... 24
5.1.1 卷积 Convolution ......................................................................................... 24
5.1.2 池化 Pooling ................................................................................................. 26
5.1.3 局部响应值归一化 Local Response Normalization (LRN) ............................ 27
5.1.4 im2col ............................................................................................................. 28
5.2 损失层 Loss Layers .................................................................................................. 28
5.2.1 Softmax 损失 ............................................................................................. 28
5.2.2 平方和/欧式损失 Sum-of-Squares / Euclidean ........................................... 28
5.2.3 Hinge / Margin 损失 .................................................................................. 29
5.2.3 交叉熵损失 Sigmoid Cross-Entropy ............................................................ 30
5.2.4 信息熵损失 Infogain .................................................................................... 30
5.2.5 准确率 Accuracy and Top-k ......................................................................... 30
5.3 激活层 Activation / Neuron Layers ....................................................................... 30
5.3.1 ReLU / Rectified-Linear and Leaky-ReLU ........................................................ 30
5.3.2. Sigmoid .......................................................................................................... 31
5.3.3 TanH / Hyperbolic Tangent ............................................................................. 32
5.3.4 Absolute Value ............................................................................................... 32
1
CaffeCN 深度学习社区 | http://caffecn.cn
5.3.5 Power ............................................................................................................. 33
5.3.5 BNLL................................................................................................................ 33
5.4 数据层 Data Layers ................................................................................................. 34
5.4.1 数据库 Database .......................................................................................... 34
5.4.2 内存数据 In-Memory .................................................................................. 35
5.4.3 HDF5 Input ..................................................................................................... 35
5.4.4 HDF5 Output .................................................................................................. 35
5.4.5 图像数据 Images ......................................................................................... 35
5.4.6 窗口 Windows.............................................................................................. 36
5.4.7 Dummy ........................................................................................................... 36
5.5 普通层 Common Layers .......................................................................................... 36
5.5.1 内积/全连接 Inner Product....................................................................... 36
5.5.2 分裂 Splitting ............................................................................................... 38
5.5.3 摊平 Flattening ............................................................................................ 38
5.5.4 变形 Reshape ............................................................................................... 38
5.5.5 连结 Concatenation ..................................................................................... 39
5.5.6 切片 Slicing .................................................................................................. 40
5.5.7 逐个元素操作 Elementwise Operations ..................................................... 41
5.5.8 Argmax ........................................................................................................... 41
5.5.9 Softmax .......................................................................................................... 41
5.5.10 Mean-Variance Normalization ..................................................................... 41
第六章 Interfaces ................................................................................................................... 43
6.1 Command Line .......................................................................................................... 43
6.1.2 训练 ................................................................................................................ 43
6.1.2 测试 ............................................................................................................... 44
6.1.3 Benchmarking ................................................................................................ 44
6.1.4 诊断 ............................................................................................................... 44
6.1.5 并行模式 ....................................................................................................... 45
6.2 Python ....................................................................................................................... 45
6.3 MATLAB ..................................................................................................................... 46
6.3.1 编译 MatCaffe .............................................................................................. 46
6.3.2 使用 MatCaffe .............................................................................................. 47
第七章 数据 ........................................................................................................................... 54
7.1 数据:输入与输出 ................................................................................................ 54
7.2 格式 ........................................................................................................................ 56
7.3 部署输入 .................................................................................................................. 56
2
CaffeCN 深度学习社区 | http://caffecn.cn
致谢:
CaffeCN 社区谨此向 Caffe 官方社区致敬!
向所有参加了此次文档翻译工作的志愿者 1 致以
诚挚的感谢!
CaffeCN 社区
2016.02.01
[1] 翻译和校对人员包括:
巴君、戴嘉伦、龚国平、李文杰、刘畅、刘昕、刘艳飞、马杰超、任
伟、师亚亭、孙琳钧、它它、王斌、王洪振、王蒙蒙、吴尚轩、辛淼、
杨轶斐、占鸿渐、张欣、赵行、郑昌艳。
3
CaffeCN 深度学习社区 | http://caffecn.cn
前言
Caffe 是一个深度学习框架。本教程讲述了 Caffe 的设计哲学、架构和使用方法。这是一
份关于 Caffe 的实践指引和介绍,但文中并不包含关于深度学习的前沿、进展和历史等方面
的内容。尽管我们会在必要的地方给出一些辅助解释,但如果读者具有关于机器学习和神经
网络方面的背景知识,将十分有助于理解本文的内容。
设计哲学
简言之,Caffe 的酝酿考虑了以下几个方面的内容:
表示:模型和优化以纯文本的模式定义,而不是以代码模式;
速度:对于学术领域和工业领域,运算速度对于最先进的模型和海量数据是至关重
要的;
模块化:新的任务和配置要求框架具有灵活性和扩展性;
开放性:科研和应用过程需要公共的代码、可参考的模型和可再现性;
社区:通过共同讨论和以 BSD-2 协议共同开发这个项目,学术研究、起步阶段的原
型和工业应用可以共享各自的力量。
这些准则指引了整个项目。
教程内容
Nets, Layers, and Blobs:Caffe 模型解析;
Forward and Backward:层状模型的基本计算;
Loss:由 loss 定义待学习的任务;
Solver:solver 协调模型的优化;
Layer Catalogue:“层”是模型和计算的基本单元,Caffe 提供的结构中包含了构建先
进模型所需的各种层;
Interface:Caffe 的命令行,Python,和 MATLAB 版接口;
Data:如何为模型添加 caffe 式的输入数据。
4
CaffeCN 深度学习社区 | http://caffecn.cn
第一章 Blobs, Layers, and Nets:Caffe 模型解析
深度神经网络是一种模块化的模型,它由一系列作用在数据块之上的内部连接层组合而
成。Caffe 基于自己的模型架构,通过逐层定义(layer-by-layer)的方式定义一个网络(Nets)。
网络从数据输入层到损失层自下而上地定义整个模型。Caffe 使用 blobs 结构来存储、交换和
处理网络中正向和反向迭代时的数据和导数信息:blob 是 Caffe 的标准数组结构,它提供了
一个统一的内存接口。Layer 是 Caffe 模型和计算的基本单元,Net 是一系列 layers 和其连接
的集合。Blob 详细描述了信息是如何在 layer 和 net 中存储和交换的。
Solving(求解方法)单独配置,以解耦模型的建立与优化的过程。
下面将详细介绍这些组成部分。
1.1 Blob 的存储与交换
Blob 是 Caffe 中处理和传递实际数据的数据封装包,并且在 CPU 与 GPU 之间具有同步
处理能力。从数学意义上说,blob 是按 C 风格连续存储的 N 维数组。
Caffe 基于 blobs 存储和交换数据。为了便于优化,blobs 提供统一的内存接口来存储某
种类型的数据,例如批量图像数据、模型参数以及用来进行优化的导数。
Blobs 可根据 CPU 主机到 GPU 设备的同步需要,屏蔽 CPU/GPU 混和运算在计算上的开
销。主机和设备上的内存按需求分配(lazily),以提高内存的使用效率。
对于批量图像数据来说,blob 常规的维数为图像数量 N *通道数 K *图像高度 H *图像宽
度 W。Blob 按行为主(row-major)进行存储,所以一个 4 维 blob 中,坐标为(n, k, h, w)的
值的物理位置为((n * K + k) * H + h) * W + w,这也使得最后面/最右边的维度更新最快。
Number/N 是每个批次处理的数据量。批量处理信息有利于提高设备处理和交换的
数据的吞吐率。在 ImageNet 上每个训练批量为 256 张图像,则 N=256。
Channel/K 是特征维度,例如对 RGB 图像来说,K=3.
虽然 Caffe 的图像应用例子中很多 blobs 都是 4 维坐标,但是对于非图像应用任务,blobs
也完全可以照常使用。例如,如果你仅仅需要类似于传统多层感知机那样的全连接网络,使
用 2 维的 blobs(形式为(N, D)),之后再调用 InnerProductLayer(全连接层,随后我们将讲解)
即可。
参数 Blob 的维度是根据层的类型和配置而变化的。一个卷积层中若有 96 个空间维度为
5
CaffeCN 深度学习社区 | http://caffecn.cn
11 x 11、输入为 3 通道的滤波器,那么其 blob 维度是 96 x 3 x 11 x 11。对于一个输入是 1024
维(输入通道数),输出是 1000 维(输出通道数)的内积层/全连接层,参数 blob 维度是 1000
x 1024。
对于一些特定数据,自己设计输入工具或者数据层是很有必要的。但是无论怎样,一旦
你的数据准备完毕,各种层模块将会帮你完成剩下的工作。
1.1.1 实现细节
对于 blob 中的数据,我们关心的是 values(值)和 gradients(梯度),所以一个 blob
单元存储了两块数据——data 和 diff。前者是我们在网络中传送的普通数据,后者是通过网
络计算得到的梯度。
而且,由于数据既可存储在 CPU 上,也可存储在 GPU 上,因而有两种数据访问方式:
静态方式,不改变数值;动态方式,改变数值。
const Dtype* cpu_data() const;
Dtype* mutable_cpu_data();
(gpu 和 diff 的操作与之类似)
之所以这么设计是因为 blob 使用了一个 SyncedMem 类来同步 CPU 和 GPU 上的数值,
以隐藏同步的细节和最小化传送数据。一个经验准则是,如果不想改变数值,就一直使用常
量调用,而且绝不要在自定义类中存储指针。每次操作 blob 时,调用相应的函数来获取它
的指针,因为 SyncedMem 需要用这种方式来确定何时需要复制数据。
实际上,使用 GPU 时,Caffe 中 CPU 代码先从磁盘中加载数据到 blob,同时请求分配一
个 GPU 设备核(device kernel)以使用 GPU 进行计算,再将计算好的 blob 数据送入下一层,
这样既实现了高效运算,又忽略了底层细节。只要所有 layers 均有 GPU 实现,这种情况下
所有的中间数据和梯度都会保留在 GPU 上。
这里有一个示例,用以确定 blob 何时会复制数据:
// 假定数据在 CPU 上进行初始化,我们有一个 blob
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // 数据从 CPU 复制到 GPU
6
CaffeCN 深度学习社区 | http://caffecn.cn
foo = blob.cpu_data(); // 没有数据复制,两者都有最新的内容
bar = blob.mutable_gpu_data(); // 没有数据复制
// ... 一些操作 ...
bar = blob.mutable_gpu_data(); // 仍在 GPU,没有数据复制
foo = blob.cpu_data(); // 由于 GPU 修改了数值,数据从 GPU 复制到 CPU
foo = blob.gpu_data(); //没有数据复制,两者都有最新的内容
bar = blob.mutable_cpu_data(); // 依旧没有数据复制
bar = blob.mutable_gpu_data(); //数据从 CPU 复制到 GPU
bar = blob.mutable_cpu_data(); //数据从 GPU 复制到 CPU
1.2 Layer 的计算和连接
Layer 是 Caffe 模型的本质内容和执行计算的基本单元。Layer 可以进行很多运算,如:
convolve(卷积)、pool(池化)、inner product(内积),rectified-linear 和 sigmoid 等非线性
运算,元素级的数据变换,normalize(归一化)、load data(数据加载)、softmax 和 hinge
等 losses(损失计算)。可在 Caffe 的 layer catalogue(层目录)中查看所有操作,其囊括了
绝大部分目前最前沿的深度学习任务所需要的层类型。
一个 layer 通过 bottom(底部)连接层接收数据,通过 top(顶部)连接层输出数据。
每一个 layer 都定义了 3 种重要的运算:setup(初始化设置),forward(前向传播),
backward(反向传播)。
Setup: 在模型初始化时重置 layers 及其相互之间的连接 ;
Forward: 从 bottom 层中接收数据,进行计算后将输出送入到 top 层中;
Backward: 给定相对于 top 层输出的梯度,计算其相对于输入的梯度,并传递到 bottom
7