Caffe練習1:training LeNet on MNIST with Caffe/LeNetで手書き文字セットを認識Mnist---byバナナマロディ


この実験は入門するのが一番よくて、とても楽で、作者が書いた脚本を実行すればいいです.
公式サイトのリンク:http://caffe.berkeleyvision.org/gathered/examples/mnist.html
この実験に従って、caffeの使用の流れを観察することができて、深く入り込んで、作者が書いたshellスクリプトがどんなことをしたかを見ることができます.
次に、簡単な分析を行います.
1まずデータセットを準備する
次のコマンドを実行します.$CAFFE_ROOTとはcaffeがインストールしたディレクトリのことで、例えば私のは/home/sloanqin/caffe-master/
cd $CAFFE_ROOT
./data/mnist/get_mnist.sh   //    mnist     
./examples/mnist/create_mnist.sh    //    mnist      lmdb     

この2つのスクリプトを見てみましょう.
1.1実行スクリプトget_mnist.sh:
get_mnist.sh      :
<pre name="code" class="plain"># This scripts downloads the mnist data and unzips it.

DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd $DIR

echo "Downloading..."

wget --no-check-certificate http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
wget --no-check-certificate http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
wget --no-check-certificate http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
wget --no-check-certificate http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz

echo "Unzipping..."

gunzip train-images-idx3-ubyte.gz
gunzip train-labels-idx1-ubyte.gz
gunzip t10k-images-idx3-ubyte.gz
gunzip t10k-labels-idx1-ubyte.gz

# Creation is split out because leveldb sometimes causes segfault
# and needs to be re-created.

echo "Done."
 
 
 
  
 
  :        ,   ;
train-images-idx3-ubyte.gz   
train-labels-idx1-ubyte.gz      
t10k-images-idx3-ubyte.gz   
t10k-labels-idx1-ubyte.gz      
 
 
 
  
 

2 定义caffe的网络结构:.prototxt 文件

caffe的网络结构定义在后缀名为.prototxt的文件中,我们根据自己的需要定义自己的网络结构;

在这个实验中,我们使用作者已经为我们定义好的lenet网络结构,大家可以在下面的目录中找到该文件:

$CAFFE_ROOT/examples/mnist/lenet_train_test.prototxt

在我的电脑上,目录是/home/sloanqin/examples/mnist/lenet_train_test.prototxt

在后续的工作中,定义好自己的网络结构是最关键的,直接决定了性能,这里我们就不多说了;

3 定义caffe运算的时候的一些规则:solver.prototxt 文件

 该文件在下面的目录中:

$CAFFE_ROOT/examples/mnist/lenet_solver.prototxt

文件内容如下:作者给出了英文注释,我再给出中文的注释

# The train/test net protocol buffer definition
net: "examples/mnist/lenet_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100
# Carry out testing every 500 training iterations.
test_interval: 500
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
display: 100
# The maximum number of iterations
max_iter: 10000
# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
# solver mode: CPU or GPU
solver_mode: GPU
中国語注釈バージョン:
<pre name="code" class="plain"># The train/test net protocol buffer definition
net: "examples/mnist/lenet_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100  //                 
		//         :GPU      ,         ,      batch
		//     :test batch size 100,       100   
		//      st_iter=100,           100*100=10000   
		//  ,test_iter        :       
# Carry out testing every 500 training iterations.
test_interval: 500  //   500   ,     
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01    //             0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
display: 100     //   100 ,        
# The maximum number of iterations
max_iter: 10000   //         
# snapshot intermediate results
snapshot: 5000    //               ,      5000       ,         ,              
snapshot_prefix: "examples/mnist/lenet"
# solver mode: CPU or GPU
solver_mode: GPU   //  CPU  GPU  
 
 4 执行命令进行训练 
  
 

最后一步就是执行脚本开始训练:

cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh
このスクリプトを開くと、特に簡単な行が表示されます.
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
この行のコードの意味:./build/tools/caffeディレクトリの下のtrain関数を呼び出します.train関数の入力パラメータはsolver.prototxtファイルのパスです.--solver=examples/mnist/lenet_solver.prototxt
5結果
実行中、testにカードできる精度が上昇しています.実行が終了すると、モデルファイルが生成されます:lenet_iter_10000.caffemodel
もう1つのファイルはsnapshotが保存しています:lenet_iter_10000.solverstate
テキストリンク:http://write.blog.csdn.net/postedit/49147935