caffe mnist實例 --lenet_train_test.prototxt 網絡配置詳解
阿新 • • 發佈:2017-10-28
learn root backend .proto word 初始 固定 get alt
1.mnist實例
##1.數據下載 獲得mnist的數據包,在caffe根目錄下執行./data/mnist/get_mnist.sh腳本。 get_mnist.sh腳本先下載樣本庫並進行解壓縮,得到四個文件。
2.生成LMDB
成功解壓縮下載的樣本庫後,然後執行./examples/mnist/create_mnist.sh。 create_mnist.sh腳本先利用caffe-master/build/examples/mnist/目錄下的convert_mnist_data.bin工具,將mnist data轉化為caffe可用的lmdb格式文件,然後將生成的mnist-train-lmdb和mnist-test-lmdb兩個文件放在caffe-master/example/mnist目錄下面。
3.網絡配置
LeNet網絡定義在./examples/mnist/lenet_train_test.prototxt 文件中。
name: "LeNet"
layer {
name: "mnist" //輸入層的名稱mnist
type: "Data" //輸入層的類型為Data層
top: "data" //本層下一場連接data層和label blob空間
top: "label"
include {
phase: TRAIN //訓練階段
}
transform_param {
scale: 0.00390625 //輸入圖片像素歸一到[0,1].1除以256為0.00390625
}
data_param {
source: "examples/mnist/mnist_train_lmdb" //從mnist_train_lmdb中讀入數據
batch_size: 64 //batch大小為64,一次訓練64條數據
backend: LMDB
}
}
layer {
name: "mnist" //輸入層的名稱mnist
type: "Data" //輸入層的類型為Data層
top: "data" //本層下一場連接data層和label blob空間
top: "label"
include {
phase: TEST //測試階段
}
transform_param {
scale: 0.00390625 //輸入圖片像素歸一到[0,1].1除以256為0.00390625
}
data_param {
source: "examples/mnist/mnist_test_lmdb" //從mnist_test_lmdb中讀入數據
batch_size: 100 //batch大小為100,一次訓練100條數據
backend: LMDB
}
}
layer {
name: "conv1" //卷積層名稱conv1
type: "Convolution" //層類型為卷積層
bottom: "data" //本層使用上一層的data,生成下一層conv1的blob
top: "conv1"
param {
lr_mult: 1 //權重參數w的學習率倍數
}
param {
lr_mult: 2 //偏置參數b的學習率倍數
}
convolution_param {
num_output: 20 //輸出單元數20
kernel_size: 5 //卷積核大小為5*5
stride: 1 //步長為1
weight_filler { //允許用隨機值初始化權重和偏置值
type: "xavier" //使用xavier算法自動確定基於輸入—輸出神經元數量的初始規模
}
bias_filler {
type: "constant" //偏置值初始化為常數,默認為0
}
}
}
layer {
name: "pool1" //層名稱為pool1
type: "Pooling" //層類型為pooling
bottom: "conv1" //本層的上一層是conv1,生成下一層pool1的blob
top: "pool1"
pooling_param { //pooling層的參數
pool: MAX //pooling的方式是MAX
kernel_size: 2 //pooling核是2*2
stride: 2 //pooling步長是2
}
}
layer {
name: "conv2" //第二個卷積層,同第一個卷積層相同,只是卷積核為50
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
convolution_param {
num_output: 50
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "pool2" //第二個pooling層,與第一個pooling層相同
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer { //全連接層
name: "ip1" //全連接層名稱ip1
type: "InnerProduct" //層類型為全連接層
bottom: "pool2"
top: "ip1"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param { //全連接層的參數