深度网络是一个组合模型,它由许多相互连接的层组合而成,而caffe就是组建深度网络的一种工具,通过一定的策略一层一层地搭建出自己的网络模型。
Caffe的模型是端到端的机器学习引擎。其由层,网络与Solver三个模块组成。
Caffe有命令行,Python和MATLAB三种接口,以C++库为核心,并在开发中使用模块化接口,而不是每次都调用其定义的编译。
Caffe是基于blobs存储和交换数据的,blobs提供统一的内存接口来存储某种类型的数据,例如批量图像数据,模型参数以及用来进行优化的导数。
blob常规的维数为图像数量N*通道数K*图像高度H*图像宽度W,其存储的方式是按行为主,所以一个4为blob,坐标为(n,k,h,w)的值其物理位置为((n*K+k)*H+h)*W+w。
在图像的应用实例中,blobs均为4维,但对于非图像数据而言,blobs也可以是其他维度。对于全连接网络而言,使用2维blobs(N,D)即可,其中N为输入的维度,D为输出的维度。
Layer承担了网络的两个核心操作:forward pass(接收输入并计算输出);backward pass(接收关于输出的梯度,计算相对于参数和输入的梯度并反响传播给在它前卖弄的层)。由于Caffe网络的组合性和其代码的模块化,自定义layer是比较容易的。即三个方面:setup(初始化设置)、Foward(前向通道)和backward(反向通道),定义好这三个内容后便可以将layer纳入网络中。
Net由一系列层和它们之间的相互连接构成,用的是一种文本建模语言;Net::Init()进行模型初始化,其主要实现两个操作——创建blobs和layers以搭建整个网络DAG图(有向无环图);调用layers的SetUp()函数。初始化时也会另做一些记录,例如确认整个网络结构的正确性以及Net会打印其初始化日志到INFO信息中。Caffe中网络的构建与设备无关,当网络构建好之后,可通过设置Caffe::mode()函数中的Caffe::set_mode()来实现在CPU或GPU上运行。
网友评论