文章作者:Tyan
博客:noahsnail.com ?|? CSDN ?|? 簡(jiǎn)書(shū)
1. Parameters
solver.prototxt
文件是用來(lái)告訴caffe如何訓(xùn)練網(wǎng)絡(luò)的在塔。solver.prototxt
的各個(gè)參數(shù)的解釋如下:
- base_lr
這個(gè)參數(shù)是用來(lái)表示網(wǎng)絡(luò)的初始學(xué)習(xí)率的。這個(gè)值是一個(gè)浮點(diǎn)型實(shí)數(shù)猎贴。 - lr_policy
這個(gè)參數(shù)是用來(lái)表示學(xué)習(xí)率隨著時(shí)間是如何變化的宫屠。值是字符串黑低,需要加""
鳍侣。學(xué)習(xí)率變化的可選參數(shù)有:
"step"——需要設(shè)置stepsize
。根據(jù)gamma
參數(shù)和stepsize
參數(shù)來(lái)降低學(xué)習(xí)率荸型,base_lr * gamma ^ (floor(iter / stepsize))
盹靴。iter
是當(dāng)前迭代次數(shù)。學(xué)習(xí)率每迭代stepsize
次變化一次瑞妇。
"multistep"——與step
類(lèi)似稿静,需要設(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型曲線(xiàn)形式衰減,學(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)練的下一過(guò)程聚谁,值為正整數(shù)母剥。主要用在lr_policy
為step
的情況。 - stepvalue
這個(gè)參數(shù)表示什么時(shí)候應(yīng)該進(jìn)行訓(xùn)練的下一過(guò)程,值為正整數(shù)环疼。主要用在lr_policy
為multistep
的情況习霹。 - 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ù)用來(lái)表示求解神經(jīng)網(wǎng)絡(luò)的模式——值為CPU or GPU望门。 - snapshot
這個(gè)參數(shù)用來(lái)表示每迭代多少次就應(yīng)該保存snapshot的model
和solverstate
形娇,值為正整數(shù)。 - snapshot_prefix:
這個(gè)參數(shù)用來(lái)表示保存snapshot時(shí)model
和solverstate
的前綴筹误,值為帶引號(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ù)用來(lái)表示什么時(shí)候?qū)⑤敵鼋Y(jié)果打印到屏幕上屡立,值為正整數(shù)直晨,表示迭代次數(shù)。 - type
這個(gè)參數(shù)表示訓(xùn)練神經(jīng)網(wǎng)絡(luò)采用的反向傳播算法膨俐,值為帶引號(hào)的字符串勇皇。可選的值有:
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
參考資料