训练tips

weight_decay防止过拟合的参数,使用方式:

1 样本越多,该值越小

2 模型参数越多,该值越大

一般建议值:

weight_decay: 0.0005


lr_mult,decay_mult

关于偏置与参数使用不同的学习率与权重衰减项:

1 偏置的学习率一般为参数的两倍

比如一个卷积,有偏置的话,其学习率应该是

param { lr_mult: 1 }

  param { lr_mult: 2 } 

偏置设为2倍,能够加速收敛

对于偏置,其衰减项一般设置为0,还是对应上面的卷积:

param { lr_mult: 1

decay_mult:1 }

param { lr_mult: 2

decay_mult:0}

批处理,批处理中需要加上3个0,即批处理的参数是根据上一批的数据进行滑动平均来更新,而不是根据梯度来更新:

param { lr_mult: 0

decay_mult:0}

param { lr_mult: 0

decay_mult:0}

param { lr_mult: 0

decay_mult:0}


use_global_stats

在训练时要设置为false,代表需要批处理的均值方差要参考全局信息来更新

在测试时,要为true,代表不使用自己均值方差和全局的均值方差来得到批处理的均值和方差,而是使用全局均值方差,即训练好的均值方差

另一个参数:moving_average_fraction

代表参考训练时均值方差更新的速度,默认是0.999,参考值是0.9~0.999之间


eps:

防止批处理时除以0,默认值是1e-5


caffe 下与loss相关的一些说明:

1 train loss 不断下降,test loss 不断下降,说明网络正在学习

2 train loss 不断下降,test loss 趋于不变,说明网络过拟合

3 train loss 趋于不变,test loss 趋于不变,说明学习遇到瓶颈,需要减小学习率或者批处理大小

4 train loss 趋于不变,test loss 不断下降,说明数据集100%有问题

5 train loss 不断上升,test loss 不断上升(最终变为NaN),可能是网络结构设计不当,训练超参数设置不当,程序bug等某个问题引起

6 train loss 不断上下跳动,可能引起的原因:学习率过大,或者批处理大小太小


1. Parameters

solver.prototxt文件是用来告诉caffe如何训练网络的。solver.prototxt的各个参数的解释如下:

base_lr

这个参数是用来表示网络的初始学习率的。这个值是一个浮点型实数。

lr_policy

这个参数是用来表示学习率随着时间是如何变化的。值是字符串,需要加""。学习率变化的可选参数有:

“step”——需要设置stepsize。根据gamma参数和stepsize参数来降低学习率,base_lr * gamma ^ (floor(iter / stepsize))。iter是当前迭代次数。学习率每迭代stepsize次变化一次。

“multistep”——与step类似,需要设置stepvalue,学习率根据stepvalue进行变化。

“fixed”——学习率base_lr保持不变。

“inv”——学习率变化公式为base_lr * (1 + gamma * iter) ^ (- power)

“exp”——学习率变化公式为base_lr * gamma ^ iter}

“poly”——学习率以多项式形式衰减,到最大迭代次数时降为0。学习率变化公式为base_lr * (1 - iter/max_iter) ^ (power)。

“sigmoid”——学习率以S型曲线形式衰减,学习率变化公式为base_lr * (1 / (1 + exp(-gamma * (iter - stepsize))))。

gamma

这个参数表示学习率每次的变化程度,值为实数。

stepsize

这个参数表示什么时候应该进行训练的下一过程,值为正整数。主要用在lr_policy为step的情况。

stepvalue

这个参数表示什么时候应该进行训练的下一过程,值为正整数。主要用在lr_policy为multistep的情况。

max_iter

这个参数表示训练神经网络迭代的最大次数,值为正整数。

momentum

这个参数表示在新的计算中要保留的前面的权重数量,值为真分数,通常设为0.9。

weight_decay

这个参数表示对较大权重的惩罚(正则化)因子。值为真分数。

This parameter indicates the factor of (regularization) penalization of large weights. This value is a often a real fraction.

solver_mode

这个参数用来表示求解神经网络的模式——值为CPU or GPU。

snapshot

这个参数用来表示每迭代多少次就应该保存snapshot的model和solverstate,值为正整数。

snapshot_prefix:

这个参数用来表示保存snapshot时model和solverstate的前缀,值为带引号的字符串。

net:

这个参数表示训练网络所在的位置,值为带引号的字符串。

test_iter

这个参数表示

这个参数表示每个test_interval进行多少次test迭代,值为正整数。

test_interval

这个参数表示什么时候进行数据的测试,值为正整数。

display

这个参数用来表示什么时候将输出结果打印到屏幕上,值为正整数,表示迭代次数。

type

这个参数表示训练神经网络采用的反向传播算法,值为带引号的字符串。可选的值有:

Stochastic Gradient Descent “SGD”——随机梯度下降,默认值。

AdaDelta “AdaDelta”——一种”鲁棒的学习率方法“,是基于梯度的优化方法。

Adaptive Gradient “AdaGrad”——自适应梯度方法。

Adam “Adam”——一种基于梯度的优化方法。

Nesterov’s Accelerated Gradient “Nesterov”——Nesterov的加速梯度法,作为凸优化中最理想的方法,其收敛速度非常快。

RMSprop “RMSProp”——一种基于梯度的优化方法。

你可能感兴趣的:(训练tips)