logo资料库

caffe 教程 中文版.pdf

第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
资料共57页,剩余部分请下载后查看
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   
分享到:
收藏