您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何使用pycaffe生成solver.prototxt文件并進行訓練,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
下面主要記錄如何生成sovler文件,solver文件是訓練的時候,需要用到的prototxt文件,它指明了train.prototxt和test.prototxt或train_test.prototxt。solver就是用來是loss最小化的優化方法。
一、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:學習策略。可選參數: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:優化模式。可以使用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 #優化模式with open(solver_file, 'w') as f: f.write(str(sovler_string)) if __name__ == '__main__': write_sovler()
2.運行結果:
三、訓練模型
從第一篇筆記至此,我們已經了解到如何將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文件并進行訓練就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。