一、深度学习网络简介
深度学习网络(Net)是一个组合模型,它是由相互连接的层(Layers)组合而成。Caffe就是一种组建深度学习网络的工具,它按照一定的策略,一层一层的搭建出自己的模型。Caffe将所有的信息数据定义为Blobs,从而进行便利的操作和通讯。Blob是Caffe框架中一种标准的数组,一种统一的内存接口,它描述了信息是如何存储的,以及如何在层之间通讯的。
本文初步介绍Blob、Layer、Net的基本概念。在之后系列的博客中详细介绍它们具体的实现及相关参数说明。
二、Blob
Blobs封装了运行时的数据信息,提供了CPU和GPU的信息同步。从数学的角度看,Blob就是一个N维数组。它是Caffe中的数据操作基本单位。对于图片数据来说,Blob可以表示为(N*C*H*W)这样的一个4D数组。其中N表示图片的数量,C表示图片的通道数,H和W分别表示图片的高度和宽度。Blob也可以表示非图片数据。
在模型中设定的参数,也是用Blob来表示和运算的,它的维度会根据参数的类型不同而不同。比如:在一个卷积层中,输入一张3通道图片,有96个卷积核,每个核大小为11*11,因此这个Blob是 96*3*11*11。而在一个全连接层中,假设输入1024个通道图片,输出1000个数据,则Blob为1000*1024.
三、Layer
层是网络模型的组成要素和计算的基本单位,层的类型比较多,如Data、Convolution、Pooling、ReLu、Softmax-loss、Accuracy等。一个层的定义大致如下图:
从 bottom 进行数据的输入,计算后,通过 top 进行输出。图中的黄色多边形表示输入输出的数据,蓝色矩形表示层。
每一种类型的层都定义了三种关键的计算:setup,forward 和 backward。setup :层的建立和初始化,以及在整个模型中的连接初始化;forward :从 bottom 得到输入数据,进行计算,并将计算结果送到 top,进行输出; backward :从层的输出端 top 得到数据的梯度,计算当前的梯度,并将计算结果送到 bottom,向前传递。
四、Net
如同积木一般,一个Net 由多个 Layer 组合而成。现以一个简单的2层神经网络的模型(若加上 Loss 层就变成三层)为例。拓扑结构如图示:
第一层:name 为 mnist, type为Data,没有输入(Bottom),只有两个输出(Top),一个为data,一个为 label
第二层:name 为 ip, type 为 InnerProduct,输入数据 data ,输出数据 ip
第三层:name 为 loss,type 为 SoftmaxWithLoss,有两个输入,一个为 ip,一个为 label,有一个输出 loss(未画出)
则对应配置文件 prototxt :第一行模型取名为ModelName,然后是三个Layer的定义,参数都比较简单,只列出必须参数,具体参数将在后续的文章介绍。
name:"ModelName"
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"
}