Caffe入门随笔

Caffe入门随笔

分享一下自己入门机器学习的一些资料:
(1)课程,最推荐Coursera上的Andrew NG的Machine Learning,最好注册课程,然后跟下来。
其次是华盛顿大学的Machine Learning系列课程,一共有6门,包括毕业设计
(2)书籍: 机器学习(周志华西瓜书)、机器学习实战、统计学习方法(李航)、集体智慧编程、数学之美(吴军)
(3)微博
@余凯_西二旗民工;@老师木;@梁斌penny;@张栋_机器学习;@邓侃;@大数据皮东;@djvu9;@陈天奇怪
(4)知乎
@贾扬清;@Naiyan Wang; @李文哲;@陈然
热门回答 机器学习该怎么入门?<https://www.zhihu.com/question/20691338>

安装和配置caffe
环境:台式机 + 无GPU + Ubuntu14.04
纯CPU简易安装过程:
(1) 下载相关依赖包(在ubuntu下都由apt-get大法搞定)

sudo apt-get install libatlas-base-dev
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

(2) github上下载最新的caffe源码

git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config

(3) 修改Makefile.config,选择CPU_ONLY选项,保存
(4) 测试

make all -j4
make test
make runtest

安装配置心得
纯CPU版因为不涉及显卡和Cuda安装的问题,因此安装过程中比较简单。主要遇到的问题是相关依赖包的缺失问题。
整理了下用到的依赖包和作用:
(1) Protobuffer
谷歌开发的一种可以实现内存与非易失存储介质(如硬盘)交换的协议接口。Caffe源码中大量使用protobuffer作为权值和模型参数的载体。使用protobuffer可以跨语言(C++/java/python)传递相同的数据结构。
(2) Boost
C++准标准库,功能强大,跨平台,构造精巧,开源免费。在caffe中主要使用了Boost库中的智能指针,其自带引用计数功能,可避免共享指针时造成的内存泄漏和多次释放。
(3) GFLAGS
主要起到命令行参数解析的作用,与protobuffer功能类似,只是参数输入源不同。
(4) GLOG
谷歌开发的用于记录应用程序日志的实用库,提供基于C++标准输入输出的流形式接口,记录可以选择的不同的日志级别,将重要日志和普通日志分开。
(5) BLAS
基本线性代数库。最常用的有Openblas, Atlas, Intel Mkl等,安装相应的版本后,可以在caffe的config文件中配置
(6) HDF5
美国国家高级计算中心为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式。可以存储不同类型的图像和数码数据文件,在不同的机器上传输。Caffe训练模型可以保存为默认的protobuffer格式或者hdf5格式。
(7) Lmdb和leveldb
在caffe中主要的作用是数据库管理,将形形色色的原始数据转换为统一的key-value存储,方便caffe的datalayer进行读取。
Caffe Demo
http://blog.sina.com.cn/s/blog_5d36d8e00102uya1.html
参照薛开宇的博客,在caffe的example下跑一些demo
以caffe/example/cifar10目录下的cifar数据集demo为例,我的安装目录是~/software/caffe
(1)获取数据集和计算均值文件

cd ~/software/caffe/data/cifar10
./get_cifar10.sh
cd ~/software/caffe/examples/cifar10
./create_cifar10.sh

运行之后,将会在cifar10目录下会出现:
两个文件夹

cifar10_train_lmdb/
cifar10_test_lmdb/

一个数据库图像均值二进制文件

mean.binaryproto

(2)训练cifar10数据集
写好参数设置的文件cifar10_quick_solver.prototxt和定义的文件cifar10_quick_train.prototxt和cifar10_quick_test.prototxt后运行 train_quick.sh即可
(3)观察结果
当5000次迭代之后,正确率约为75%,模型的参数存储在二进制protobuf格式在cifar10_quick_iter_5000,然后,这个模型就可以用来运行在新数据上了。
 Caffe源码阅读
参考知乎上的一个问题,深度学习caffe的代码怎么读
https://www.zhihu.com/question/27982282

要读懂caffe,首先要熟悉Blob,Layer,Net,Solver这几个大类。这四个大类自下而上,环环相扣,贯穿了整个caffe的结构。
(1)Blob:
作为数据传输的媒介,无论是网络权重参数,还是输入数据,都是转化为Blob数据结构来存储
(2)Layer:
作为网络的基础单元,神经网络中层与层间的数据节点、前后传递都在该数据结构中被实现,层类种类丰富,比如常用的卷积层、全连接层、pooling层等等,大大地增加了网络的多样性
(3)Net:
作为网络的整体骨架,决定了网络中的层次数目以及各个层的类别等信息

Blob,Layer和Net的关系可以用下图来描述:

(4)Solver:
作为网络的求解策略,涉及到求解优化问题的策略选择以及参数确定方面,修改这个模块的话一般都会是研究DL的优化求解的方向。
prototxt文件
在caffe中,要训练一个网络,至少要包含2个prototxt文件:

1. 一个是描述Net结构(“Blob+Layers+数据流”构成)的文件 
2. 一个是描述训练算法的Solver文件

例如,cifar10中的描述Solver的prototxt

 1 # reduce the learning rate after 8 epochs (4000 iters) by a factor of 10
 2 # The train/test net protocol buffer definition
 3 net: "examples/cifar10/cifar10_quick_train_test.prototxt"
 4 # test_iter specifies how many forward passes the test should carry out.
 5 # In the case of MNIST, we have test batch size 100 and 100 test iterations,
 6 # covering the full 10,000 testing images.
 7 test_iter: 100
 8 # Carry out testing every 500 training iterations.
 9 test_interval: 500
10 # The base learning rate, momentum and the weight decay of the network.
11 base_lr: 0.001
12 momentum: 0.9
13 weight_decay: 0.004
14 # The learning rate policy
15 lr_policy: "fixed"
16 # Display every 100 iterations
17 display: 100
18 # The maximum number of iterations
19 max_iter: 4000
20 # snapshot intermediate results
21 snapshot: 4000
22 snapshot_format: HDF5
23 snapshot_prefix: "examples/cifar10/cifar10_quick"
24 # solver mode: CPU or GPU
25 solver_mode: CPU

 Caffe代码快速梳理

Caffe是基于C++编写的深度学习框架,大量使用了类的封装、继承、多态,阅读Caffe的源码也可以很好的学习C++。
参考《21天实战Caffe》,开始阅读Caffe的源码
在Caffe的根目录下执行 tree 命令,即可查看caffe的整个目录结构:

tree -d

重点关注include/ src/ 和 tool/3个子目录

借鉴别人经验,一般来说,阅读Caffe源码的4步:
(1)看src/caffe/proto/caffe.proto,了解基本的数据结构内存对象和磁盘文件的映射关系
(2)看头文件
(3)有针对性地看cpp和cu文件
(4)编写各类工具,集成到caffe内部
菜鸟刚刚起步,感觉Caffe的源码写的还是很清晰的,希望以后可以耐心的好好啃吧。
Caffe网络结构可视化
推荐可视化网站 <http://ethereon.github.io/netscope/#/editor>
CNN model的具体设置在prototxt文件里面,将其内容复制到上面的网站即可看到网络结构,方便调整和检查网络连接
就拿Cifar10数据集来说,找到caffe/examples/cifar10下的网络定义prototxt文件,粘贴到网上左边,然后Shilf+Enter,即可直观看到网络结构:


Caffe的Python开发
ipython notebook可以说是python开发深度学习的一个利器了
进入caffe的根目录,输入:

ipython notebook &

然后进入caffe的example目录,自带了一些python写的demo

时间: 2024-08-28 06:24:18

Caffe入门随笔的相关文章

WCF入门随笔 (一). 新建一个WCF服务

1. 新建服务 (1). [文件]--[新建项目]--[WCF服务应用程序] (2). 将默认生成的IService1.cs和Service1.svc文件删除掉 (3). 添加自定义的WCF[服务文件]Math.svc,此时vs2012会自动生成WCF接口文件IMath.cs,我们在IMath中定义WCF方法Add,在Math.svc.cs对该接口的方法进行实现. IMath.cs文件 1 namespace WCFService 2 { 3 [ServiceContract] 4 public

caffe入门-简介,安装,在服务器上的拷贝使用的入门

caffe是deeplearning常见框架,是目前做CNN比较主流的方法,官网参考http://caffe.berkeleyvision.org/ (1)caffe简介: caffe有以下几个特点: 1 表达:caffe主要有modles+optimizations组成,models解释了深度网络的每一层是怎么定义和连接的,一般都定义成.prototxt文件,optimization主要是指caffe的solver的定义. 2速度:比较快,是当前state of art的大数据处理方式. 3易

caffe入门classification00学习--ipython

首先,数据文件和模型文件都已经下载并处理好,不提. cd   "caffe-root-dir " ----------------------------------分割线------------------------------- # set up Python environment: numpy for numerical routines, and matplotlib for plottingimport numpy as npimport matplotlib.pyplo

Caffe入门与应用 by GX

深度学习几大工具:Theano(基于python),Torch,Caffe(用c++写的),Tensor flow,CNTK:caffe是比较流行的深度学习的框架 caffe特点:特别适合于新手,由于其简单,不用写代码只需写一些配置文件就可以完成神经网络的训练等.

黑客入门随笔

万事分正邪,正为黑客,邪为骇客. 看过<犯罪心理>吗?里面的Garcia,此等人物乃是我心中真正的黑客,只有是网络,什么数据库,监控巴拉巴拉,没有她搞不定了,而且她只为善事.而在影视屏幕中我们大多数见到的牛掰的高手,大多都是骇客形象,他们翻手为风覆手为雨破坏规则逍遥法外...最强大的比如<超验骇客>. 但黑客究竟是如何炼成的?我将一点一点的记录自己的学习,与每位有缘人分享. 昨天看了半天,看得我头晕眼花,不知所措.很多新概念,根本看不懂,一度打消了我的热情.但还是要坚持,以下是我自

前端工程师入门随笔

从最初开始算,已经入行三年了,若再往前点,就是从09年第一个网站开始算了,特意送上小心得一份. 第一篇:初识网站 09年之际,看到某朋友做网站(现在看来也是半斤八两),特崇拜,感觉自己也能够拥有网站,遂烦之,扰之,求之,终有一日见到他做网站的一个庐山真面目(一个过程),然后开始意淫(并非开始投入学习,当时并无女朋友),将来追妹纸的时候,非得弄一个网站融化她,将来世界上所有人都能够看到我的网站,身边的朋友,老师,妹纸都将拜在我的网站下,我将是一代宗师,哈哈哈哈,哈哈哈哈. 第二篇:入门前端 后来真

Caffe入门学习规划

第一步,学习吴恩达老师的慕课 ,注意做笔记,并将不会的问题记录下来 第二步,学习周志华老师的<机器学习>,要求同上 第三步,学习由CaffeCN提供的<Caffe官方教程中译本> 第四步,全面浏览Caffe官方网站 第六步,开始进行Caffe深度学习框架的使用,之前需要进行Docker的学习 第七步,运行Caffe上自带的MNIST手写数字识别实例 第八步,寻求识别率的提高,可供参考的网站,CSDN博客,cnblogs博客,中国知网 ,百度学术,谷歌学术镜像,谷歌搜索,Bing搜索

Verilog入门随笔

软件安装以及新建文件等不再赘述,博主用的Quartus 9.0,有需要私信. module后面的模块文件名需要与项目文件名(something.v)一致. 推荐博文 新建项目 https://www.jianshu.com/p/1142efa4314b http://www.voidcn.com/article/p-edllrigc-boa.html assign专题 https://www.jianshu.com/p/5f777d5cd901 always描述时序逻辑电路 https://ww

Java 基础入门随笔(4) JavaSE版

上一节对于运算符有了大致的了解,这一节针对程序流程控制进行复习!程序流程控制包括顺序结构.判断结构(if).选择结构(switch).循环结构. 1.判断结构 ①if语句的第一种格式:        if(条件表达式)        {            执行语句:        } ②if语句的第二种格式: if(条件表达式)        {            执行语句:        }        else//否则        {            执行语句: