# The train/test net protocol buffer definition
net:"examples/mnist/lenet_train_test.prototxt" //网络协议具体定义
# test_iter specifies how many forward passes the testshould carry out.
# In the case of MNIST, we have test batch size 100and 100 test iterations,
//batch_size就是你的网络一次正向传播处理的输入样本数量,
//test_iter就是当在TEST阶段时,要进行多少次迭代,即进行test_iter次正向传播
//当在TEST阶段时,会进行test_iter次迭代,每次迭代都是batch_size个输入样本
//所以总共会处理test_iter * batch_size个样本。
//在测试时,应该保证batch_size*test_iter>=测试图片数,
//比如:2w测试图片,迭代次数为50时,batch_size等于1就意味着只处理了50张图片
//比如,test_iter为 100,batch_size =100,则100张图一批,训练100次,
//这样一共覆盖了10000张图
# covering the full 10,000 testing images.
test_iter: 100 //test迭代次数
# Carry out testing every 500 trainingiterations.
//训练迭代500次,测试一次 ,即每迭代500次测试一次,输出一次精度和LOSS
test_interval: 500 //训练迭代500次,测试一次
# The base learning rate, momentum and the weightdecay of the network. //网络参数:学习率,动量,权重的衰减
base_lr: 0.01
//随机梯度下降(SGD)是按batch来进行更新,通常来说下降速度比较快,就容易震荡。
//引入momentum,就是在更新下降方向的时候不仅要考虑到当前的方向,也要考虑到上一次的更新方向,两者加权,
//某些情况下可以避免震荡。momentum(冲量),就是上一次更新方向所占的权值。
//一个小的trick是,当刚开始训练的时候,把冲量设小,或者直接就置为0,然后慢慢增大冲量,有时候效果比较好。
momentum: 0.9
//神经网络权值越大往往overfitting的程度越高,为了避免出现overfitting,会给误差函数添加一个惩罚项
//常用的惩罚项是所有权重的平方乘以一个衰减常量之和。
//右边项即用来惩罚大权值。权值衰减惩罚项使得权值收敛到较小的绝对值,而惩罚大的权值。从而避免overfitting的出现。
weight_decay: 0.0005
# The learning rate policy //学习策略:有固定学习率和每步递减学习率
只要是梯度下降法来求解优化,都会有一个学习率,也叫步长。base_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率进行调整。怎么样进行调整,就是调整的策略,由lr_policy来设置。
lr_policy可以设置为下面这些值,相应的学习率的计算为:
·
· -fixed: 保持base_lr不变.
· -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是均匀等间隔变化,而multistep则是根据 stepvalue值变化
· -poly: 学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
· -sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 +exp(-gamma * (iter - stepsize))))
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations //每迭代100次显示一次
display: 100
# The maximum number of iterations //最大迭代次数
max_iter: 10000
# snapshot intermediate results
// 每5000次迭代存储一次数据,路径前缀是<</span>spanstyle="font-family: Arial, Helvetica,sans-serif;">examples/mnist/lenet</</span>span>
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
solver_mode: CPU //设置模式CPU或者GPU