溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用pycaffe生成solver.prototxt文件并進行訓練

發(fā)布時間:2021-12-04 15:55:09 來源:億速云 閱讀:126 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何使用pycaffe生成solver.prototxt文件并進行訓練,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

下面主要記錄如何生成sovler文件,solver文件是訓練的時候,需要用到的prototxt文件,它指明了train.prototxt和test.prototxt或train_test.prototxt。solver就是用來是loss最小化的優(yōu)化方法。

一、solver.prototxt參數說明

    依然是以cifar10_quick_solver.prototxt為例,內容如下:

# reduce the learning rate after 8 epochs (4000 iters) by a factor of 10# The train/test net protocol buffer definitionnet: "examples/cifar10/cifar10_quick_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.001momentum: 0.9weight_decay: 0.004# The learning rate policylr_policy: "fixed"# Display every 100 iterationsdisplay: 100# The maximum number of iterationsmax_iter: 4000# snapshot intermediate resultssnapshot: 4000snapshot_format: HDF5snapshot_prefix: "examples/cifar10/cifar10_quick"# solver mode: CPU or GPUsolver_mode: GPU

    這些參數,都是有根據進行設置的,從上到下依次進行說明:

  • net:指定配置文件,cifar10_quick_solver.prototx文件中指定的prototxt文件為examples/cifar10/cifar10_quick_train_test.prototxt,可以使用train_net和test_net分別指定。

  • test_iter:測試迭代數。例如:有10000個測試樣本,batch_size設為32,那么就需要迭代 10000/32=313次才完整地測試完一次,所以設置test_iter為313。

  • test_interval:每訓練迭代test_interval次進行一次測試,例如50000個訓練樣本,batch_size為64,那么需要50000/64=782次才處理完一次全部訓練樣本,記作1 epoch。所以test_interval設置為782,即處理完一次所有的訓練數據后,才去進行測試。

  • base_lr:基礎學習率,學習策略使用的參數。

  • momentum:動量。

  • weight_decay:權重衰減。

  • lr_policy:學習策略??蛇x參數:fixed、step、exp、inv、multistep。

    lr_prolicy參數說明:

  • fixed: 保持base_lr不變;

  • step: step: 如果設置為step,則需要設置一個stepsize,返回base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示當前的迭代次數;

  • exp: 返回base_lr * gamma ^ iter,iter為當前的迭代次數;

  • inv: 如何設置為inv,還需要設置一個power,返回base_lr * (1 + gamma * iter) ^ (- power);

  • multistep: 如果設置為multistep,則還需要設置一個stepvalue,這個參數和step相似,step是均勻等間隔變化,而multistep則是根據stepvalue值變化;

  • stepvalue參數說明:
    poly: 學習率進行多項式誤差,返回base_lr (1 - iter/max_iter) ^ (power);
    sigmoid: 學習率進行sigmod衰減,返回base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))。

  • display:每迭代display次顯示結果。

  • max_iter:最大迭代數,如果想訓練100 epoch,則需要設置max_iter為100*test_intervel=78200。

  • snapshot:保存臨時模型的迭代數。

  • snapshot_format:臨時模型的保存格式。有兩種選擇:HDF5 和BINARYPROTO ,默認為BINARYPROTO

  • snapshot_prefix:模型前綴,就是訓練好生成model的名字。不加前綴為iter_迭代數.caffemodel,加之后為lenet_iter_迭代次數.caffemodel。

  • solver_mode:優(yōu)化模式。可以使用GPU或者CPU。

二、使用python生成solver.prototxt文件

    以分析的cifar10_quick_solver.prototxt文件為例,使用python程序,生成這個文件。

1.代碼如下:

# -*- coding: UTF-8 -*-import caffe                                                     #導入caffe包def write_sovler():my_project_root = "/home/Jack-Cui/caffe-master/my-caffe-project/"        #my-caffe-project目錄sovler_string = caffe.proto.caffe_pb2.SolverParameter()                    #sovler存儲solver_file = my_project_root + 'solver.prototxt'                        #sovler文件保存位置sovler_string.train_net = my_project_root + 'train.prototxt'            #train.prototxt位置指定sovler_string.test_net.append(my_project_root + 'test.prototxt')         #test.prototxt位置指定sovler_string.test_iter.append(100)                                        #測試迭代次數sovler_string.test_interval = 500                                        #每訓練迭代test_interval次進行一次測試sovler_string.base_lr = 0.001                                            #基礎學習率   sovler_string.momentum = 0.9                                            #動量sovler_string.weight_decay = 0.004                                        #權重衰減sovler_string.lr_policy = 'fixed'                                        #學習策略           sovler_string.display = 100                                                #每迭代display次顯示結果sovler_string.max_iter = 4000                                            #最大迭代數sovler_string.snapshot = 4000                                             #保存臨時模型的迭代數sovler_string.snapshot_format = 0                                        #臨時模型的保存格式,0代表HDF5,1代表BINARYPROTOsovler_string.snapshot_prefix = 'examples/cifar10/cifar10_quick'        #模型前綴sovler_string.solver_mode = caffe.proto.caffe_pb2.SolverParameter.GPU    #優(yōu)化模式with open(solver_file, 'w') as f:
        f.write(str(sovler_string))   

if __name__ == '__main__':
    write_sovler()

2.運行結果:

如何使用pycaffe生成solver.prototxt文件并進行訓練

三、訓練模型

    從第一篇筆記至此,我們已經了解到如何將jpg圖片轉換成Caffe使用的db(levelbd/lmdb)文件,如何計算數據均值,如何使用python生成solver.prototxt、train.prototxt、test.prototxt文件。接下來,就可以進行訓練的最后一步,使用caffe提供的python接口訓練生成模型。如果不進行可視化,只想得到一個最終的訓練model,可以使用如下代碼:

import caffe

my_project_root = "/home/Jack-Cui/caffe-master/my-caffe-project/"        #my-caffe-project目錄solver_file = my_project_root + 'solver.prototxt'                        #sovler文件保存位置caffe.set_device(0)                                                      #選擇GPU-0caffe.set_mode_gpu()
solver = caffe.SGDSolver(solver_file)
solver.solve()

     現在,如何訓練生成模型的簡單步驟已經講完。接下來,以mnist實例,整合所學內容,訓練生成model,并使用生成的model進行預測。

關于如何使用pycaffe生成solver.prototxt文件并進行訓練就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI