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.0120839
snapshot: 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 = 9
Data:batch_size-:64blobs_size:0
conv1   Convolution     1       blobs_size:2    blobs(0)0x1f3f8f8
conv2   Convolution     1       blobs_size:2    blobs(0)0x1f3f8f8
ip1     InnerProduct    1       blobs_size:2    blobs(0)0x1f3f8f8
ip2     InnerProduct    1       blobs_size:2    blobs(0)0x1f3f8f8

6 Python API

pycaffe是caffe的python API,其安装步骤如下:
首先要回到caffe主目录下caffe-master,编译pycaffe(这一步的前提是caffe已经成功安装):

make pycaffe
make distribute

设置环境变量:

PYTHONPATH=/home/user/caffe-master/distribute/python:$PYTHONPATH
LD_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 使用笔记相关推荐

  1. caffe读书笔记1 CIFAR-10在caffe上进行训练与学习

    原文地址:caffe读书笔记1 CIFAR-10在caffe上进行训练与学习-薛开宇作者:残夕云翳 本次学习笔记作用,知道如何在caffe上训练与学习,如何看结果. 1.1使用数据库:CIFAR-10 ...

  2. CAFFE学习笔记(一)Caffe_Example之训练mnist

     CAFFE学习笔记(一)Caffe_Example之训练mnist 0.参考文献 [1]caffe官网<Training LeNet on MNIST with Caffe>;  [ ...

  3. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

  4. Caffe学习笔记3——制作并训练自己的数据集

    Caffe学习笔记3 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和h ...

  5. Caffe学习笔记2

    Caffe学习笔记2-用一个预训练模型提取特征 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hi ...

  6. Caffe 学习笔记1

    Caffe 学习笔记1 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和 ...

  7. caffe学习笔记(2)

    caffe学习笔记(2)-视觉层(vision layers) 本文参考博客caffe学习,是根据这篇博客做的学习笔记.详细情况可以参考原博客,真的很赞. 所有的层都具有的参数,如name, type ...

  8. caffe学习笔记(1)

    caffe学习笔记(1) 刚开始学习caffe,发现一个非常好的博客caffe学习.看了几遍收益匪浅,但是总是记不住,所以决定安装该博客的步骤一点一点实现,然后记录在该系列的博客中.原博客是在ubun ...

  9. Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)

    0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...

  10. caffe学习笔记2:net forward与backward

    caffe学习笔记2:Forward and Backward 原网页:http://caffe.berkeleyvision.org/tutorial/forward_backward.html f ...

最新文章

  1. springcloud都有什么组件?这个列表不得不看!
  2. 本人对于netty框架的一些理解,怎么与网站上的websock建立连接
  3. CF-547E(Mike and Friends)后缀数组+线段树 AC自动机+DFS序+树状数组
  4. [Offer收割]编程练习赛15 A.偶像的条件[贪心]
  5. tmux 如何自定义背景颜色 | How does the tmux color palette work?
  6. 空调万能手机遥控器android版,手机空调万能遥控器
  7. python编码转换规范_Python转载[编码规范]
  8. Silverlight开发廋身攻略(二)
  9. 如何使用python批量压缩图片_利用Python 批量压缩图片
  10. 一套适合入门的Oracle学习视频
  11. 通过身份证号查出所在籍贯以及性别。
  12. mysql导出数据为txt时报错:The MySQL server is running with the --secure-file-priv option so it cannot execut
  13. 地址转经纬度(百度)function
  14. 使用PS制作旋转星空
  15. 中国LED芯片行业市场竞争状况分析及十si五发展趋势研究报告2021~2027年
  16. 2017-百度-安全岗笔试
  17. 技术文档编写经验总结
  18. 吴恩达 深度学习 编程作业(2-2)- Optimization Methods
  19. Halcon 连接 pointgrey 双目相机
  20. (C语言)将输入单词译成密码

热门文章

  1. Codeforces 354C Vasya and Beautiful Arrays
  2. 类型字节oracle 增强型时间类型以及postgresql时间类型
  3. Jquery.ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
  4. 华为/华三IS-IS多区域配置及其路由优化
  5. php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例
  6. 文字描边_CSS3实现文字描边的2种方法
  7. H3C和cisco单臂路由和三层交换机实现VLAN之间的互通
  8. 中国HBase技术社区第十届meetup--HBase生态实践 (杭州站)...
  9. J2EE 读取资源文件properties的三种方式
  10. 虚机里的vCenter 迁移