caffe的prototxt文件
caffe的prototxt文件
data_layer
1、Data層
layer {name: "cifar"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {mean_file: "examples/cifar10/mean.binaryproto"}data_param {source: "examples/cifar10/cifar10_train_lmdb"batch_size: 100backend: LMDB} }name任取,表示這一層的名字
type:層類型,如果是Data,表示數據來源是LevelDB后者LMDB,根據數據來源的不同,數據層的類型也不同,有些還是從磁盤中存儲hdf5或者圖片格式。
top和bottom:top為此層輸出,bottom為此層輸入,在數據層中,至少有一個命名為data的top。如果有第二個top,一般命名為label。這種(data, label)的配對是分類模型所必需的。
include:一般訓練和測試的時候,模型的參數有些不一樣。所以這個是用來指定該數據層是屬于訓練階段或者測試階段的層。若未指定,則該層既用在訓練模型又用在測試模型上。
transform_param:數據的預處理,可以將數據變換到定義的范圍內。如設置scale為0.00390625,實際上就是1/255,即將輸入數據由0255歸一化到01之間。
data_param:根據數據來源的不同,來進行不同的設置。必須設置的參數有source和batch_size,source包含數據庫的目錄名字,batch_size就是每次處理的數據個數。可選參數有rand_skip和backend,backend是選擇采用LevelDB還是LMDB,默認是LevelDB【這個應該是選擇數據庫引擎】
vision_layer
【Convolution、Pooling】
2、Convolution層
layer {name: "conv1"type: "Convolution"bottom: "data"top: "conv1"param {lr_mult: 1decay_mult: 1}param {lr_mult: 2decay_mult: 0}convolution_param {num_output: 96kernel_size: 11stride: 4pad: 2weight_filler {type: "gaussian"std: 0.01 #標準差:distribution with stdev 0.01(default mean: 0)}bias_filler {type: "constant"value: 0}} }lr_mult:學習率的系數,最終的學習率是這個數乘以solver.prototxt配置文件中的base_lr。如有兩個lr_mult,則第一個表示權值w的學習率,第二個表示偏置項的學習率。一般偏置項的學習率是權值學習率的兩倍。
必須設置的參數有:
num_output:卷積核的個數
kernel_size:卷積核的大小,如果kernel_size長寬不一樣,則需要通過kernel_h,kernel_w分別設定。
其他參數:
stride:卷積核的步長,默認為1, 也可以用stride_h, stride_w來設置。
pad
weight_filter:權值初始化。默認為“constant”,值權威0,很多時候我們用“xavier”算法來進行初始化,也可以設置為“gaussian”
bias_filter:偏置項的初始化,一般設置為“constant”,值全為0。
bias_term:是否開啟偏置項,默認為true
group:分組,默認為1組。如果大于1,我們限制卷積的連接操作在一個子集里。
pooling層
layer {name: "pool1"type: "Pooling"bottom: "conv1"top: "pool1"pooling_param {pool: MAXkernel_size: 3stride: 2} }4、Local Response Normalization層
LRN是對一個局部的輸入進行的歸一化操作。【貌似現在不怎么用了】
5、im2col層
在caffe中,卷積運算就是先對數據矩陣進行im2col操作,在進行內積運算,這樣做,會比原始的卷積操作更快。
common_layer
【InnerProductLayer、SplitLayer、FlattenLayer、ConcatLayer、SilenceLayer、(Elementwise Operations)這個是我們常說的激活函數層Activation Layers、EltwiseLayer、SoftmaxLayer、ArgMaxLayer、MVNLayer】
6、inner_product層(FC)
layers {name: "fc8"type: "InnerProduct"blobs_lr: 1 # learning rate multiplier for the filtersblobs_lr: 2 # learning rate multiplier for the biasesweight_decay: 1 # weight decay multiplier for the filtersweight_decay: 0 # weight decay multiplier for the biasesinner_product_param {num_output: 1000weight_filler {type: "gaussian"std: 0.01}bias_filler {type: "constant"value: 0}}bottom: "fc7"top: "fc8"7、accuracy
layer {name: "accuracy"type: "Accuracy"bottom: "ip2"bottom: "label"top: "accuracy"include {phase: TEST} }accuracy只在test有,因此要設置include為TEST。輸出分類(預測)的精確度。
8、reshape
有一個可選的參數組shape,用于指定blob數據的各維的值(blob是一個四維的數據nxcxwxh)
"dim:0"表示維度不變,即輸入和輸出是一樣的維度。"dim:-1"表示由系統自動計算維度。數據總量不變,系統根據其他三維來確定這一維。
9、dropout
layer {name: "drop7"type: "Dropout"bottom: "fc7-conv"top: "fc7-conv"dropout_param {dropout_ratio: 0.5 #只需要設置一個dropout_ratio參數即可} }Neuron_layer
10、Sigmoid
11、ReLU/Rectified-linear and Leaky-ReLU
layers { name: "relu1" type: RELU bottom: "conv1" top: "conv1" }loss_layer
【待續,還有很多的】
16、softmax-loss
layer {name: "loss"type: "SoftmaxWithLoss"bottom: "ip1"bottom: "label"top: "loss" }ps:
solver算是caffe核心的核心,它協調著整個模型的運作,caffe程序運行必須帶一個參數就是solver配置文件。
caffe提供了六種優化算法來求解最優解,在solver配置文件中,通過設置type類型來選擇
Solver的流程:
1. 設計好需要優化的對象,以及用于學習的訓練網絡和用于評估的測試網絡。(通過調用另外一個配置文件prototxt來進行)2. 通過forward和backward迭代的進行優化來跟新參數。3. 定期的評價測試網絡。 (可設定多少次訓練后,進行一次測試)4. 在優化過程中顯示模型和solver的狀態 #每一次的迭代過程 ? 1、調用forward算法來計算最終的輸出值,以及對應的loss ? 2、調用backward算法來計算每層的梯度 ? 3、根據選用的slover方法,利用梯度進行參數更新 ? 4、記錄并保存每次迭代的學習率、快照,以及對應的狀態。總結
以上是生活随笔為你收集整理的caffe的prototxt文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运行caffe自带的mnist实例教程
- 下一篇: c++ vector pop_back(