作者:Gein Chen
链接:https://www.zhihu.com/question/27982282/answer/80242005

1.学习程序的第一步,先让程序跑起来,看看结果,这样就会有直观的感受。
Caffe的官网上Caffe | Deep Learning Framework 提供了很多的examples,你可以很容易地开始训练一些已有的经典模型,如LeNet。我建议先从 LeNet MNIST Tutorial开始,因为数据集很小,网络也很小但很经典,用很少的时间就可以跑起来了。当你看到terminal刷拉拉的一行行输出,看到不断减少的loss和不断上升的accuracy,训练结束你得到了99+%的准确率,感觉好厉害的样子。你可以多跑跑几个例子,熟悉一下环境和接口。

2.单步调试,跟着Caffe在网络里流动
当玩了几天之后,你对Caffe的接口有点熟悉了,对已有的例子也玩腻了,你开始想看看具体是怎么实现的了。我觉得最好的方法是通过单步调试的方式跟着程序一步一步的在网络里前向传播,然后再被当成误差信息传回来。

Caffe就像一个你平常编程中Project,你可以使用IDE或者GDB去调试它,这里我们不细说调试的过程。你可以先跟踪前向传播的过程,无非就是从高层次到低层次的调用Forward函数, Solver->Net->Layer->Specific Layer (Convolution等...).后向传播也类似,但因为你对Caffe里面的各种变量运算不熟悉,当你跟踪完前向传播时可能已经头晕眼花了,还是休息一下,消化一下整个前向传播的流程。

安装IDE:

eclipse 的官方地址:http://www.eclipse.org

Eclipse平台是IBM向开发源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数 —4千万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系结构。

安装方法:

sudo apt-get install eclipse-cdt eclipse

刚刚开始你没有必要对每个Layer的计算细节都那么较真,大概知道程序的运算流程就好,这样你才可以比较快的对Caffe有个大体的把握。

3.个性化定制Caffe
到这里,你已经可以说自己有用过Caffe了,但是还不能算入门,因为你还不知道怎么修改源码,满足自己特定的需求。我们很多时候都需要自己定义新的层来完成特定的运算,这时你需要在Caffe里添加新的层。

你一开肯定无从下手,脑子一片空白。幸运的是Caffe github上的Wiki Development · BVLC/caffe Wiki · GitHub已经有了教程了,而且这是最接近latest Caffe的源码结构的教程,你在网上搜到的Blog很多是有点过时的,因为Caffe最近又重构了代码。你可以跟着它的指导去添加自己的层。

虽然你已经知道要在哪里添加自己的东西了,但你遇到最核心的问题是如何写下面这四个函数。

  • forward_cpu()
  • forward_gpu()
  • backward_cpu()
  • backward_gpu()

你可以先模仿已有的层去实现这四个函数,而且我相信forward函数很快就可以写出来了,但backward的还是一头雾水。这时我们就要补补神经网络里最核心的内容了——Backpropagation.

4.理解并实现Backpropagation
这个我觉得是与平台无关的,不管你是使用Caffe、Torch 7,还是Theano,你都需要深刻理解并掌握的。因为我比较笨,花了好长时间才能够适应推导中的各种符号。其实也不难,就是误差顺着Chain rule法则流回到前面的层。我不打算自己推导后向传播的过程,因为我知道我没有办法将它表达得很好,而且网上已经有很多非常好的教程了。下面是我觉得比较好的学习步骤吧。

  • 从浅层的神经网络(所谓的全连接层)的后向传播开始,因为这个比较简单,而且现在我们常说的CNN和LSTM的梯度计算也最终会回归到这里。

    • 第一个必看的是Ng深入浅出的Ufldl教程UFLDL Tutorial,还有中文版的,这对不喜欢看英语的同学是个好消息。当然你看一遍不理解,再看一遍,忘了,再看,读个几遍你才会对推导过程和数学符号熟悉。我头脑不大行,来来回回看了好多次。
    • http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
    • 当然,Ufldl的教程有点短,我还发现了一个讲得更细腻清晰的教程, Michael Nielsen写的Neural networks and deep learning。它讲得实在太好了,以至于把我的任督二脉打通了。在Ufldl的基础上读这个,你应该可以很快掌握全连接层的反向传播。
    • http://neuralnetworksanddeeplearning.com/chap2.html
    • 最后在拿出standford大牛karpathy的一篇博客Hacker's guide to Neural Networks,这里用了具体的编程例子手把手教你算梯度,并不是推导后向传播公式的,是关于通用梯度计算的。用心去体会一下。
    • http://karpathy.github.io/neuralnets/
  • 这时你跃跃欲试,回去查看Caffe源码里Convolution层的实现,但发现自己好像没看懂。虽说卷积层和全连接层的推导大同小异,但思维上还是有个gap的。我建议你先去看看Caffe如何实现卷积的,Caffe作者贾扬清大牛在知乎上的回答在 Caffe 中如何计算卷积?让我茅塞顿开。重点理解im2col和col2im.
  • https://www.zhihu.com/question/28385679
  • 这时你知道了Convolution的前向传播,还差一点就可以弄明白后向传播怎么实现了。我建议你死磕Caffe中Convolution层的计算过程,把每一步都搞清楚,经过痛苦的过程之后你会对反向传播有了新的体会的。在这之后,你应该有能力添加自己的层了。再补充一个完整的添加新的层的教程Making a Caffe Layer • Computer Vision Enthusiast。这篇教程从头开始实现了一个Angle To Sine Cosine Layer,包含了梯度推导,前向与后向传播的CPU和GPU函数,非常棒的一个教程。
  • http://chrischoy.github.io/research/making-caffe-layer/
  • 最后,建议学习一下基本的GPU Cuda编程,虽然Caffe中已经把Cuda函数封装起来了,用起来很方便,但有时还是需要使用kernel函数等Cuda接口的函数。这里有一个入门的视频教程,讲得挺不错的NVIDIA CUDA初级教程视频。
  • http://www.iqiyi.com/a_19rrhbvoe9.html

Caffe自己修改训练方法相关推荐

  1. Caffe阅读代码并修改

    这个教程是最好理解的了 http://city.shaform.com/blog/2016/02/26/caffe.html 主要分成四個部份來講.首先是整個 Caffe 的大架構,以及一些重要的元件 ...

  2. Caffe在Ubuntu 14.04 64bit 下的安装------pycaffe 配置

    这里我主要参考 pycaffe 的 安装配置 http://www.linuxidc.com/Linux/2015-07/120449.htm 最近因为各种原因,装过不少次Caffe,安装过程很多坑, ...

  3. cuda测试caffe编译安装

    4. 安装CUDA Sample 及 ATLAS 4.1 Build sample cd /usr/local/cuda/samples sudo make all -j8 我电脑是八核的,所以mak ...

  4. 神经风格迁移(Neural Style Transfer)程序实现(Caffe)

    前言 上次的博客写了神经风格迁移(Neural Style Transfer)程序实现(Keras),使用keras的一个好处就是api简单,能够快速部署模型,使用很方便.出于学习目的,这次又使用ca ...

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

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

  6. Caffe: Caffe的Python接口

    官方参考:http://caffe.berkeleyvision.org/installation.html 官方介绍是这样的: Python The main requirements are nu ...

  7. 【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程

    前言 首先来一波地址: happynear大神的第三方caffe:http://blog.csdn.net/happynear/article/details/45372231 Neil Z大神的第三 ...

  8. win7_64 安装 caffe

    文章目录 一.caffe 简介 二.当前电脑配置 三.caffe 安装 1. 下载 caffe 2. 修改文件 3. 安装 cuda 和 cudnn 4. 编译caffe-windows 一.caff ...

  9. redhat配置caffe多核训练

    参考网站: http://blog.csdn.net/10km/article/details/52723306 http://stackoverflow.com/questions/31395729 ...

最新文章

  1. C++网络游戏程序员笔试题
  2. php连接电脑,PHP_深入理解php的MySQL连接类,无意间在电脑里发现还有这么 - phpStudy...
  3. RNN以及LSTM的介绍和公式梳理
  4. mac 完全卸载android,关于macos:如何在Mac上完全卸载Android Studio?
  5. 16x16x16 4096个RGB LED的光立方是一种怎样的神奇效果?视频展示制作全过程
  6. linux sftp ssh端口分开,sftp ssh服务分离
  7. oracle ora-01476: 除数为 0,Oracle常见错误:ORA-01403 的根本原因和解决方案
  8. Linux服务器上安装node.js
  9. armbian编译安装mentohust 认证锐捷客户端
  10. sqlalchemy 8 会话 与 异常
  11. 冬季黄山旅游费用明细
  12. 第一次进入Eclipse MARS2界面后的一些基本设置
  13. [CTF] 攻防世界MISC高手区部分题目WriteUp(2)
  14. PowerPoint!让教学更精彩:PPT课件高效制作
  15. CoherenceModel官网翻译
  16. 太极图用html做的原理,用HTML画个太极图
  17. 图片无损放大怎么做?学会这一招就够了
  18. 数据库人才招聘 | 大湾区国创中心工业软件发展中心
  19. 更改本地计算机用户名,Win10怎么修改本地账号的用户名
  20. 名帖275 董其昌 行书《书画合璧山水册》

热门文章

  1. 《看聊天记录都学不会C语言?太菜了吧》(15)你学了一节课的函数我5分钟搞定了,还很熟
  2. 服务器线程数一直增加,.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长...
  3. 目瞪口呆!137亿年的宇宙演化,竟然如此震撼!简直颠覆想象....
  4. 学过物理的人才能看懂的笑话,你能看明白几个?
  5. mysql binlog 大数据_后起之秀 | MySQL Binlog增量同步工具go-mysql-transfer实现详解
  6. 语言怎么得到直流电压并采样_交流电AC如何转换成直流电DC?
  7. c语言两个长整数相加,二个超长正整数的相加
  8. 简述本地组策略中用户和计算机配置的差异,组策略编辑器中的计算机配置和用户配置有什么区别吗?...
  9. yaml for java_细数Java项目中用过的配置文件(YAML篇)
  10. python区域增长算法_区域增长算法