solver这个文件主要存放模型训练所用到的一些超参数

  1. 训练模型位置
    train_net := 指定待训练模型结构文件,即train_val.prototxt
  2. 训练次数:
    batchsize:每迭代一次,网络训练图片的数量,例如:如果你的batchsize=256,则你的网络每迭代一次,训练256张图片;则,如果你的总图片张数为1280000张,则要想将你所有的图片通过网络训练一次,则需要1280000/256=5000次迭代。
    epoch:表示将所有图片在你的网络中训练一次所需要的迭代次数,如上面的例子:5000次;我们称之为 一epoch。所以如果你想要你的网络训练100epoch时,则你的总的迭代次数为max_iteration=5000*100=500000次;
    max_iteration:网络的最大迭代次数如上面的500000次;同理,如果max_iteration=450000,则该网络被训练450000/5000=90 epoch。
  3. 测试参数
    test_iter:表示测试的次数;比如,你的test阶段的batchsize=100,而你的测试数据为10000张图片,则你的测试次数为10000/100=100次;即,你的test_iter=100;
    test_interval:表示你的网络迭代多少次才进行一次测试,你可以设置为网络训练完一代,就进行一次测试,比如前面的一代为5000次迭代时,你就可以设置test_interval=5000;
    test_initialization := 指定是否进行初始测试,即模型未进行训练时的测试
  4. 学习率
    base_lr := 指定基本学习率
    lr_policy := 学习率变更策略
step: 如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter /              stepsize)),其中iter  表示当前的迭代次数
exp: 返回base_lr * gamma ^ iter, iter为当前迭代次数
inv:如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而mult-
step则是根据stepvalue值变化
poly: 学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
sigmoid:学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))```

gamma := 学习率变更策略需要用到的参数
power := 同上
stepsize := 学习率变更策略Step的变更步长(固定步长)
stepvalue := 学习率变更策略Multistep的变更步长(可变步长)
momentum := 动量,这是优化策略(Adam, SGD, … )用到的参数,表示上一次梯度更新的权重
momentum2 := 优化策略Adam用到的参数
weight_decay := 权重衰减率,用于防止过拟合
clip_gradients := 固定梯度范围

  1. 显示
    display := 每隔几次迭代显示一次结果
  2. 保存结果
    snapshot := 快照,每隔几次保存一次模型参数
    snapshot_prefix := 保存模型文件的前缀,可以是路径
  3. 其他
    type := solver优化策略,即SGD、Adam、AdaGRAD、RMSProp、NESTROVE、ADADELTA等
    solver_mode := 指定训练模式,即GPU/CPU
    debug_info := 指定是否打印调试信息,这里有对启用该功能的输出作介绍
    device_id := 指定设备号(使用GPU模式),默认为0