Caffe代码与架构介绍
2016-05-20 17:13
351 查看
在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-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)设置网络时其训练数据量、类别数等是否对自己的训练样本适合;
相关文章推荐
- 高性能服务器架构思路【不仅是思路】
- MVVM 一种新型架构框架
- 解密SparkStreaming运行机制和架构进阶之Job
- 数据密集型系统架构设计
- dll下载之网站
- destoon网站根目录license.txt不允许修改或删除,请检查
- 工程目录架构
- 基于虚拟主机构建个人网站
- 如何提高网站收录量
- (转)IIS7 优化-网站请发并发数
- 使用.Net Core发布可从外部访问的网站
- 域名,网站名,URL,URI,端口
- 秒杀系统架构优化思路
- 在线网站技术分析工具
- 《Linux4.0设备驱动开发详解》笔记--第十二章:Linux设备驱动的软件架构思想
- 微服务架构的优势与不足
- 国家网信办开展网址导航网站专项治理行动
- 国家网信办开展网址导航网站专项治理行动
- 几个有用的开发论坛,网站
- 几个有用的开发论坛,网站