caffe 使用笔记
来源:互联网 发布:淘宝携程 编辑:程序博客网 时间:2024/06/06 02:36
caffe中的输入数据格式为:高效数据库(LevelDB、LMDB)、内存、磁盘文件(HDF5、图像)。对输入数据的处理包括mean subtraction, scaling, random cropping, and mirroring,可以在TransformationParameters中设置。
1 输入数据处理
转为LMDB
需要OpenCV,所以Makefile.config文件中的USE_OPENCV=1
2模型参数配置
目标函数,即损失函数,首先包含损失函数的选取涉及的参数;损失函数一般由两项组成,一项是loss term,另外一项是regularization term。前一项涉及的参数有;后一项涉及的参数有权重衰减(weight_decay)
优化方法:caffe中为梯度下降,首先是梯度下降算法的选取涉及的参数,然后是每种参数更新方法涉及的参数,主要是梯度相关(动量momentum)、学习率(lr、lr_policy)。
以LeNet为例,在solver.prototxt中
test_iter: 100 #测试批次,如果测试数据层的batch_size=10,那么可以覆盖10*100=1000个测试样本。test_interval:1000#训练每迭代1000次测试一遍网络,一次迭代是指一次前向传播和一次后项传播。max_iter:4000#最大的迭代次数display: 100#每迭代100次在终端输出一次loss值,比如Iteration 4800, loss = 0.0120839snapshot: 1000#每迭代训练1000次输出一次中间结果,比如lenet_iter_1000.caffemodel lenet_iter_2000.solverstate
注:通常一个epoch指覆盖所有训练样本,如果总共64000个训练样本,batch_size=64(即每批输入64个样本),那么一个epoch包含64000/64=1000次迭代(Iteration)
3分析输出及日志
输出数据含义
1.test score #0 、test score #1分别表示准确度(accuracy)和损失函数(loss)
2.训练mnist_autoencoder.prototxt模型时,输出
Train net output #0: cross_entropy_loss = 61.1311 (* 1 = 61.1311 loss) Train net output #1: l2_error = 2.05479
其中,l2_error
表示 EuclideanLoss,在模型mnist_autoencoder.prototxt中定义,在这里可以直接删除而不影响模型训练,因为自动编码器不需要标签。
日志
1.caffe默认的日志在 /tmp, 默认名字为 "[program name].[hostname].[user name].log.[severity level].[date].[time].[pid]" (e.g.caffe.HOST.USER.log.INFO.20150207-193541.13458)
可以更改日志目录
--log_dir=$PathWhereYouWantLogAt
2.动态显示日志更新情况
tail -n 20 -f mylog.txt
4应用训练模型
该阶段需要deploy.prototxt文件和相应训练阶段产生的.prototxt文件
5caffe API
cmdcaffe
C++ API
需要将libcaffe.so文件包含在g++可以找到的位置,然后使用g++ -lcaffe read.cpp命令编译,读取.caffemodel的c++源代码示例如下。
#include <stdio.h> #include <string.h> #include <fstream> #include <iostream> #include "caffe.pb.h" using namespace std; using namespace caffe; int main(int argc, char* argv[]) { caffe::NetParameter msg; fstream input("../lenet_iter_10000.caffemodel", ios::in | ios::binary); if (!msg.ParseFromIstream(&input)) { cerr << "Failed to parse caffemodel." << endl; return -1; } printf("Repeated Size = %d\n", msg.layer_size()); ::google::protobuf::RepeatedPtrField< LayerParameter >* layer = msg.mutable_layer(); ::google::protobuf::RepeatedPtrField< LayerParameter >::iterator it = layer->begin(); for (; it != layer->end(); ++it) { if(it->type()=="Data")cout<<"Data:batch_size-:"<<it->data_param().batch_size()<<"blobs_size:"<<it->blobs_size()<<endl; if(it->blobs_size()>0) cout << it->name()<<"\t"<<it->type()<<"\t"<<it->convolution_param().weight_filler().max()<<"\tblobs_size:"<<it->blobs_size()<<"\tblobs(0)"<<it->blobs(0).GetMetadata().descriptor<<endl; } return 0; }
编译后执行./a.out 输出
Repeated Size = 9Data:batch_size-:64blobs_size:0conv1 Convolution 1 blobs_size:2 blobs(0)0x1f3f8f8conv2 Convolution 1 blobs_size:2 blobs(0)0x1f3f8f8ip1 InnerProduct 1 blobs_size:2 blobs(0)0x1f3f8f8ip2 InnerProduct 1 blobs_size:2 blobs(0)0x1f3f8f8
6 Python API
pycaffe是caffe的python API,其安装步骤如下:
首先要回到caffe主目录下caffe-master,编译pycaffe(这一步的前提是caffe已经成功安装):
make pycaffemake distribute
设置环境变量:
PYTHONPATH=/home/user/caffe-master/distribute/python:$PYTHONPATHLD_LIBRARY_PATH=home/user/caffe-master/build/lib:$LD_LIBRARY_PATH
启动python并导入caffe
>>> import caffe
如果出现 from google.protobuf import descriptor_pb2 ImportError: cannot import name descriptor_pb2
之类的错误首先保证descriptor_pb2.py
文件存在,并且该文件所在的目录包含在PYTHONPATH目录中或sys.path中。
出现的问题
调参
loss=NAN#学习率过大迭代很多次,但loss 几乎不变
程序挂在数据读取上
显示
I0903 13:46:54.967397 22723 layer_factory.hpp:75] Creating layer dataI0903 13:46:54.967449 22723 net.cpp:99] Creating Layer dataI0903 13:46:54.967455 22723 net.cpp:409] data -> data(挂在这里不动了)
原因和解决方案见这里
参考
1.http://caffe.berkeleyvision.org/tutorial/layers.html#data-layers
- Caffe+Win使用笔记
- caffe 使用笔记
- [caffe] 使用笔记
- caffe学习笔记14(外篇)--使用CodeBlocks调试caffe代码
- [caffe笔记008]:使用matlab调试caffe中新加的层
- Caffe学习笔记二 mnist的使用
- caffe的python接口使用笔记
- caffe笔记
- Caffe笔记
- 【caffe源码研究】caffe笔记
- win7 caffe使用笔记——draw_net.py绘制caffe网络
- caffe学习笔记3:使用caffe对自己的图像数据进行训练和测试
- 深度学习Caffe实战笔记(10)Windows Caffe使用MATLAB接口提取和可视化特征
- DL学习笔记【2】caffe使用步骤详解
- caffe学习笔记2:使用pycaffe提取CNN特征
- win7 caffe使用笔记——计算图像均值
- Caffe学习笔记5--deploy文件的修改与使用
- win7 caffe使用笔记——绘制学习曲线
- Apple Pay强势来袭,开发者应做的事情
- 携程2016研发工程师笔试题
- Unity Camera Orthographic Size
- android 硬件加速后webview闪烁问题
- CodeForces 628A Tennis Tournament
- caffe 使用笔记
- expdp 数据泵导出排除多个表
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- mycncart后台如何新增页面
- Git的使用
- 判断安卓设备是否连接网络
- 指定mavne中jdk编译版本方法
- javaweb学习(1):win10配置javaee开发环境eclipse+tomcat+mysql,web小项目
- 如何在openwrt文件系统中增加文件