本教程旨在督促自己從頭到尾重新學習一遍Caffe,主要參考Caffe主頁的教程和大牛們的博文,若有不妥之處,還望告知。

Caffe系列教程 - 閑漁的文章 - 知乎專欄

solver.prototxt

net: "models/bvlc_alexnet/train_val.prototxt"
test_iter: 1000 # 測試時,需要迭代的次數
test_interval: 1000 # 訓練,每迭代test_interval次就進行一次測試
base_lr: 0.01 # 開始的學習率
lr_policy: "step" # 學習率的drop是以gamma在每一次迭代中
gamma: 0.1
stepsize: 100000 # stepsize的迭代降低學習率:乘以gamma
display: 20 # display次列印顯示loss
max_iter: 450000 # train 最大迭代max_iter
momentum: 0.9 #
weight_decay: 0.0005 #
snapshot: 10000 # 沒迭代snapshot次,保存一次快照
snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
solver_mode: GPU # 使用的模式是GPU

其中,test_iter * batchsize(針對測試集)= 測試集的大小,測試集的 batchsize在prototx文件里設置。

momentum是用來修改搜索方向加快收斂速度的一種簡單方法,一般的通過加入之前的梯度來修改更新梯度步長。靈感來自於牛頓第一定律,基本思路:為尋優加入了「慣性」的影響,這樣一來,當誤差曲面中存在平坦區的時候,SGD可以更快的速度學習:

w_ileftarrow m	imes w_i-etafrac{partial E}{partial w_i}

train_val.prototxt

layer { # 數據層
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN # 表明這是在訓練階段才包括進去
}
transform_param { # 對數據進行預處理
mirror: true # 是否做鏡像
crop_size: 227
# 減去均值文件
mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
}
data_param { # 設定數據的來源
source: "examples/imagenet/ilsvrc12_train_lmdb"
batch_size: 256
backend: LMDB
}
}

layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST # 測試階段
}
transform_param {
mirror: false # 是否做鏡像
crop_size: 227
# 減去均值文件
mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
}
data_param {
source: "examples/imagenet/ilsvrc12_val_lmdb"
batch_size: 50
backend: LMDB
}
}

  • lr_mult:表示學習率,最終的學習率需要乘以 solver.prototxt 配置文件中的base_lr。如果有兩個 lr_mult, 則第一個表示 weight 的學習率,第二個表示 bias 的學習率。一般 bias 的學習率是 weight 學習率的2倍。
  • decay_mult:權值衰減,為了避免模型的over-fitting,需要對cost function加入規範項。
  • num_output: 卷積核(filter)的個數。
  • kernel_size:卷積核的大小,當然也可以通過kernel_h 和 kernel_w 分別設定核的高度和寬度。

  • stride:卷積核的步長,默認為1。當然也可以用stride_h和stride_w分別設置不同方向的步長大小。
  • pad:擴充邊緣,默認為0,不擴充。擴充的時候是左右、上下對稱的,比如卷積核的大小為5*5,那麼pad設置為2,則四個邊緣都擴充2個像素,即寬度和高度都擴充了4個像素,這樣卷積運算之後的特徵圖就不會變小。 當然也可以通過pad_h和pad_w來分別設定。
  • weight_filler:權值初始化。 默認為「constant」,值全為0。我們常用」xavier」演算法來進行初始化,也可以採用」gaussian」。
  • bias_filler:偏置項的初始化。一般設置為」constant」, 值全為0。
  • bias_term:是否開啟偏置項,默認為true, 開啟。
  • group:分組,默認為1。如果大於1,我們限制卷積的連接操作在一個子集內。卷積分組可以減少網路的參數,至於是否還有其他的作用就不清楚了。每個input是需要和每一個kernel都進行連接的,但是由於分組的原因其只是與部分的kernel進行連接的。如: 我們根據圖像的通道來分組,那麼第i個輸出分組只能與第i個輸入分組進行連接。
  • pool:池化方法,默認為MAX。目前可用的方法有 MAX, AVE, 或 STOCHASTIC。

  • dropout_ratio:丟棄數據的概率,用於防止模型過擬合。

參考:

【深度學習】caffe 中的一些參數介紹

推薦閱讀:

相关文章