深度学习之Caffe框架

来源:互联网 发布:js正则表达式可以为空 编辑:程序博客网 时间:2024/05/17 02:02

  • 特点
    • 模块化
    • 表达和实现分离
    • 测试覆盖
    • 绑定Python和MATLAB
    • 预先训练的参考模型
  • 结构
    • 数据存储
    • 层级结构
    • 运行模式
    • 训练网络

 caffe提供多媒体科学家和从业者一个干净可修改的框架,框架提供最新的深度学习算法和一个参考模型的集合。
 框架是一个BSD许可C++库且绑定Python以及MATLAB来进行训练,部署在通用目的卷积神经网络和其他有效的深度模型上。
 Caffe适合工业和互联网规模的媒体需求,通过CUDA GPU计算,一天能在一个单独的K40 或者 Titan GPU上处理超过4000万图像,也就是说每张图片需要2.5ms。通过讲模型表示和实际实现分离,Caffe允许实验和平台之间的无缝切换,便于从原型机到云环境的开发和部署。
 对于多媒体数据分析来说,对于发现感官的输入的有效表达如图像,声波,触觉等等。
 旨于促进大规模视觉识别任务,Caffe提供一个完整的工具箱用来训练,测试,精调,部署模型和充分证明的例子。因此,它对于研究者和其他开发者来说,是一个跳到最好的机器学习方法的理想的起点。同时,它还是最快的用来实现这些算法的可利用的实现方法,也能快速用于工业部署。

特点

模块化

 Caffe从开始设计都是尽可能的模块化设计,允许轻松扩展到新的数据格式,网络层和损失函数。大量的层和损失函数已经在上面实现,还有充足的例子展示他们是怎么组合成一个对于不同人物的可训练的识别系统。

表达和实现分离

 Caffe模型的定义用Protocol Buffer language被写成一个配置文件。Caffe支持任意有向无环图形式的网络结构。实例上,Caffe准确的保留大量的网络需要的内存,并且从主机或者GPU的底层位置进行抽象化。在CPU和GPU的实现上转换只需要一个函数调用。

测试覆盖

 Caffe中每个单独的模块都有一个测试,并且在没有对应测试的时候新的代码不被工程接受。这允许快速的提升和重构代码库,并且给使用代码的研究者传达一个欢迎的和平感。

绑定Python和MATLAB

 为了快速成型与现有研究代码相衔接,Caffe提供Python和MATLAB接口,这些语言可能是用来构建网络和分类输入。Python也揭露了用来轻松成型新的训练过程的solver模块。

预先训练的参考模型

 Caffe为视觉任务提供参考模型,包括带有验证集的“AlexNet”模型和R-CNN检测模型。

结构

数据存储

 Caffe存储和交换数据利用一个四维阵列叫blobs。其提供一个统一的内存接口,拥有图像或其他数据的批量数据,以及参数的更新。blobs还隐藏了从CPU主机同步到需要的GPU设备的混合操作的计算以及精神上的开销。
 在CPU编码中,从磁盘到blobs加载数据叫一个CUDA核进行GPU计算,并将blobs转到下一层。在维持高级性能表现时,忽略低级细节。
 模型存到磁盘中用到Google Protocol Buffers,这个当序列化,有效序列化时,能最小化二值字符串,是一个可读性兼容二进制版本的文本格式;大规模数据被存储在LevelDB数据库中。

层级结构

Caffe层级结构是一个神经网络层的本质:它将一个或者多个blobs作为输入,并产出一个或多个blobs作为输出。层级结构有两个责任义务:
(1) 前向传播引入输入和产生输出。
(2) 反向传播 计算输出、参数的梯度,传递到输入。
 层级结构包括:卷积层,池化层,内积层,非线性激活层,局部相应归一化层LRN,元素操作以及损失函数包括softmax,hinge。

运行模式

 Caffe模型是端到端的机器学习系统。一个典型的网络开始于来自磁盘的数据层,结束于为了一个任务计算目标的损失层。
 Caffe也能利用预训练的网络来提取图像语义特征。

训练网络

 Caffe通过快速且标准的随机梯度下降SGD算法来训练模型。数据层取得来自磁盘的图像以及标签,传递到各个层(卷积层,池化层,激活函数,损失函数层),数据在最小块mini-batches中进行处理,并且在网络中有序的传递。训练中最重要的还是学习率的衰减,动量以及用来停止和恢复的快照snapshot。

0 0
原创粉丝点击