caffe中几个基本概念

来源:互联网 发布:倩女幽魂for mac 编辑:程序博客网 时间:2024/05/21 17:43

caffe中几个基本概念:
1 caffe中的blob结构是用来进行数据存储,交换和处理网络中正向反向迭代时的数据和导数信息的数据结构
blob是caffe的标准数组结构,他提供了一个统一的内存接口,其将内部的cpu,gpu数据之间的传输与存储封装起来,免去用户外部对gpu的操作
blob详细描述了信息是如何在layer和net中存储和交换的

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 维度是 1000
x 1024。对应于caffe中的参数是num(),channels(),height(),width()或
LegacyShape(0),LegacyShape(1),LegacyShape(2),LegacyShape(3)
或shape(0),shape(1),shape(2),shape(3)

2 layer是caffe模型的计算的基本单元,也是源代码中各个层的基类:
Layer 是 Caffe 模型的本质内容和执行计算的基本单元。Layer 可以进行很多运算,如:
convolve(卷积)、pool(池化)、inner product(内积),rectified-linear 和 sigmoid 等非线性
运算,元素级的数据变换,normalize(归一化)、load data(数据加载)、softmax 和 hinge
等 losses(损失计算)
每个layer都定义了3中重要的运算:setup(初始化),forward(向前传播),backward(反向传播)
setup:在模型初始化的时候重置layers相互之间的连接
forward:从bottom层中接受数据,进行计算后将输出送到top
backward:给定相对于top层输出的梯度,计算相对于输入的梯度,并传递到bottom层,一个有参数的layers需要计算相对于各个参数的梯度值并存储在内部

3 Net是一系列的layers和其连接的集合

4 sovler:求解方法,单独配置,以解耦模型的建立与优化过程

深度学习中一些层的作用:
batch normalization:
BN在用于神经网络某层时,会对每一个mini-batch数据的内部进行标准化(normalization)处理,使输出规范化到N(0,1)的正态分布,减少了Internal Covariate Shift(内部神经元分布的改变)。BN的论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用BN之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/14,训练时间大大缩短。而达到之前的准确率后,可以继续训练,并最终取得远超于Inception V1模型的性能——top-5错误率4.8%,已经优于人眼水平。因为BN某种意义上还起到了正则化的作用,所以可以减少或者取消Dropout,简化网络结构。

当然,只是单纯地使用BN获得的增益还不明显,还需要一些相应的调整:增大学习速率并加快学习衰减速度以适用BN规范化后的数据;去除Dropout并减轻L2正则(因BN已起到正则化的作用);去除LRN;更彻底地对训练样本进行shuffle;减少数据增强过程中对数据的光学畸变(因为BN训练更快,每个样本被训练的次数更少,因此更真实的样本对训练更有帮助)。

当卷积核选择为1*1时,1*1卷积的意义主要在于线性变换

两个3´3的卷积层串联相当于1个5´5的卷积层,即一个像素会跟周围5´5的像素产生关联,可以说感受野大小为5´5。而3个3´3的卷积层串联的效果则相当于1个7´7的卷积层。除此之外,3个串联的3´3的卷积层,拥有比1个7´7的卷积层更少的参数量,只有后者的。最重要的是,3个3´3的卷积层拥有比1个7´7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强

google net特点:1 去掉了最后的全连接层,用全局平均池化层(即将图片尺寸变为1*1)

1 0
原创粉丝点击