Caffe的solver參數(shù)介紹

文章作者:Tyan
博客:noahsnail.com ?|? CSDN ?|? 簡(jiǎn)書

1. Parameters

solver.prototxt文件是用來告訴caffe如何訓(xùn)練網(wǎng)絡(luò)的。solver.prototxt的各個(gè)參數(shù)的解釋如下:

  • base_lr
    這個(gè)參數(shù)是用來表示網(wǎng)絡(luò)的初始學(xué)習(xí)率的。這個(gè)值是一個(gè)浮點(diǎn)型實(shí)數(shù)。
  • lr_policy
    這個(gè)參數(shù)是用來表示學(xué)習(xí)率隨著時(shí)間是如何變化的。值是字符串,需要加""。學(xué)習(xí)率變化的可選參數(shù)有:
    "step"——需要設(shè)置stepsize。根據(jù)gamma參數(shù)和stepsize參數(shù)來降低學(xué)習(xí)率,base_lr * gamma ^ (floor(iter / stepsize))。iter是當(dāng)前迭代次數(shù)。學(xué)習(xí)率每迭代stepsize次變化一次。
    "multistep"——與step類似,需要設(shè)置stepvalue,學(xué)習(xí)率根據(jù)stepvalue進(jìn)行變化。
    "fixed"——學(xué)習(xí)率base_lr保持不變。
    "inv"——學(xué)習(xí)率變化公式為base_lr * (1 + gamma * iter) ^ (- power)
    "exp"——學(xué)習(xí)率變化公式為base_lr * gamma ^ iter}
    "poly"——學(xué)習(xí)率以多項(xiàng)式形式衰減,到最大迭代次數(shù)時(shí)降為0。學(xué)習(xí)率變化公式為base_lr * (1 - iter/max_iter) ^ (power)
    "sigmoid"——學(xué)習(xí)率以S型曲線形式衰減,學(xué)習(xí)率變化公式為base_lr * (1 / (1 + exp(-gamma * (iter - stepsize))))。
  • gamma
    這個(gè)參數(shù)表示學(xué)習(xí)率每次的變化程度,值為實(shí)數(shù)。
  • stepsize
    這個(gè)參數(shù)表示什么時(shí)候應(yīng)該進(jìn)行訓(xùn)練的下一過程,值為正整數(shù)。主要用在lr_policystep的情況。
  • stepvalue
    這個(gè)參數(shù)表示什么時(shí)候應(yīng)該進(jìn)行訓(xùn)練的下一過程,值為正整數(shù)。主要用在lr_policymultistep的情況。
  • max_iter
    這個(gè)參數(shù)表示訓(xùn)練神經(jīng)網(wǎng)絡(luò)迭代的最大次數(shù),值為正整數(shù)。
  • momentum
    這個(gè)參數(shù)表示在新的計(jì)算中要保留的前面的權(quán)重?cái)?shù)量,值為真分?jǐn)?shù),通常設(shè)為0.9。
  • weight_decay
    這個(gè)參數(shù)表示對(duì)較大權(quán)重的懲罰(正則化)因子。值為真分?jǐn)?shù)。
    This parameter indicates the factor of (regularization) penalization of large weights. This value is a often a real fraction.
  • solver_mode
    這個(gè)參數(shù)用來表示求解神經(jīng)網(wǎng)絡(luò)的模式——值為CPU or GPU。
  • snapshot
    這個(gè)參數(shù)用來表示每迭代多少次就應(yīng)該保存snapshot的modelsolverstate,值為正整數(shù)。
  • snapshot_prefix:
    這個(gè)參數(shù)用來表示保存snapshot時(shí)modelsolverstate的前綴,值為帶引號(hào)的字符串。
  • net:
    這個(gè)參數(shù)表示訓(xùn)練網(wǎng)絡(luò)所在的位置,值為帶引號(hào)的字符串。
  • test_iter
    這個(gè)參數(shù)表示
    這個(gè)參數(shù)表示每個(gè)test_interval進(jìn)行多少次test迭代,值為正整數(shù)。
  • test_interval
    這個(gè)參數(shù)表示什么時(shí)候進(jìn)行數(shù)據(jù)的測(cè)試,值為正整數(shù)。
  • display
    這個(gè)參數(shù)用來表示什么時(shí)候?qū)⑤敵鼋Y(jié)果打印到屏幕上,值為正整數(shù),表示迭代次數(shù)。
  • type
    這個(gè)參數(shù)表示訓(xùn)練神經(jīng)網(wǎng)絡(luò)采用的反向傳播算法,值為帶引號(hào)的字符串??蛇x的值有:
    Stochastic Gradient Descent "SGD"——隨機(jī)梯度下降,默認(rèn)值。
    AdaDelta "AdaDelta"——一種”魯棒的學(xué)習(xí)率方法“,是基于梯度的優(yōu)化方法。
    Adaptive Gradient "AdaGrad"——自適應(yīng)梯度方法。
    Adam "Adam"——一種基于梯度的優(yōu)化方法。
    Nesterov’s Accelerated Gradient "Nesterov"——Nesterov的加速梯度法,作為凸優(yōu)化中最理想的方法,其收斂速度非常快。
    RMSprop "RMSProp"——一種基于梯度的優(yōu)化方法。

2. Demo

  • lr_policy
# lr_policy為multisetp
base_lr: 0.01
momentum: 0.9
lr_policy: "multistep"
gamma: 0.9
stepvalue: 1000
stepvalue: 2000
stepvalue: 3000
stepvalue: 4000
stepvalue: 5000

# lr_policy為step
base_lr: 0.01
momentum: 0.9
lr_policy: "step"
gamma: 0.9
stepsize: 1000
  • solver.prototxt
net: "models/bvlc_alexnet/train_val.prototxt"
# 每次測(cè)試時(shí)進(jìn)行1000次迭代
test_iter: 1000
# 每進(jìn)行1000次訓(xùn)練執(zhí)行一次測(cè)試
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/bvlc_alexnet/caffe_alexnet_train"
solver_mode: GPU

參考資料

  1. http://www.cnblogs.com/denny402/p/5074049.html
  2. https://github.com/BVLC/caffe/wiki/Solver-Prototxt
  3. http://stackoverflow.com/questions/30033096/what-is-lr-policy-in-caffe
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容