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 { //全連接層的參數 num_output: 500