深度学习caffe数据结构(一)—— 数据结构概述
caffe框架中,数据结构主要包括:Blob、Layer、Net、Solver。caffe的所有数据结构都在caffe根目录下的src/caffe/proto/caffe.proto文件中进行了描述。
首先,Blob是caffe中基本的数据结构,如果把caffe比作一栋大楼,那么Blob就是每一块砖。通过Blob这些砖构建成一层一层的楼层Layer,每一层合在一起就构成了大楼Net。prototxt用来描述网络和求解器,它可以看做是大楼的图纸,而Solver则可以看做是大楼的建筑工艺。
1、Blob
Blob是caffe的基本数据结构,它在内存中表示4维数组,维度由高到低为(num、channels、height、width)。这四个维度可以这样理解,它们用来描述一组图像,num可以理解为图像的个数,channels可以理解为颜色通道,比如RGB的每个通道,height和width则可以理解为图像的高和宽。Blob存储了包括神经元的激活值、参数、以及相应的梯度。在进行网络计算时,每层的输入输出都是需要通过Blob对象缓冲。
2、Layer
代表神经网络的层,由各种各样的层来构成整个网络。一般一个图像或样本会从数据层中读进来,然后一层一层的往后传。所以每个Layer至少有一个输入Blob和一个输出Blob,部分Layer带有权值和偏置项,有两个运算方向:前向传播和反向传播,其中前向传播计算会对输入Blob进行某种处理(有权值和偏置项的Layer会利用这些对输入进行处理),得到输出Blob;而反向传播计算则对输出Blob的diff进行某种处理,得到输入Blob的diff(有权值和偏置项的Layer会计算权值Blob、偏置项Blob的diff)。
3、Net
Net在caffe中代表一个完整的CNN模型,它包含若干Layer实例。它相当于一张图纸,在caffe中通过.prototxt文件进行描述。通过对.prototxt文件的研究,发现Net就是若干Layer的集合体。
4、Slover
Solver是按solver.prototxt的参数定义对Net进行训练,首先会初始化一个TrainNet和一个TestNet,然后其中的Step函数会对网络不断进行迭代,主要就是两个步骤反复迭代:(1)不断利用ComputeUpdateValue计算迭代相关参数。(2)调用Net的Update函数对整个网络进行更新。迭代中的训练日志中的大部分输出也是在这里输出的。
本文只对caffe的数据结构进行简单介绍,在接下来的文章中,我们将会对caffe数据结构进行代码级的详细介绍,逐层揭开caffe的神秘面纱。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)