一个深度学习模型的参数包括三部分:


  • 可学习参数:


  1. 又称可训练参数、神经网络权系数、权重,其数值由模型初始化参数、误差方向传播过程控制,一般不可人工干预。
  2. 在内存中用Blob对象保持,必要时以二级制ProtoBuffer文件(*.caffemodel)形态序列化并存储于磁盘上,便于进一步微调(finetune, 又称精调)、共享(例如参数服务器Parameter Server,PS)、性能评估(benchmark)


  • 结构参数:


  1. 包括卷积层/全连接层/下采样层数目、卷积核数目、卷积核大小等描述网络结构的参数,一旦设定好,在网络训练阶段不能更改:训练阶段网络结构参数和预测阶段参数很可能不同。
  2. 使用ProtoBuffer文件格式(*.prototxt)描述,网络初始化时通过该描述文件构建Net对象、Layer对象形成有向无环图结构,在Layer与Layer之间、Net输入源和输出源均为持有数据和中间结果的Blob对象


  • 训练超参数:


  1. 用来控制网络训练收敛的参数,训练阶段可以自动或手动调节以获得更好的效果,预测阶段不需要该参数。
  2. 使用ProtoBuffer文本格式(*.prototxt)描述,训练阶段利用该描述文件构建求解器(Solver)对象,该对象按照一定规则在训练网络时自动调节这些超参数值。


1、prototxt表示


修改:examples/mnist/lenet_train_test.prototxt


修改:examples/mnist/lenet_lr_solver.prototxt



2、内存中的表示


solver.hpp中声明了SolverParameterparam,它是ProtoBuffer工具生成的结构体,用来解析lenet_lr_solver.prototxt


3、磁盘上的表示


  • Caffe使用ProtoBuffer二级制文件有最小文件尺寸,并由ProtoBuffer工具自动生成高效的序列化/反序列化接口(多语言支持, 包括C++、Java、Python),以及可读性好、兼容二进制文件的文本格式文件。
  • .caffemodel文件是在特定训练间隙保存的文件,包含当前网络各层的权值状态;
  • .solverstate是与.caffemodel一起产生的二级制文件,包含从上次停止点恢复训练模型所需的信息。


4、Caffe Model Zoo


由于规模更大、结构更加复杂的模型训练需要过硬的硬件计算能力和过硬的调参能力,所以可以使用前人已经训练好的模型。