從零開始,一步一步學習caffe的使用,期間貫穿深度學習和調參的相關知識!
solver配置說明
通過前面的講解我們瞭解了不同的層,作爲我們設計深度神經網絡的積木,梳理了caffe中給定的損失函數(當然我們也可以針對自己的問題設計),並進一步對優化算法進行了細緻的總結,接下來我們將caffe中需要配置的solver.prototxt
中涉及到的參數進行詳細剖析。
我們首先看一看lenet
中定義的solver
配置文件。
net: "examples/mnist/lenet_train_test.prototxt" #網絡位置
test_iter: 100 #設置測試迭代次數
test_interval: 500 #測試間隔。也就是每訓練500次,才進行一次測試。
base_lr: 0.01 #用於設置基礎學習率
momentum: 0.9 #動量大小
type: SGD #SGD優化算法
weight_decay: 0.0005 # 權重衰減項(正則化項),防止過擬合的一個參數λ
lr_policy: "inv" #學習率調整策略
gamma: 0.0001
power: 0.75
display: 100
max_iter: 20000 # 最大迭代次數。這個數設置太小,會導致沒有收斂,精確度很低。設置太大,會導致震盪,浪費時間。
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
solver_mode: CPU
設置網絡定義文件位置
net: "examples/mnist/lenet_train_test.prototxt"
設置網絡定義文件位置,也可以分別設定train
和test
如下所示:
train_net: "examples/hdf5_classification/logreg_auto_train.prototxt"
test_net: "examples/hdf5_classification/logreg_auto_test.prototxt"
設置測試迭代次數
test_iter: 100
這個要與test layer
中的batch_size
結合起來理解。mnist
數據中測試樣本總數爲10000,一次性執行全部數據效率很低,因此我們將測試數據分成幾個批次(batch_num
)來執行,每個批次的數量就是batch_size
。假設我們設置batch_size
爲100,則需要迭代100次才能將10000個數據全部執行完。因此test_iter
設置爲100。執行完一次全部數據,稱之爲一個epoch
。
總結
-
當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱爲一個
epoch
。一般情況下在迭代的過程中需要使用多次epoch
防止模型欠擬合。 -
在不能將數據一次性通過神經網絡的時候,就需要將數據集分成幾個
batch
(Number of batches,簡記爲batch_num
)。 -
一個
batch
中的樣本總數(Batch Size,簡記爲batch_size
) -
Iteration
是batch
需要完成一個epoch
的次數。記住:在一個epoch
中,batch_num
和Iteration
是相等的。比如對於一個有 2000 個訓練樣本的數據集。將 2000 個樣本分成4個大小爲 500 的batch_size
,那麼完成一個epoch
需要 4 個iteration
,對應的batch_num
也是4。
設置測試間隔
test_interval: 500
測試間隔。也就是每訓練500次,才進行一次測試。
設置優化算法類型
type: SGD
常見的優化算法包括:SGD、Adagrad、RMSProp、AdaDelta、Adam等。
設置動量大小
momentum :0.9
momentum指的是設置上面公式r的值,一般設置爲0.9
。
設置權重衰減係數
weight_decay: 0.0005
設置顯示週期
display: 100
每訓練100次,在屏幕上顯示一次。如果設置爲0,則不顯示。
設置最大迭代次數
max_iter: 20000
最大迭代次數,到達20000次就停止了。
設置快照
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
快照。將訓練出來的model
和solver
狀態進行保存,snapshot
用於設置訓練多少次後進行保存,默認爲0,不保存。snapshot_prefix
設置保存路徑。
還可以設置snapshot_diff
,是否保存梯度值,默認爲false
,不保存。
也可以設置snapshot_format
,保存的類型。有兩種選擇:HDF5
和BINARYPROTO
,默認爲BINARYPROTO
設置運行模式
solver_mode: CPU
設置運行模式。默認爲GPU,如果你沒有GPU,則需要改成CPU,否則會出錯。
設置學習率調整策略
base_lr: 0.01 # base_lr用於設置基礎學習率
lr_policy: "inv" # 學習率調整策略
gamma: 0.0001
power: 0.75
學習率調整的策略還包括