文中主要是給大家介紹了caffe的python插口之手寫數字識別mnist案例詳細說明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發展,盡早漲薪
論文引言
機器學習第一個案例一般都是是mnist,只需這個案例徹底搞懂了,其他的便是觸類旁通的事了。因為字數緣故,文中不簡單介紹環境變量里邊每一個指標的具體函義,如果要搞明白的,請參考我之前的微博文章:
數據訪問層及主要參數
視覺效果層及主要參數
solver環境變量及主要參數
一、數據準備
官方網站給予的mnist數據信息并不是圖片,但是我們之后做出來的具體新項目很有可能是圖像。所以有的人并不知如何是好。在這里我們將mnist信息進行了轉換,成了1張張的圖片,大伙兒訓練先從照片逐漸。mnist圖片數據信息我放到了百度云。
mnist圖片數據信息立即下載
數據信息劃分成測試集(60000張共10類)和測試集(共10000張10類),每一個類型放到一個獨立的文件夾里。并將所有的圖片,都形成了txt目錄明細(train.txt和test.txt)。大伙兒直接下載后,立即緩解壓力到用戶狀態目錄下就行了。因為我是在windows下壓縮成的,所以是winrar文件。如果你們需在linux下壓縮包解壓,必須安裝rar的linux版本,也是非常簡易
sudo apt-get install rar
二、導入caffe庫,并設定文件路徑
我是將mnist直接放在根目錄下的,所以代碼如下:
#-*-coding:utf-8-*- import caffe from 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來生成。
#編寫一個函數,生成配置文件prototxt def 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 #-*-coding:utf-8-*- import caffe from 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'#參數文件 #編寫一個函數,生成配置文件prototxt def 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))) #編寫一個函數,生成參數文件 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(500)#50000/100測試迭代次數,需要迭代500次,才完成一次所有數據的測試 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) 我將此文件放在根目錄下的mnist文件夾下,因此可用以下代碼執行 sudo python mnist/mnist.py
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128775.html
本文主要是給大家介紹了caffe的python插口生成deploy文件學習培訓及其用練習好一點的實體模型(caffemodel)來歸類新的圖片實例詳細說明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發展,盡早漲薪 caffe的python插口生成deploy文件 假如要將練習好一點的實體模型用于檢測新的圖片,那必然必須得一個deploy.prototxt文件,這一...
此篇文章主要是給大家介紹了caffe的python插口制作loss和accuracy曲線圖實例詳細說明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發展,盡早漲薪 前言 使用python插口來運行caffe程序流程,根本原因是python很容易數據可視化。所以才建議大家在cmd下邊運行python程序流程。如果一定要在cmd下邊運作,不如直接用c++算了。 強烈推...
此篇文章關鍵給大家介紹了python格式Caffe圖片數據信息均值測算學習培訓實例詳細說明,感興趣的小伙伴可以參考借鑒一下,希望可以一些幫助,祝愿大家多多的發展,盡早漲薪 前言 照片減掉均值后,然后再進行練習和檢測,也會提高速度與精密度。因而,通常在各類實體模型中都有這種操作。 那么這樣的均值是怎么來的呢,實際上是測算全部svm分類器的均值,計算出來后,儲存為均值文檔,在今后的檢測中,就...
摘要:七強化學習玩轉介紹了使用創建來玩游戲將連續的狀態離散化。包括輸入輸出獨熱編碼與損失函數,以及正確率的驗證。 用最白話的語言,講解機器學習、神經網絡與深度學習示例基于 TensorFlow 1.4 和 TensorFlow 2.0 實現 中文文檔 TensorFlow 2 / 2.0 官方文檔中文版 知乎專欄 歡迎關注我的知乎專欄 https://zhuanlan.zhihu.com/...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02