Caffeのsolverの設定
Caffeで学習する際のsolverの設定は[modelName]_solver.prototxtみたいな名前のファイルを作り、そこに書く。
例:caffe/lenet_solver.prototxt at master · BVLC/caffe · GitHub
以下で設定できるパラメータについて説明する。
全般
- net: "lenet_train_test.prototxt"
学習時に使うネットワークが書かれたファイル名
- solver_mode: CPU or GPU
学習の際にCPUを使うかGPUを使うか
更新の回数関連
- test_iter: 100
テストの際に、何回forward処理を行うか。
test_iter(solver) * batch_size(TEST用data Layer)の数だけのデータに対してテストが行えるので、テスト用データ数/batch_sizeに設定するとよい
- test_interval: 500
何回のパラメータの更新ごとにテストを実行するか
- display: 100
何回の更新ごとに学習データに対する結果を表示するか
- max_iter: 10000
パラメータの更新を何回行うか
- snapshot: 5000
学習したパラメータを何回ごとに保存するか。
- snapshot_prefix: "examples/mnist/lenet"
学習したパラメータを保存する際のファイルの名前の
最適化手法関連
Caffe | Solver / Model Optimizationが参考になる。
- type: "SGD" or "Adam" etc
最適化のアルゴリズムの種類
- base_lr: 0.01
学習率(のベースの値)実際の学習率は下ででてくるlr_policyに依存する。
- momentum: 0.9
上に挙げたサイトのμのこと。typeが"SGD"でも存在する。
- weight_decay: 0.0005
上に挙げたサイトのλのこと。過学習を防ぐために使う。
学習データが十分に多く、パラメータが少ない時(過学習が起こりにくい)は小さめに、パラメータが多く、学習データが少ない時(過学習が起こりやすい)は大きめにする。
machine learning - What is `weight_decay` meta parameter in Caffe? - Stack Overflow
学習率の更新関連
- lr_policy: "fixed" or "inv" etc
fixed: 常にbase_lrを使う
step: base_lr * gamma ^ (floor(iter / step))。stepsizeごとにbase_lrをgamma倍する
exp: base_lr * gamma ^ iter。"step"の連続版(つまり、毎ステップlrを変える)
multistep: stepと基本は同じだが、一定のstepごとに学習率を変えるのではなくて、stepvalueで決められた値ごとに変える。
inv: base_lr * (1 + gamma * iter) ^ (- power). べき減衰
poly: base_lr * (1 - iter/max_iter) ^ (power), 名前のとおりべきで、max_iterでゼロになる
sigmoid: base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
- gamma: 0.0001
- power: 0.75
lr_policyごとに必要なパラメータを設定する
neural network - What is `lr_policy` in Caffe? - Stack Overflow
Solver Prototxt · BVLC/caffe Wiki · GitHub