深度学习caffe的代码怎么读
2018-07-31 · 打造可传承的民族化工灌装机品牌
长春北方化工灌装设备股份有限公司
长春北方化工灌装设备股份有限公司成立于1996年,是专业从事自动化灌装机器人生产线、智能仓储、数字化车间研发与生产的国家高新技术企业,是国家批准生产防爆型产品的专业装备制造企业。
向TA提问
关注
展开全部
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里面的各种变量运算不熟悉,当你跟踪完前向传播时可能已经头晕眼花了,还是休息一下,消化一下整个前向传播的流程。
刚刚开始你没有必要对每个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,还有中文版的,这对不喜欢看英语的同学是个好消息。当然你看一遍不理解,再看一遍,忘了,再看,读个几遍你才会对推导过程和数学符号熟悉。我头脑不大行,来来回回看了好多次。
当然,Ufldl的教程有点短,我还发现了一个讲得更细腻清晰的教程, Michael Nielsen写的Neural networks and deep learning。它讲得实在太好了,以至于把我的任督二脉打通了。在Ufldl的基础上读这个,你应该可以很快掌握全连接层的反向传播。
最后在拿出standford大牛karpathy的一篇博客Hacker's guide to Neural Networks,这里用了具体的编程例子手把手教你算梯度,并不是推导后向传播公式的,是关于通用梯度计算的。用心去体会一下。
这时你跃跃欲试,回去查看Caffe源码里Convolution层的实现,但发现自己好像没看懂。虽说卷积层和全连接层的推导大同小异,但思维上还是有个gap的。我建议你先去看看Caffe如何实现卷积的,Caffe作者贾扬清大牛在知乎上的回答在 Caffe 中如何计算卷积?让我茅塞顿开。重点理解im2col和col2im.
这时你知道了Convolution的前向传播,还差一点就可以弄明白后向传播怎么实现了。我建议你死磕Caffe中Convolution层的计算过程,把每一步都搞清楚,经过痛苦的过程之后你会对反向传播有了新的体会的。在这之后,你应该有能力添加自己的层了。再补充一个完整的添加新的层的教程Making a Caffe Layer • Computer Vision Enthusiast。这篇教程从头开始实现了一个Angle To Sine Cosine Layer,包含了梯度推导,前向与后向传播的CPU和GPU函数,非常棒的一个教程。
最后,建议学习一下基本的GPU Cuda编程,虽然Caffe中已经把Cuda函数封装起来了,用起来很方便,但有时还是需要使用kernel函数等Cuda接口的函数。这里有一个入门的视频教程,讲得挺不错的NVIDIA CUDA初级教程视频。
作者:Gein Chen
来源:知乎
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里面的各种变量运算不熟悉,当你跟踪完前向传播时可能已经头晕眼花了,还是休息一下,消化一下整个前向传播的流程。
刚刚开始你没有必要对每个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,还有中文版的,这对不喜欢看英语的同学是个好消息。当然你看一遍不理解,再看一遍,忘了,再看,读个几遍你才会对推导过程和数学符号熟悉。我头脑不大行,来来回回看了好多次。
当然,Ufldl的教程有点短,我还发现了一个讲得更细腻清晰的教程, Michael Nielsen写的Neural networks and deep learning。它讲得实在太好了,以至于把我的任督二脉打通了。在Ufldl的基础上读这个,你应该可以很快掌握全连接层的反向传播。
最后在拿出standford大牛karpathy的一篇博客Hacker's guide to Neural Networks,这里用了具体的编程例子手把手教你算梯度,并不是推导后向传播公式的,是关于通用梯度计算的。用心去体会一下。
这时你跃跃欲试,回去查看Caffe源码里Convolution层的实现,但发现自己好像没看懂。虽说卷积层和全连接层的推导大同小异,但思维上还是有个gap的。我建议你先去看看Caffe如何实现卷积的,Caffe作者贾扬清大牛在知乎上的回答在 Caffe 中如何计算卷积?让我茅塞顿开。重点理解im2col和col2im.
这时你知道了Convolution的前向传播,还差一点就可以弄明白后向传播怎么实现了。我建议你死磕Caffe中Convolution层的计算过程,把每一步都搞清楚,经过痛苦的过程之后你会对反向传播有了新的体会的。在这之后,你应该有能力添加自己的层了。再补充一个完整的添加新的层的教程Making a Caffe Layer • Computer Vision Enthusiast。这篇教程从头开始实现了一个Angle To Sine Cosine Layer,包含了梯度推导,前向与后向传播的CPU和GPU函数,非常棒的一个教程。
最后,建议学习一下基本的GPU Cuda编程,虽然Caffe中已经把Cuda函数封装起来了,用起来很方便,但有时还是需要使用kernel函数等Cuda接口的函数。这里有一个入门的视频教程,讲得挺不错的NVIDIA CUDA初级教程视频。
作者:Gein Chen
来源:知乎
展开全部
没有caffe代码,只有Coffee Cup这个软件。
Coffee Cup是一个功能强大的主页制作工具,你可以使用软件中提供的众多主页制作工具来制作网页,也可以直接使用HTML语言编写主页。除此之外,CoffeeCup还内置了许多用JavaScript、DHTML或CGIScript编写好的特殊效果程序,只要通过选择不同的效果程序,并做简单的自定义,就可以很容易地生成多种网页特效。
Coffee Cup软件主要由标题栏、菜单栏、工具栏、信息条、选项卡窗口、选项内容显示窗口和编辑窗口等几个部分组成。
菜单栏——包含了几个常用菜单,选择菜单中的选项就可以实现相应的功能。
工具栏——Coffee Cup软件提供了极为丰富的工具按钮,例如插入主页标题、插入表格、设置字体、插入音频、设置颜色、预览图片等等,其中囊括了几乎所有你想得到的主页制作需要的工具,单击某个工具按钮就可以立即实现相应的功能。
信息条——显示了一些与软件有关的提示信息。
选项卡窗口——选项卡窗口中包含有File、JavaScript、DHTML、CGIScript等几个选项卡。除了File标签用来选择文件外,其它几个标签都提供了许多用相应语言编写好的特殊效果程序。你只需选择相应的效果程序并按需要进行改动,就可以产生需要的效果。
选项内容显示窗口——这个窗口中主要用来显示你在选项卡中所选择的选项的详细程序内容。
编辑窗口——显示和编辑制作内容的HTML语句,也可以在这个区域直接编写HTML语句。
使用CoffeeCup创建主页的方法十分简单,只需单击工具栏的New按钮,打开QuickStart对话框,在对话框中指定主页的标题、背景图形、链接文本颜色等属性,单击Cool按钮,CoffeeCup就自动按这些设置生成HTML代码,把它命名,保存后,你的主页就基本存在了,而后,你可以使用CoffeeCup中的各种工具和特效来编辑主页的具体内容。
你也可以直接单击编辑窗口旁边纵向工具栏中的按钮,进行主页创建、标题设定、链接插入等操作。
每个主页制作工具除了拥有相类似的制作方式外,都有自己独到的一面。就像Dreamweaver中的时间轴、ANFY中的向导式制作特效一样,CoffeeCup带给我们的是多组内置的JavaScript、DHTML和CGIScript制作的特效选项。通过修改这些已经制作好的特效选项,可以进一步生成你所需要的效果。具体实现方法如下:
首先,单击选项卡窗口中的选项卡,如JAVAScript选项卡,然后,在窗口中列出的JavaScript中用鼠标双击某个选项,就可以把这种特效添加到主页中,最后,在主页编辑区修改需要的内容,就可以实现带有自我风格的特殊效果。
如果想选择添加滚动条信息,可以双击JavaScript标签中的StatusBar Message,在主页编辑区找到YourText Here,修改想要的状态条信息。单击工具栏上的Testwith Default Browser按钮,预览效果,可以发现状态条中的内容已经变成了你所修改的内容。
希望我能帮助你解疑释惑。
Coffee Cup是一个功能强大的主页制作工具,你可以使用软件中提供的众多主页制作工具来制作网页,也可以直接使用HTML语言编写主页。除此之外,CoffeeCup还内置了许多用JavaScript、DHTML或CGIScript编写好的特殊效果程序,只要通过选择不同的效果程序,并做简单的自定义,就可以很容易地生成多种网页特效。
Coffee Cup软件主要由标题栏、菜单栏、工具栏、信息条、选项卡窗口、选项内容显示窗口和编辑窗口等几个部分组成。
菜单栏——包含了几个常用菜单,选择菜单中的选项就可以实现相应的功能。
工具栏——Coffee Cup软件提供了极为丰富的工具按钮,例如插入主页标题、插入表格、设置字体、插入音频、设置颜色、预览图片等等,其中囊括了几乎所有你想得到的主页制作需要的工具,单击某个工具按钮就可以立即实现相应的功能。
信息条——显示了一些与软件有关的提示信息。
选项卡窗口——选项卡窗口中包含有File、JavaScript、DHTML、CGIScript等几个选项卡。除了File标签用来选择文件外,其它几个标签都提供了许多用相应语言编写好的特殊效果程序。你只需选择相应的效果程序并按需要进行改动,就可以产生需要的效果。
选项内容显示窗口——这个窗口中主要用来显示你在选项卡中所选择的选项的详细程序内容。
编辑窗口——显示和编辑制作内容的HTML语句,也可以在这个区域直接编写HTML语句。
使用CoffeeCup创建主页的方法十分简单,只需单击工具栏的New按钮,打开QuickStart对话框,在对话框中指定主页的标题、背景图形、链接文本颜色等属性,单击Cool按钮,CoffeeCup就自动按这些设置生成HTML代码,把它命名,保存后,你的主页就基本存在了,而后,你可以使用CoffeeCup中的各种工具和特效来编辑主页的具体内容。
你也可以直接单击编辑窗口旁边纵向工具栏中的按钮,进行主页创建、标题设定、链接插入等操作。
每个主页制作工具除了拥有相类似的制作方式外,都有自己独到的一面。就像Dreamweaver中的时间轴、ANFY中的向导式制作特效一样,CoffeeCup带给我们的是多组内置的JavaScript、DHTML和CGIScript制作的特效选项。通过修改这些已经制作好的特效选项,可以进一步生成你所需要的效果。具体实现方法如下:
首先,单击选项卡窗口中的选项卡,如JAVAScript选项卡,然后,在窗口中列出的JavaScript中用鼠标双击某个选项,就可以把这种特效添加到主页中,最后,在主页编辑区修改需要的内容,就可以实现带有自我风格的特殊效果。
如果想选择添加滚动条信息,可以双击JavaScript标签中的StatusBar Message,在主页编辑区找到YourText Here,修改想要的状态条信息。单击工具栏上的Testwith Default Browser按钮,预览效果,可以发现状态条中的内容已经变成了你所修改的内容。
希望我能帮助你解疑释惑。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询