您的位置:首页 > Web前端

深度学习框架之Caffe学习总结

2018-08-02 01:25 197 查看

一 简介   

caffe是2013年由加州大学伯克利分校的贾杨清博士在Github上发布的一款深度学习开源框架。它 的核心语言是C++,支持python和matlab接口。既可以在CPU上运行,又可以在GPU上运行。主要应用于计算机视觉领域,如图像识别,目标识别,人脸识别,图像风格转换等方面。

我们可以按照框架定义各种各样的卷积神经网络的结构,并且可以再此框架下增加自己的代码,设计新的算法,该框架的一个问题就是,只能够使用卷积网络,所有框架都是在基于卷积神经网路的模型上进行的。

二 组成结构

caffe有三个原子结构,caffe的编程框架就是在这三个原子下实现, Blobs, Layers, and Nets。 原子结构就是说不能随意更改。

Caffe都是一些模块组成,模块包括4个部分:

Blob(caffe的数据表示,在layer上流动),

layer(不仅可以表示神经网络层,也可以表示输入输出层),

Net(神经网络结构,将layer层叠关联起来),

Blob 四维连续数组,通常表示为(n, k, w, h)是基础的数据结构,可表示输入输出数据,也可表示参数数据

slover(协调神经网络的训练和测试,定义一些参数)

Solver 的作用是:a. 创建用于学习的训练网络和用于评估的测试网络; b. 周期性的评估测试网络; c. 通过调用前馈和后馈函数进行的迭代优化和参数更新。solver每轮迭代都会通过前馈函数计算输出和损失(loss),还用后馈传播来计算梯度。通过更新学习率等方法更新solver。

训练好的caffe model 是用于保存和恢复网络参数,后缀为 .caffemodel; solver保存和恢复运行状态,后缀为 .solverstate

数据和模型。数据是带标签的图片集,主要分为训练集,验证集和测试集;

模型是描述表示对原始数据的处理,获得的model;

caffe也不是直接处理原始数据的,而是由预处理程序将原始数据变换存储为LMDB或者LevelDB格式,这两种方式可保持较高的IO效率,加快训练时的数据加载速度,另一方面是因为数据类型很多(二进制文件,文本文件,JPG等图像文件等)不可能用同一套代码实现所有类型的输入数据读取,所以转换为统一的格式可以简化数据读取层的实现。

下载的原始数据集需要转换为LEVELDB或LMDB

LMDB(Lightning Memory-Mapped Database Manager)-闪电般的内存映射型数据库管理器, 在Caffe中的主要作用是进行数据管理,将各种类型的原始数据(比如JPEG图片,二进制数据)都 统一转换为Key-Value存储,以便于Caffe的DataLayer获取这些数据。而LEVELDB是Google开发 的一种数据存储方式,在Caffe早期的版本中用得比较多。现在LMDB会用得比较多。

三 使用过程总结

  • 制作标签
  • 转换成 lmdb 批处理
  • 图片做镜像可以扩充数据集
  • 修改caffe_net
  • 卷积层 高斯算法  ,Relu函数
  • 池化层
  • 第2,3.4,5个卷积层

全连接层神经元减少(数据集少,如果过多会出现过拟合)

Dropout抵抗过拟合 ,训练过程中,让一半的神经元处于激活状态

原先的1000分类修改成需要的

  • (改变优化策略)训练过程中出现,增加迭代,或者继续训练时,loss不变了,优先选择修改优化器

四 体会

不足:Caffe对递归网络和语言建模的支持很差

优点: 在计算机视觉运用较多。

拥有不少训练好的模型。

比较模块化,而且模型和优化方法都是文本的方式,不是代码。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: