RTFM | Caffe Deep Learning Framework

上周周末由于出门踏青+膜蛤的原因没有空写一下关于Cuda API的东西。于是这一回我就来水一波Caffe Manual啦!

好吧其实Caffe还是比较坑爹的,首先是依赖项搞得很不好,其次是文档很辣鸡(不过代码质量还不错)。我在此篇中仅仅讲一点简单的用法。由于Caffe是一个Deep Learning also known as Deep Convolution Neural Network的框架,所以其中会涉及Machine Learning & CNN姿势。我尽量用比较简单的不涉及过多的数学概念的方法讲一下怎么使用一些常用API。

Tutorial

我们打开混沌的官方网站

先了解一下基本的概念

RTFM | Caffe Deep Learning Framework_第1张图片
Concept
Blobs

Caffe对于一个针对于处理图片的概念的分解是十分方便,清晰,具有启发性的。首先他的概念的分解我觉得就非常地好(或许是我已经陷入了固有思维)。首先他对数据流(tensorflow)的维数进行了硬编码(在caffe里被称为Blobs),四维(对于图片处理来讲这四维非常有道理):第一维是batch_size,第二维是Channel_size,第三维是Height_size,第四维是Width_size。这个硬编码有好的地方也有坏的地方。好的地方在于在99%的图片处理任务当中我们不再考虑写维数的问题,Caffe已经提供好了一个四维数据模型,我们只需要进行简单地填空就好了。让我们专注于图片处理算法的过程而不是写代码做架构,同时Channel和Batch_size两个维度又提供足够多的维度让我们灵活地把算法应用到Caffe中。 不好的地方就是,如果不是处理图片的话,那么Caffe就显得overdesigned了,比较难用。

Layers

Caffe把神经元节点以layer的形式组织起来,layer不仅是一层神经元对数据进行处理的过程,还是一种对数据处理层的一种抽象。在caffe中,具有forward/backward函数的对blobs进行处理的结构被称作layer.

Net

Net是对一系列layers(包括输入和输出)的一整套对图片进行处理的结构。这一部分包括了层与层直接的链接关系(forword/backward的方向)以及对整个网络的包装。Net和Loss, Solver的关系很大,本身则是作为一个网络整体的抽象实体

Forward/Backward

对于任意的层,必须要实现Forward/Backward的办法。Caffe的基本假设是基于一个有监督(supervised)网络。Forward的过程是数据从Input到Output的流动过程Backward则是数据流动到Output后的如需要进行对网络参数的改动而添加的hook。所以在实现上,虽然Caffe将整个过程分成了Forward/Backward两部,但也是能够实现无监督学习的(忽略backpropagation,在backward的过程中对网络参数的修改基于无监督学习方法)

Solver

Solver是对于网络训练的一些整天参数的设定,例如learning_rate, lr_policy等。这些参数在具体实现中都被定义在solver.prototxt。

Interface

我们主要讲C++和Python的接口(留在之后的阅读源码的介绍中)。Matlab是啥?你想写Matlab?咋不上天呢?

Parameter

当你要使用Caffe来训练模型的话你必须要编写两个protobuf格式的文档。一个是solver.prototxt,另一个是model.prototxt。什么是protobuf?

solver

solver中主要定义了一些全局的数据(此处设计很多神经网络的知识)我就放个例子好了.

RTFM | Caffe Deep Learning Framework_第2张图片
solver.prototxt
model

model中定义了层的信息(包括输出和输入),这里也仅仅放一个例子

RTFM | Caffe Deep Learning Framework_第3张图片
data layer

MNIST

官网上有简单介绍一个最小的识别手写体阿拉伯数字的网络。运行这个网络也很简单。

cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh

而在sh中的命令是

./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

还可以写出

./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt --snapshot=data/mnist/train_iter_10000.caffemodel
./build/tools/caffe test --solver=examples/mnist/lenet_solver.prototxt --snapshot=data/mnist/train_iter_10000.caffemodel

嗯,其实我也觉得Caffe这个东西得结合一大波论文来看.....

所以这次我水水就好....下回讲源码→_→

你可能感兴趣的:(RTFM | Caffe Deep Learning Framework)