模型调参:概述【weight_decay、base_lr、lr_policy、clip_norm】【超参数调优方式:网格搜索(尝试所有可能组合)、随机搜索(在所有可能组合中随机选取参数组合)】

以前刚入门的时候调参只是从hidden_size,hidden_num,batch_size,lr,embed_size开始调,但是后来才逐渐明白

  • embed_size一般是设置完后不用再调的,比如设定为128后,就不要调了,因为embed_size只是表示将词嵌入到几维的空间而已。
  • lr也一般都有固定值,比如选取优化器Adam的时候,lr=0.001,选取优化器SGD的时候,lr=0.01,
  • hidden_num一般设置为1的时候就行,2层以上在简单的网络上只会到的适得其反的效果。

所以剩下该调的也只有hidden_size,batch_size,weight_decay,clip_norm,lr_decay了。

train_net:"train.prototxt"
test_net:"test.prototxt"
test_iter: 299  
test_interval: 200
base_lr: 0.01  
display: 20  
max_iter: 6720  
lr_policy: "step"  
gamma: 0.1  
power: 0.75
momentum: 0.9  
weight_decay: 0.0001  
snapshot: 224  
snapshot_prefix: "snapshot"  
solver_mode: GPU  
device_id:0
debug_info:false
snapshot_after_train:true
test_initialization:false
average_loss:10
iter_size:1
stepsize:2000
type: SGD  
eval_type:"detection"
ap_version:"11point"
show_per_class_result:true

我们就一个个来解析一下。

  • train_net:训练的模型文件的路径。
  • test_net:测试的模型文件的路径。
  • test_iter:网络的迭代测试次数。网络一次测试batch_size张图片,因为为了可以将验证集中所有图片都测试一次,这个参数乘以batch_size应该等于验证集中的图片数。
  • test_interval:网络迭代多少次进行一次测试。一次迭代即是将一个batch_size的图片进行训练。这个文件中test_interval设为了200,也就是说每隔200次对网络的准确率进行一次验证。一般来讲,我们是需要将训练集合中的所有图片都跑一次再对准确率进行测试,也就是test_interval乘以batch_size不小于训练集中的图片总数。
  • base_lr:表示网络的基础学习率,学习率过高可能会无法梯度下降,loss保持不变,也可能loss不能收敛。而学习率过低会使网络收敛速度缓慢,也可能导致梯度消失。一般初始学习率设为0.01。
  • display:每隔多少次显示一次。也就是在屏幕上打印一次loss和准确率。
  • max_iter:网络的最大迭代次数。训练集中的图片需要训练多次,所以这个参数一般比较大。
  • 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))))
  • gamma:因为这里学习率衰减策略为step,所以需要设置gamma和power两个参数。
  • power: 同上。
  • momentum:上一次梯度更新的权重,一般取值在0.5–0.99之间。通常设为0.9,momentum可以让使用SGD的深度学习方法更加稳定以及快速。
  • weight_decay: 权重衰减项,防止过拟合的一个参数。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。
  • sanpshot:每多少次保存一次学习的结果,在caffe框架下就是caffemodel。
  • snapshot_prefix:模型保存的路径。
  • solver_model:设置使用GPU还是CPU进行学习训练。
  • device_id:GPU序列号,默认从0开始。
  • debug_info:是否显示debug信息。
  • snapshot_after_train:是否在训练结束后保存一个snapshot文件。便于以后可以在此基础上继续训练。
  • test_initialization:确保内存可以用并输出loss的初始值。
  • average_loss:显示loss为之前average_loss个loss的平均值。
  • iter_size:每处理ietr_size*batch_size张图片后进行一次梯度计算。
  • stepsize:每多少次学习率递减。这里是迭代2000次学习率递减。
  • type:优化算法的选择,一共有六种可选:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默认为SGD。原理建议看看斯坦福大学的CS231N视频课程。
  • eval_type:评价类型。
  • ap_version:计算平均准确率(map值)的方法,有11point、MaxIntegral、Integral三种,l1point是SSD在VOC2007中计算AP的方法,使用了简单的均值计算。MaxInterral是SSD在VOC2012中使用的最大值积分法。Integral是普通积分方法。
    show_per_class_result:在终端输出每一类的AP(每一类的检测精度)信息。

二、TensorFlow2.0内置的超参数调优工具:HParams

模型调参:概述【weight_decay、base_lr、lr_policy、clip_norm】【超参数调优方式:网格搜索(尝试所有可能组合)、随机搜索(在所有可能组合中随机选取参数组合)】_第1张图片
模型调参:概述【weight_decay、base_lr、lr_policy、clip_norm】【超参数调优方式:网格搜索(尝试所有可能组合)、随机搜索(在所有可能组合中随机选取参数组合)】_第2张图片




参考资料:
weight_decay一般设置为多少_卷积神经网络学习路线(五)| 卷积神经网络参数设置,提高泛化能力?…
这些神经网络调参细节,你都了解了吗
过拟合解决方法之L2正则化和Dropout
详谈P(查准率),R(查全率),F1值

你可能感兴趣的:(AI/模型调优,深度学习,神经网络,调参)