caffe的python介面學習(4)mnist執行個體手寫數字識別

來源:互聯網
上載者:User

標籤:play   參數   roo   soft   data   append   最大   ase   多次   

以下主要是摘抄denny博文的內容,更多內容大家去看原作者吧  

一 資料準備

  準備訓練集和測試集圖片的列表清單;

  二 匯入caffe庫,設定檔案路徑

  

# -*- coding: utf-8 -*-import caffefrom caffe import layers as L,params as P,proto,to_proto#設定檔案的儲存路徑root=‘/home/xxx/‘                           #根目錄train_list=root+‘mnist/train/train.txt‘     #訓練圖片列表test_list=root+‘mnist/test/test.txt‘        #測試圖片列表train_proto=root+‘mnist/train.prototxt‘     #訓練設定檔test_proto=root+‘mnist/test.prototxt‘       #測試組態檔案solver_proto=root+‘mnist/solver.prototxt‘   #參數檔案

其中train.txt 和test.txt檔案已經有了,其它三個檔案,我們需要自己編寫。

此處注意:一般caffe程式都是先將圖片轉換成lmdb檔案,但這樣做有點麻煩。因此我就不轉換了,我直接用原始圖片進行操作,所不同的就是直接用圖片操作,均值很難計算,因此可以不減均值。

  三 組建組態檔案

  

設定檔實際上就是一些txt文檔,只是尾碼名是prototxt,我們可以直接到編輯器裡編寫,也可以用代碼產生。此處,我用python來產生。

#編寫一個函數,組建組態檔案prototxtdef Lenet(img_list,batch_size,include_acc=False):    #第一層,資料輸入層,以ImageData格式輸入    data, label = L.ImageData(source=img_list, batch_size=batch_size, ntop=2,root_folder=root,        transform_param=dict(scale= 0.00390625))    #第二層:卷積層    conv1=L.Convolution(data, kernel_size=5, stride=1,num_output=20, pad=0,weight_filler=dict(type=‘xavier‘))    #池化層    pool1=L.Pooling(conv1, pool=P.Pooling.MAX, kernel_size=2, stride=2)    #卷積層    conv2=L.Convolution(pool1, kernel_size=5, stride=1,num_output=50, pad=0,weight_filler=dict(type=‘xavier‘))    #池化層    pool2=L.Pooling(conv2, pool=P.Pooling.MAX, kernel_size=2, stride=2)    #全串連層    fc3=L.InnerProduct(pool2, num_output=500,weight_filler=dict(type=‘xavier‘))    #啟用函數層    relu3=L.ReLU(fc3, in_place=True)    #全串連層    fc4 = L.InnerProduct(relu3, num_output=10,weight_filler=dict(type=‘xavier‘))    #softmax層    loss = L.SoftmaxWithLoss(fc4, label)        if include_acc:             # test階段需要有accuracy層        acc = L.Accuracy(fc4, label)        return to_proto(loss, acc)    else:        return to_proto(loss)    def write_net():    #寫入train.prototxt    with open(train_proto, ‘w‘) as f:        f.write(str(Lenet(train_list,batch_size=64)))    #寫入test.prototxt        with open(test_proto, ‘w‘) as f:        f.write(str(Lenet(test_list,batch_size=100, include_acc=True)))

設定檔裡面存放的,就是我們所說的network。我這裡產生的network,可能和原始的Lenet不太一樣,不過影響不大。

  四 產生solver檔案

  

同樣,可以在編輯器裡面直接書寫,也可以用代碼產生。

#編寫一個函數,產生參數檔案def gen_solver(solver_file,train_net,test_net):    s=proto.caffe_pb2.SolverParameter()    s.train_net =train_net    s.test_net.append(test_net)    s.test_interval = 938    #60000/64,測試間隔參數:訓練完一次所有的圖片,進行一次測試      s.test_iter.append(100)  #10000/100 測試迭代次數,需要迭代100次,才完成一次所有資料的測試    s.max_iter = 9380       #10 epochs , 938*10,最大訓練次數    s.base_lr = 0.01    #基礎學習率    s.momentum = 0.9    #動量    s.weight_decay = 5e-4  #權值衰減項    s.lr_policy = ‘step‘   #學習率變化規則    s.stepsize=3000         #學習率變化頻率    s.gamma = 0.1          #學習率變化指數    s.display = 20         #螢幕顯示間隔    s.snapshot = 938       #儲存caffemodel的間隔    s.snapshot_prefix =root+‘mnist/lenet‘   #caffemodel首碼    s.type =‘SGD‘         #最佳化演算法    s.solver_mode = proto.caffe_pb2.SolverParameter.GPU    #加速    #寫入solver.prototxt    with open(solver_file, ‘w‘) as f:        f.write(str(s))

  

  五 開始訓練模型

  

訓練過程中,也在不停的測試。

#開始訓練def training(solver_proto):    caffe.set_device(0)    caffe.set_mode_gpu()    solver = caffe.SGDSolver(solver_proto)    solver.solve()

最後,調用以上的函數就可以了。

if __name__ == ‘__main__‘:    write_net()    gen_solver(solver_proto,train_proto,test_proto)     training(solver_proto)

  六 完成的python檔案

  

mnist.py

View Code

 

我將此檔案放在根目錄下的mnist檔案夾下,因此可用以下代碼執行

sudo python mnist/mnist.py

在訓練過程中,會儲存一些caffemodel。多久儲存一次,儲存多少次,都可以在solver參數檔案裡進行設定。

我設定為訓練10 epoch,9000多次,測試精度可以達到99%

caffe的python介面學習(4)mnist執行個體手寫數字識別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.