深度网络(net)是一个组合模型,它由许多相互链接的层(layers)组合而成。Caffe就是组建深度网络的这样一种工具,它按照必定的策略,一层一层的搭建出本身的模型。它将全部的信息数据定义为blobs,从而进行便利的操做和通信。Blob是caffe框架中一种标准的数组,一种统一的内存接口,它详细描述了信息是如何存储的,以及如何在层之间通信的。数组
一、blob网络
Blobs封装了运行时的数据信息,提供了CPU和GPU的同步。从数学上来讲, Blob就是一个N维数组。它是caffe中的数据操做基本单位,就像matlab中以矩阵为基本操做对象同样。只是矩阵是二维的,而Blob是N维的。N能够是2,3,4等等。对于图片数据来讲,Blob能够表示为(N*C*H*W)这样一个4D数组。其中N表示图片的数量,C表示图片的通道数,H和W分别表示图片的高度和宽度。固然,除了图片数据,Blob也能够用于非图片数据。好比传统的多层感知机,就是比较简单的全链接网络,用2D的Blob,调用innerProduct层来计算就能够了。框架
在模型中设定的参数,也是用Blob来表示和运算。它的维度会根据参数的类型不一样而不一样。好比:在一个卷积层中,输入一张3通道图片,有96个卷积核,每一个核大小为11*11,所以这个Blob是96*3*11*11. 而在一个全链接层中,假设输入1024通道图片,输出1000个数据,则Blob为1000*1024工具
二、layerspa
层是网络模型的组成要素和计算的基本单位。层的类型比较多,如Data,Convolution,Pooling,ReLU,Softmax-loss,Accuracy等,一个层的定义大至以下图:code
从bottom进行数据的输入 ,计算后,经过top进行输出。图中的黄色多边形表示输入输出的数据,蓝色矩形表示层。对象
每一种类型的层都定义了三种关键的计算:setup,forward and backwordblog
setup: 层的创建和初始化,以及在整个模型中的链接初始化。接口
forward: 从bottom获得输入数据,进行计算,并将计算结果送到top,进行输出。图片
backward: 从层的输出端top获得数据的梯度,计算当前层的梯度,并将计算结果送到bottom,向前传递。
三、Net
就像搭积木同样,一个net由多个layer组合而成。
name: "LogReg" layer { name: "mnist" type: "Data" top: "data" top: "label" data_param { source: "input_leveldb" batch_size: 64 } } layer { name: "ip" type: "InnerProduct" bottom: "data" top: "ip" inner_product_param { num_output: 2 } } layer { name: "loss" type: "SoftmaxWithLoss" bottom: "ip" bottom: "label" top: "loss" }
第一行将这个模型取名为LogReg, 而后是三个layer的定义,参数都比较简单,只列出必须的参数。具体的参数定义可参见本系列的前几篇文章。