caffe大厦的砖头Blob

来源:互联网 发布:淘宝店铺号在哪里看 编辑:程序博客网 时间:2024/04/20 04:31


     caffe的万丈高楼(net)是我们按照设计的图纸(prototxt),用Blob这些砖块筑成的一层层(layer)楼房,最后通过进行简装修(train),精装修(finetune)实现。

    深度神经网络是一种模块化的模型,它由一系列作用在数据块之上的内部连接层组合而成。 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 个空间维度11 x 11、输入为 3 通道的滤波器,那么其 blob 维度是 96 x 3 x 11 x 11。对于一个输入是 1024维(输入通道数),输出是 1000 维(输出通道数)的内积层/全连接层,参数 blob 维度是 1000x 1024。对于一些特定数据,自己设计输入工具或者数据层是很有必要的。但是无论怎样,一旦你的数据准备完毕,各种层模块将会帮你完成剩下的工作。

0 0