sovler的主要作用就是交替调用前向传导和反向传导(forward& backward)来更新神经网络的连接权值,从而达到最小化loss,实际上就是迭代优化算法中的参数。
sovler参数:
base_lr
这个参数代表的是此网络最开始的学习速率(BeginningLearning rate),一般是个浮点数,根据机器学习中的知识,lr过大会导致不收敛,过小会导致收敛过慢,所以这个参数设置也很重要。
lr_policy
这个参数代表的是learningrate应该遵守什么样的变化规则,这个参数对应的是字符串,选项及说明如下:
-
“step”-需要设置一个stepsize参数,返回base_lr* gamma ^ ( floor ( iter / stepsize ) ),iter为当前迭代次数
-
“multistep”-和step相近,但是需要stepvalue参数,step是均匀等间隔变化,而multistep是根据stepvalue的值进行变化
-
“fixed”-保持base_lr不变
-
“exp”-返回base_lr* gamma ^ iter, iter为当前迭代次数
-
“poly”-学习率进行多项式误差衰减,返回base_lr( 1 - iter / max_iter ) ^ ( power )
-
“sigmoid”-学习率进行sigmod函数衰减,返回base_lr( 1/ 1+exp( -gamma * ( iter - stepsize ) ) )
-
“inv”逐渐下降inv:returnbase_lr*(1+gamma*iter)^(-power)
gamma
这个参数就是和learningrate相关的,lr_policy中包含此参数的话,需要进行设置,一般是一个实数。
stepsize
Thisparameter indicates how often (at some iteration count) that weshould move onto the next “step” of training. This value is apositive integer.
stepvalue
Thisparameter indicates one of potentially many iteration counts that weshould move onto the next “step” of training. This value is apositive integer. There are often more than one of these parameterspresent, each one indicated the next step iteration.
max_iter
最大迭代次数,这个数值告诉网络何时停止训练,太小会达不到收敛,太大会导致震荡,为正整数。
momentum
上一次梯度更新的权重,realfraction
weight_decay
权重衰减项,用于防止过拟合。
solver_mode
选择CPU训练或者GPU训练。
snapshot
训练快照,确定多久保存一次model和solverstate,positiveinteger。
snapshot_prefix
snapshot的前缀,就是model和solverstate的命名前缀,也代表路径。
net
pathto prototxt (train and val)
test_iter
每次test_interval的test的迭代次数,假设测试样本总数为10000张图片,一次性执行全部的话效率很低,所以将测试数据分为几个批次进行测试,每个批次的数量就是batch_size。如果batch_size=100,那么需要迭代100次才能将10000个数据全部执行完,所以test_iter设置为100。
test_interval
测试间隔,每训练多少次进行一次测试。
display
间隔多久对结果进行输出
iter_size
这个参数乘上train.prototxt中的batchsize是你实际使用的batchsize。 相当于读取batchsize* itersize个图像才做一下gradientdecent。 这个参数可以规避由于gpu内存不足而导致的batchsize的限制因为你可以用多个iteration做到很大的batch即使单次batch有限。
average_loss
取多次foward的loss作平均,进行显示输出。