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)设置网络时其训练数据量、类别数等是否对自己的训练样本适合;


             

0 0
原创粉丝点击