caffe中的数据结构解析

    caffe中数据结构主要包括caffe::Net,caffe::Layer,caffe::Solver三个主要大类。下面就这三个主要的数据结构做一下总结。

    1,caffe:Net:这个数据结构用来表示整个网络,这个数据结构里包含了很多重要的变量。

  • vector< shared_ptr< Layer< Dtype > > > layers_变量存储的是每层layer结构体的指针。
  • vector< shared_ptr< Blob< Dtype > > > blobs_变量存放的是网络中层与层之间传递的数据,即每层的输入和输出。从这我们可以看出,每层的输入输出并不是存储在对应的层的结构体中的,而是统一存储在Net中。
  • vector< vector< Blob< Dtype > * > > bottom_vecs_变量存储的是每一层的输入的内存首地址,注意这只是存放的指针,真正的数据还是存放在blobs_中。
  • vector< vector< Blob< Dtype > * > > top_vecs_变量存储的是每一层的输出的内存的首地址,注意这也只是存放指针,真正的数据也是在blobs_中。
  • vector< shared_ptr< Blob< Dtype > > > params_存放是网络中每一层的参数。

    2,caffe::Layer:这个是存放网络中和每一层有关的数据。

  • vector< shared_ptr< Blob< Dtype > > > blobs_变量存储每层网络的训练参数,通常有blobs_[0]存储该层网络的weight,blobs_[1]存储该层网络的bias。不管是weight还是bias都是具有blob结构,关于blob结构的数据存储具体是什么样的,以后会有总结。
  • vector< bool > param_propagate_down_变量是网络另外一个重要变量,这个变量的作用是标记该层网络做不做反向传播。
  • ector< Dtype > loss_变量是存储每层网络的loss,但是除了loss layer外,基本上其他类型的层的loss都是0。

    基于caffe::Layer类衍生出的类有很多中,这里我们具体介绍几个重要的:

    (1)caffe::BaseConvolutionLayer:这个存储的是convlution层的所需要的参数

  • int bottom_dim_变量存储的是输入数据的宽度。
  • int top_dim_变量存储的是输出数据的宽度。
  • int num_是卷积层的batch size。
  • int out_spatial_dim_表示一张图片经过一个卷积核后的数据宽度。
  • int output_offset_这是一个私有成员。
  • int conv_out_channels_表示这层卷积层有多少个卷积核,这个变量是私有变量。

    (2)caffe::PoolingLayer:这个是pooling层的数据结构,存储和pooling相关的参数

  • int height_,int width_表示pooling层输入的图像的尺寸。
  • int pooled_height_,int pooled_width_表示pooling层输出的图像的尺寸。
  • int kernel_h_,int kernel_w_表示pooling的下采样的核的尺寸。
  • int channels_表示卷积核的数目。

    (3)caffe::InnerProductLayer:这个内积层,存储内积层有关的参数。内积就是对数据数据进行加权求和:output=input*weight+bias

  • int M_表示一个batch中的样本数目,即input矩阵的行数目。
  • int K_表示输入数据的宽度,即input矩阵的列数目和weight矩阵的行数目。
  • int N_表示输出数据的宽度,即weight矩阵的列数目和output矩阵的列数目。
  • Blob< Dtype > bias_multiplier_表示对bias进行scale的系数,通常为1,即表示不进行scale。

    (4)caffe::SoftmaxWithLossLayer:这是代价函数层,在经过两层InnerProductLayer之后,输出的数据宽度就是10,这10个数据每一个数据代表输入数据属于某一个标签的分数。在经过caffe:SoftmaxWithLossLayer之后,输出是一个batch中的所有样本的代价函数cost的平均值。

  • vector< Blob< Dtype > * > softmax_bottom_vec_表示该层的输入,数据宽度为10。
  • vector< Blob< Dtype > * > softmax_top_vec_表示该层的输出,数据宽度为10。
  • Blob< Dtype > prob_表示该层输出的概率值(输入相对于各个标签的概率值)。
  • int outer_num_对应一个batch中的样本数量。
  • nt inner_num_

    (5)caffe::SoftmaxLayer:这一层是softmax函数层,作用就是把InnerProductLayer的输出转换成概率。

  • int outer_num_对应一个batch中的样本数量。

    上面就是caffe中layer的主要数据结构,其他数据结构以后回补充。

你可能感兴趣的:(Deep,Learning)