Caffe代码与架构介绍
来源:互联网 发布:开元知海e读 编辑:程序博客网 时间:2024/05/21 06:18
在Caffe源码中语言形式为CPP形式,其主要基于一些数学函数库进行矩阵运算和一些驱动来进行图像加速。其中,还包括一些依赖项如gflags、glog、boost、protobuf、hdf5、leveldb和lmdb等。
在caffe-master中主要包括一下文件夹:
build:所有编译好的文件存放的位置
data:存放数据的文件夹,如需要训练的数据
docs:框架说明书
include:包含文件夹和头文件
examples:各种demo及相关应用可以参考或直接使用对于的demo或配置
其中cifar10 场景识别;mnist 手写字符识别 ;imagenet 图片分类
cpp_classification 分类接口文件 feature_extraction 提特征的demo文件夹
matlab接口 python接口
models 一些训练好的模型存放的位置
tools 一些编译工具、转化工具
src 所有源代码存放位置
(1)在网络参数调节中,文件solver.prototxt中需要进行设置的一些网络参数:
base_lr:初始学习率
momentum:动量因子
weight_decay:权重递减速率
lr_policy:学习率变化方案,一般有fixed、inv和step等。
fixed:总是返回base_lr(固定学习率)
step:返回base_lr * gamma ^ ( floor(iter / step) )
inv:返回base_lr * (1+gamma * iter) ^ (- power)
其中,base_lr、max_iter、gamma、step、power这些值被定义在solver参数的protocol buffer中,且iter是当前迭代次数。
test_iter:测试的次数
display:迭代多少次显示一次
max_iter:最大迭代次数
snapshot:表示多少次后存储一次结果
snapshot_prefix:结果文件后缀名
solver_mode:使用CPU还是GPU
(2)对已有网络进行fine-tune
通过利用预先调节好的网络进行适当的微调来运用到自己的应用,其中要保证:
1)微调的网络最好对于相同维度和大小的输入,不然训练时对应层参数个数不同导致配置出错;
2)训练时加入--weight表示从哪个模型导入对于层的参数
3)caffe通过对于层名字来填充模型中的参数,那么对于你需要导入参数的层,其名字和网络保持不变,而对于需要调节的层,名字需改变;
4)若修改了网络结构,则对应层名字需改掉。不然,对层进行权重填充时,会按照原来的层来给定参数,而由于配置更改以致训练出错,如1000分类变成16分类;
5)若要对某层进行调节则其学习率lr_mult需要变大,其他层尽可能小点,集锁定其他层的参数不变而增强需要学习的层的训练学习率。对于不要学习来进行调节的层,即使其学习率为0;
(3)数据预处理
利用自带的convert_imageset函数和compute_image_mean函数来进行数据格式文件的转换,即将图片格式转换为lmdb或leveldb格式;
(4)在caffe网络搭建后,对其进行调节时常会出现不收敛的情况,一般解决思路:
1)生成lmdb等格式时标签文件是否与图片文件意义对应,即lmdb格式的数据是否有问题;
2)loss变化情况,若一直出现是1,则很有可能是最初始标签设置问题,一般若标签最初为0比较容易收敛;若出现了loss变化不正常情况,一般需调整学习率和学习政策;
3)考虑网络输出是否能够进行正确的分类;
4)设置网络时其训练数据量、类别数等是否对自己的训练样本适合;
- Caffe代码与架构介绍
- caffe代码阅读1:Layer的介绍与实现细节
- caffe代码阅读4:LayerRegistry的介绍与实现
- caffe代码阅读6:SyncedMemory的j介绍与实现
- [Caffe] Caffe介绍
- Caffe 介绍
- Dubbo设计与架构介绍
- 初识caffe代码<一>——整体层次介绍
- Hive代码组织及架构简单介绍
- 三、caffe 源码架构
- caffe架构分析
- 开源项目与J2EE架构介绍
- Android Camera的接口与架构介绍
- JavaFX架构与框架全面介绍
- Android Camera的接口与架构介绍
- HDFS 原理、架构与特性介绍
- HDFS 原理、架构与特性介绍
- HDFS 原理、架构与特性介绍
- linux搭建svn
- EventBus 3
- 给dnf添加代理
- Colorful 动态换肤开源库
- 综述 - 【Dr.Elephant源码分析系列文章-1】
- Caffe代码与架构介绍
- vector
- 无法定位序数385 于动态链接库 licurl.dll
- leetcode.349. Intersection of Two Arrays
- Hello world
- java导入导出excel相关
- 安卓 刮刮乐
- Lucene全文搜索原理与使用
- 添加约束的方法: