由低到高依次把 网络中的数据抽象成Blob, 各层网络抽象成 Layer ,整个网络抽象成Net,网络模型的求解方法 抽象成 Solver。
- Blob 主要用来表示网络中的数据,包括训练数据,网络各层自身的参数,网络之间传递的数据都是通过 Blob 来实现的,同时 Blob 数据也支持在 CPU 与 GPU 上存储,能够在两者之间做同步。
- Layer 是对神经网络中各种层的一个抽象,包括我们熟知的卷积层和下采样层,还有全连接层和各种激活函数层等等。同时每种 Layer 都实现了前向传播和反向传播,并通过 Blob 来传递数据。
- Net 是对整个网络的表示,由各种 Layer 前后连接组合而成,也是我们所构建的网络模型。
- Solver 定义了针对 Net 网络模型的求解方法,记录网络的训练过程,保存网络模型参数,中断并恢复网络的训练过程。自定义 Solver 能够实现不同的网络求解方式。
命令行(Command Line):
命令行简单高效,配合一下配置文件就可以向机器完美表达人类的意图。
训练: solver.prototxt 是网络求解文件,由它定义 一些网络训练参数和网络结构文件路径等。
# 训练示例 (参数: 求解文件)
# caffe train -solver examples/mnist/lenet_solver.prototxt
./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt
# 从训练一半的模型快照中恢复训练 (参数:求解文件 快照)
caffe train -solver examples/mnist/lenet_solver.prototxt -snapshot examples/mnist/lenet_iter_5000.solversta
# 由其它训练好的模型 fine-tune (参数:求解文件 其它训练好的模型参数)
caffe train -solver examples/finetuning_on_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
测试
# score the learned LeNet model on the validation set as defined in the
# model architeture lenet_train_test.prototxt
# 测试 (参数: 求解文件 训练好的模型参数 )
caffe test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -gpu 0 -iterations 100
注意:网络结构必须定义输出精度或者输出损失作为结果。
其中训练网络和测试网络的定义有两种方式:
方式一: 在solver.prototxt 文件中分别定义训练网络和测试网络
train_net: "examples/hdf5_classification/nonlinear_auto_train.prototxt"
test_net: "examples/hdf5_classification/nonlinear_auto_test.prototxt"
方式二: 在solver.prototxt 文件只定义一个网络结构
net: "examples/mnist/lenet_train_test.prototxt"
但是在改网络结构中 通过 include phase 判断该层是在测试时加载,还是训练时加载。
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
data_param {
source: "examples/imagenet/ilsvrc12_train_lmdb"
batch_size: 256
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
top: "label"
include {
phase: TEST
}
data_param {
source: "examples/imagenet/ilsvrc12_val_lmdb"
batch_size: 50
backend: LMDB
}
}