【Blob】
Blob是caffe框架中一种标准的数组,一种统一的内存接口,它详细描述了信息是如何存储的,以及在如何在层之间通讯。
Blobs封装了运行时的数据信息,用于存储数据或者权值(data)和权值增量(diff)
每层(layer)的输入(bottom)和输出(top)都需要对Blob对象进行缓冲
Blob可以自助同步CPU和GPU上的数据
从数学上来说,Bolb就是一个N维数组,是caffe中的数据操作基本单位;对于图片来说,Blob可以表示为(N*C*H*W)的4维数组。其中N表示图片的数量,C表示图片的通道数,H和W分别表示图片的高度和宽度;对于CNN网络的feature-map来说,N表示一个batch中的样本数量,C为通道数(在 softmax-loss层之前实际就是分类数),H*W为feature-map的大小,通常为1
【layer】
层是网络模型的组成要素和计算的基本单位。
从bottom进行数据的输入,计算后,通过top进行输出。
每一种类型的层都定义了三种关键计算:setup,forward、backward
setup:层的建立和初始化,以及在整个模型中的连接初始化
forward:从bottom得到输入数据,进行计算,将计算结果送到top,进行输出
backward:从层的输出端top得到数据的梯度,计算当前的梯度,并将计算结果送到bottom,向前传递。
【Net】
Net代表一个完整的CNN模型,包含若干layer实例
Net对应的描述文件为*.prototxt
Net中既包含layer对象,又包含blob对象,其中blob对象用于存放每个layer输入/输出、中间结果;layer则根据net的描述,对指定的输入blob进行计算处理(卷积、池化、全连接、计算代价函数),然后将输出结果放到输出blob中
区分两种blob:1.权值blob:随着学习过程而更新,属于“模型” 2.layer的输入\输出 blob:随网络输入变换,属于“数据”
【Blob、layer、net三者的关系】
Blob提供了数据容器机制
layer通过不同策略使用该数据容器,实现多元化的计算处理过程,同时提供了各种基本的算法机制
net利用layer的这些机制,组合为完整的深度学习模型
【Solver】
solver是caffe的运算核心,协调着整个模型的运作。caffe程序必带的一个参数就是solver配置文件。运行代码一般为
%一般格式%
.\Build\x64\Release\caffe.exe train -solver=*_solver.prototxt
%举例%
.\Build\x64\Release\caffe.exe train -solver=examples\mnist\lenet_solver.prototxt
# The train/test net protocol buffer definition
# 训练\测试 网络配置定义
net: "examples/mnist/lenet_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
# test_iter 表明了测试的前向迭代次数。
# 就MNSIT而言,用于测试的一个批量含有100个样本,测试迭代100,这样就可以测试全部的10000张测试图片
test_iter: 100
# Carry out testing every 500 training iterations.
#每500次训练迭代后执行一次测试
test_interval: 500
# The base learning rate, momentum and the weight decay of the network.
#基础学习率、动量、网络权重的衰减
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
#学习率策略
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
#每100次迭代显示一次
display: 100
# The maximum number of iterations
#最大跌打次数
max_iter: 1000
# snapshot intermediate results
#中间快照结果
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
# solver mode: CPU or GPU
#求解器模式
solver_mode: CPU