Caffe —— Deep learning in Practice
因工作交接须要。 要将caffe用法及总体结构描写叙述清楚。
鉴于也有同学问过我相关内容, 决定在本文中写个简单的tutorial, 方便大家參考。
本文简单的讲几个事情:
- Caffe能做什么?
- 为什么选择caffe?
- 环境
- 总体结构
- Protocol buffer
- 训练基本流程
- Python中训练
- Debug
Caffe能做什么?
- 定义网络结构
- 训练网络
- C++/CUDA 写的结构
- cmd/python/Matlab接口
- CPU/GPU工作模式
- 给了一些參考模型&pretrain了的weights
为什么选择caffe?
- 模块化做的好
- 简单:改动结构无需该代码
- 开源:共同维护开源码
环境:
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 12.04.4 LTS
Release: 12.04
Codename: precise$ cat /proc/version
Linux version 3.2.0-29-generic (buildd@allspice) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012Vim + Taglist + Cscope
总体结构:
定义CAFFE为caffe跟文件夹,caffe的核心代码都在$CAFFE/src/caffe 下,主要有下面部分:net, blob, layer, solver.
net.cpp:
net定义网络。 整个网络中含有非常多layers, net.cpp负责计算整个网络在训练中的forward, backward过程, 即计算forward/backward 时各layer的gradient。layers:
在$CAFFE/src/caffe/layers中的层。在protobuffer (.proto文件里定义message类型。.prototxt或.binaryproto文件里定义message的值) 中调用时包括属性name, type(data/conv/pool…)。 connection structure (input blobs and output blobs),layer-specific parameters(如conv层的kernel大小)。定义一个layer须要定义其setup, forward 和backward过程。blob.cpp:
net中的数据和求导结果通过4维的blob传递。一个layer有非常多blobs, e.g,- 对data,weight blob大小为Number * Channels * Height * Width, 如256*3*224*224。
- 对conv层。weight blob大小为 Output 节点数 * Input 节点数 * Height * Width,如AlexNet第一个conv层的blob大小为96 x 3 x 11 x 11。
- 对inner product 层, weight blob大小为 1 * 1 * Output节点数 * Input节点数; bias blob大小为1 * 1 * 1 * Output节点数( conv层和inner product层一样。也有weight和bias,所以在网络结构定义中我们会看到两个blobs_lr,第一个是weights的。第二个是bias的。相似地。weight_decay也有两个,一个是weight的,一个是bias的);
blob中。mutable_cpu/gpu_data() 和cpu/gpu_data()用来管理memory。cpu/gpu_diff()和 mutable_cpu/gpu_diff()用来计算求导结果。
slover.cpp:
结合loss。用gradient更新weights。主要函数:
Init(),
Solve(),
ComputeUpdateValue(),
Snapshot(), Restore(),//快照(拷贝)与恢复 网络state
Test()。
在solver.cpp中有3中solver。即3个类:AdaGradSolver, SGDSolver和NesterovSolver可供选择。关于loss。能够同一时候有多个loss。能够加regularization(L1/L2);
Protocol buffer:
上面已经将过。 protocol buffer在 .proto文件里定义message类型,.prototxt或.binaryproto文件里定义message的值;
Caffe
Caffe的全部message定义在$CAFFE/src/caffe/proto/caffe.proto中。Experiment
在实验中,主要用到两个protocol buffer: solver的和model的,分别定义solver參数(学习率啥的)和model结构(网络结构)。
技巧:- 冻结一层不參与训练:设置其blobs_lr=0
- 对于图像。读取数据尽量别用HDF5Layer(由于仅仅能存float32和float64,不能用uint8, 所以太费空间)
训练基本流程:
- 数据处理
法一,转换成caffe接受的格式:lmdb, leveldb, hdf5 / .mat, list of images, etc.;法二。自己写数据读取层(如https://github.com/tnarihi/tnarihi-caffe-helper/blob/master/python/caffe_helper/layers/data_layers.py) - 定义网络结构
- 配置Solver參数
- 训练:如 caffe train -solver solver.prototxt -gpu 0
在python中训练:
Document & Examples: https://github.com/BVLC/caffe/pull/1733
核心code:
- $CAFFE/python/caffe/_caffe.cpp
定义Blob, Layer, Net, Solver类 - $CAFFE/python/caffe/pycaffe.py
Net类的增强功能
Debug:
- 在Make.config中设置DEBUG := 1
- 在solver.prototxt中设置debug_info: true
- 在python/Matlab中察看forward & backward一轮后weights的变化
经典文献:
[ DeCAF ] J. Donahue, Y. Jia, O. Vinyals, J. Hoffman, N. Zhang, E. Tzeng, and T. Darrell. Decaf: A deep convolutional activation feature for generic visual recognition. ICML, 2014.
[ R-CNN ] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. CVPR, 2014.
[ Zeiler-Fergus Visualizing] M. Zeiler and R. Fergus. visualizing and understanding convolutional networks. ECCV, 2014.
[ LeNet ] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. IEEE, 1998.
[ AlexNet ] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. NIPS, 2012.
[ OverFeat ] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. Overfeat: Integrated recognition, localization and detection using convolutional networks. ICLR, 2014.
[ Image-Style (Transfer learning) ] S. Karayev, M. Trentacoste, H. Han, A. Agarwala, T. Darrell, A. Hertzmann, H. Winnemoeller. Recognizing Image Style. BMVC, 2014.
[ Karpathy14 ] A. Karpathy, G. Toderici, S. Shetty, T. Leung, R. Sukthankar, and L. Fei-Fei. Large-scale video classification with convolutional neural networks. CVPR, 2014.
[ Sutskever13 ] I. Sutskever. Training Recurrent Neural Networks. PhD thesis, University of Toronto, 2013.
[ Chopra05 ] S. Chopra, R. Hadsell, and Y. LeCun. Learning a similarity metric discriminatively, with application to face verification. CVPR, 2005.
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i ').text(i));
};
$numbering.fadeIn(1700);
});
});
Caffe —— Deep learning in Practice的更多相关文章
- 深度学习框架Caffe —— Deep learning in Practice
因工作交接需要, 要将caffe使用方法及整体结构描述清楚. 鉴于也有同学问过我相关内容, 决定在本文中写个简单的tutorial, 方便大家参考. 本文简单的讲几个事情: Caffe能做什么? 为什 ...
- (转) Deep Learning Resources
转自:http://www.jeremydjacksonphd.com/category/deep-learning/ Deep Learning Resources Posted on May 13 ...
- [C3] Andrew Ng - Neural Networks and Deep Learning
About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep l ...
- Comparing deep learning frameworks: Tensorflow, CNTK, MXNet, & Caffe
https://imaginghub.com/blog/10-a-comparison-of-four-deep-learning-frameworks-tensorflow-cntk-mxnet-a ...
- 关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
问答环节 问:在finetuning的时候,新问题的图像大小不同于pretraining的图像大小,只能缩放到同样的大小吗?" 答:对的:) 问:目前dl在时序序列分析中的进展如何?研究思路 ...
- 【深度学习Deep Learning】资料大全
最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books by Yoshua Bengio, Ian Goodfellow and Aaron C ...
- Machine and Deep Learning with Python
Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...
- Why GEMM is at the heart of deep learning
Why GEMM is at the heart of deep learning I spend most of my time worrying about how to make deep le ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)
##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...
随机推荐
- poj 1731 Orders(暴力)
题目链接:http://poj.org/problem?id=1731 思路分析:含有重复元素的全排列问题:元素个数为200个,采用暴力枚举法. 代码如下: #include <iostream ...
- uvalive 2322 Wooden Sticks(贪心)
题目连接:2322 Wooden Sticks 题目大意:给出要求切的n个小木棍 , 每个小木棍有长度和重量,因为当要切的长度和重量分别大于前面一个的长度和重量的时候可以不用调整大木棍直接切割, 否则 ...
- CentOS6.4关闭触控板
1. 检查是否安装xorg-x11-app; rpm -qa xorg-x11-apps 如果没有安装使用下面命令安装xorg-x11-app yum install xorg-x11-apps 2. ...
- Win7安装IIS
非常明显的,我们做系统是用来给人用的,所以这就涉及到对系统的公布问题.仅仅有公布之后.别人才干通过訪问你的IP和port号来訪问你的程序. 而系统公布一般都是在IIS上面进行系统公布,所以我们就必需要 ...
- TCP/IP之TCP连接的建立与中止状态分析
TCP连接的建立可以简单的称为三次握手,而连接的中止则可以叫做四次握手. 1.连接的建立: c端发起请求同步(用SYN段等于1的TCP报文),确认某个端口是否监听: s端应答(用ACK段等于1的TCP ...
- UISearchBar去除底部黑线问题
有时我们在设置搜索框的时候底部会出现一条黑线,要 去除这黑线只需设置. [self.searchBar setBackgroundImage:[UIImage new]];
- C#_会员管理系统:开发一(用户登录)
首先创建数据库: [Vip] 创建三张表: 分别是: [VipInformation](会员信息) [Log](日志) [VipAccount](账户权限) 详细语句: --创建数据库[Vip] cr ...
- JVM -- CMS
并发的标记—清除(Concurrent Mark Sweep,缩写为 CMS)收集器,使得在整个收集的过程中只是很短的暂停应用的执行,可通过在 JVM 参数中设置-XX:UseConcMarkSwee ...
- 一致性算法--Paxos
分布式一致性算法--Paxos Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议) ...
- Hadoop 2.x(YARN)安装配置LZO
今天尝试在Hadoop 2.x(YARN)上安装和配置LZO,遇到了很多坑,网上的资料都是基于Hadoop 1.x的,基本没有对于Hadoop 2.x上应用LZO,我在这边记录整个安装配置过程 1. ...