caffe實例-LeNet簡介與mnist實驗


 裝好caffe之后,下面我們來跑它自帶的第一個例子,在mnist進行實驗,參見http://caffe.berkeleyvision.org/gathered/examples/mnist.html

(1)caffe在mnist自帶的是使用leNet的網絡結構。

   1.簡介:

  LeNet論文是Yan LeCun在1989年的論文Gradient-Based Learning Applied to Document Recognition

   http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf,這是CNN第一篇經典之作.

   minst是手寫字體庫,CNN的LeNet的廣泛應用於美國的支票手寫字體識別。

   2.LeNet網絡結構

   

 

(2)在mnist 進行實驗

  均在caffe根目錄下執行

  •   1.下載數據:  ./data/mnist/get_mnist.sh,
  •   2.生成lmdb文件:./example/mnist/create_minist.sh
  •    此時在當前目錄下生成 mnist_train_lmdb,mnist_test_lmdb文件
  •   3.配置網絡 :letNet網絡的定義在。./examples/mnist/lenet_train_test.prototxt文件中

 lenet_train_test.prototxt內容如下

name: "LeNet"
  2 layers {
  3   name: "mnist"
  4   type: DATA
  5   top: "data"
  6   top: "label"
  7   data_param {
  8     source: "examples/mnist/mnist_train_lmdb"
  9     backend: LMDB
 10     batch_size: 64
 11   }
 12   transform_param {
 13     scale: 0.00390625
 14   }
 15   include: { phase: TRAIN }
 16 }
 17 layers {
 18   name: "mnist"
 19   type: DATA
 20   top: "data"
 21   top: "label"
 22   data_param {
 23     source: "examples/mnist/mnist_test_lmdb"
 24     backend: LMDB
 25     batch_size: 100
 26   }

 27    transform_param {
 28     scale: 0.00390625
 29   }
 30   include: { phase: TEST }
 31 }
 32 
 33 layers {
 34   name: "conv1"
 35   type: CONVOLUTION
 36   bottom: "data"
 37   top: "conv1"
 38   blobs_lr: 1
 39   blobs_lr: 2
 40   convolution_param {
 41     num_output: 20
 42     kernel_size: 5
 43     stride: 1
 44     weight_filler {
 45       type: "xavier"
 46     }
 47     bias_filler {
 48       type: "constant"
 49     }
 50   }

51  }
 52 layers {
 53   name: "pool1"
 54   type: POOLING
 55   bottom: "conv1"
 56   top: "pool1"
 57   pooling_param {
 58     pool: MAX
 59     kernel_size: 2
 60     stride: 2
 61   }
 62 }
 63 layers {
 64   name: "conv2"
 65   type: CONVOLUTION
 66   bottom: "pool1"
 67   top: "conv2"
 68   blobs_lr: 1
 69   blobs_lr: 2
 70   convolution_param {
 71     num_output: 50
 72     kernel_size: 5
 73     stride: 1
 74     weight_filler {

75     type: "xavier"
 76     }
 77     bias_filler {
 78       type: "constant"
 79     }
 80   }
 81 }
 82 layers {
 83   name: "pool2"
 84   type: POOLING
 85   bottom: "conv2"
 86   top: "pool2"
 87   pooling_param {
 88     pool: MAX
 89     kernel_size: 2
 90     stride: 2
 91   }
 92 }
 93 layers {
 94   name: "ip1"
 95   type: INNER_PRODUCT
 96   bottom: "pool2"
 97   top: "ip1"
 98   blobs_lr: 1
 99   blobs_lr: 2
100   inner_product_param {

101  num_output: 500
102     weight_filler {
103       type: "xavier"
104     }
105     bias_filler {
106       type: "constant"
107     }
108   }
109 }
110 layers {
111   name: "relu1"
112   type: RELU
113   bottom: "ip1"
114   top: "ip1"
115 }
116 layers {
117   name: "ip2"
118   type: INNER_PRODUCT
119   bottom: "ip1"
120   top: "ip2"
121   blobs_lr: 1
122   blobs_lr: 2
123   inner_product_param {
124     num_output: 10
125     weight_filler {
126       type: "xavier"

127     }
128     bias_filler {
129       type: "constant"
130     }
131   }
132 }
133 layers {
134   name: "accuracy"
135   type: ACCURACY
136   bottom: "ip2"
137   bottom: "label"
138   top: "accuracy"
139   include: { phase: TEST }
140 }
141 layers {
142   name: "loss"
143   type: SOFTMAX_LOSS
144   bottom: "ip2"
145   bottom: "label"
146   top: "loss"
147 }
View Code
name: "LeNet"
  2 layers {
  3   name: "mnist"
  4   type: DATA
  5   top: "data"
  6   top: "label"
  7   data_param {
  8     source: "examples/mnist/mnist_train_lmdb"
  9     backend: LMDB
 10     batch_size: 64
 11   }
 12   transform_param {
 13     scale: 0.00390625
 14   }
 15   include: { phase: TRAIN }
 16 }
 17 layers {
 18   name: "mnist"
 19   type: DATA
 20   top: "data"
 21   top: "label"
 22   data_param {
 23     source: "examples/mnist/mnist_test_lmdb"
 24     backend: LMDB
 25     batch_size: 100
 26   }

 27    transform_param {
 28     scale: 0.00390625
 29   }
 30   include: { phase: TEST }
 31 }
 32 
 33 layers {
 34   name: "conv1"
 35   type: CONVOLUTION
 36   bottom: "data"
 37   top: "conv1"
 38   blobs_lr: 1
 39   blobs_lr: 2
 40   convolution_param {
 41     num_output: 20
 42     kernel_size: 5
 43     stride: 1
 44     weight_filler {
 45       type: "xavier"
 46     }
 47     bias_filler {
 48       type: "constant"
 49     }
 50   }

51  }
 52 layers {
 53   name: "pool1"
 54   type: POOLING
 55   bottom: "conv1"
 56   top: "pool1"
 57   pooling_param {
 58     pool: MAX
 59     kernel_size: 2
 60     stride: 2
 61   }
 62 }
 63 layers {
 64   name: "conv2"
 65   type: CONVOLUTION
 66   bottom: "pool1"
 67   top: "conv2"
 68   blobs_lr: 1
 69   blobs_lr: 2
 70   convolution_param {
 71     num_output: 50
 72     kernel_size: 5
 73     stride: 1
 74     weight_filler {

75     type: "xavier"
 76     }
 77     bias_filler {
 78       type: "constant"
 79     }
 80   }
 81 }
 82 layers {
 83   name: "pool2"
 84   type: POOLING
 85   bottom: "conv2"
 86   top: "pool2"
 87   pooling_param {
 88     pool: MAX
 89     kernel_size: 2
 90     stride: 2
 91   }
 92 }
 93 layers {
 94   name: "ip1"
 95   type: INNER_PRODUCT
 96   bottom: "pool2"
 97   top: "ip1"
 98   blobs_lr: 1
 99   blobs_lr: 2
100   inner_product_param {

101  num_output: 500
102     weight_filler {
103       type: "xavier"
104     }
105     bias_filler {
106       type: "constant"
107     }
108   }
109 }
110 layers {
111   name: "relu1"
112   type: RELU
113   bottom: "ip1"
114   top: "ip1"
115 }
116 layers {
117   name: "ip2"
118   type: INNER_PRODUCT
119   bottom: "ip1"
120   top: "ip2"
121   blobs_lr: 1
122   blobs_lr: 2
123   inner_product_param {
124     num_output: 10
125     weight_filler {
126       type: "xavier"

127     }
128     bias_filler {
129       type: "constant"
130     }
131   }
132 }
133 layers {
134   name: "accuracy"
135   type: ACCURACY
136   bottom: "ip2"
137   bottom: "label"
138   top: "accuracy"
139   include: { phase: TEST }
140 }
141 layers {
142   name: "loss"
143   type: SOFTMAX_LOSS
144   bottom: "ip2"
145   bottom: "label"
146   top: "loss"
147 }
  •    4、運行 ./example/mnist/train_lenet.sh  

   train_lenet.sh內容為

  1 #!/usr/bin/env sh
  2 
  3 ./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

 它其實使用的是在lenet_solver.prototxt中定義的解決方案

 lenet_solver.prototxt內容是

1 # The train/test net protocol buffer definition
  2 net: "examples/mnist/lenet_train_test.prototxt"
  3 # test_iter specifies how many forward passes the test should carry out.
  4 # In the case of MNIST, we have test batch size 100 and 100 test iterations,
  5 # covering the full 10,000 testing images.
  6 test_iter: 100
  7 # Carry out testing every 500 training iterations.
  8 test_interval: 500
  9 # The base learning rate, momentum and the weight decay of the network.
 10 base_lr: 0.01
 11 momentum: 0.9
 12 weight_decay: 0.0005
 13 # The learning rate policy
 14 lr_policy: "inv"
 15 gamma: 0.0001
 16 power: 0.75
 17 # Display every 100 iterations
 18 display: 100
 19 # The maximum number of iterations
 20 max_iter: 10000
 21 # snapshot intermediate results
 22 snapshot: 5000
 23 snapshot_prefix: "examples/mnist/lenet"
 24 # solver mode: CPU or GPU
 25 solver_mode: GPU
  • 5.查看實驗結果:

   經過一系列迭代iteration之后,在mnist上識別正確率能達到99.11%

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM