成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

caffe的python插口之手寫(xiě)數(shù)字識(shí)別mnist案例

89542767 / 410人閱讀

  文中主要是給大家介紹了caffe的python插口之手寫(xiě)數(shù)字識(shí)別mnist案例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪


  論文引言


  機(jī)器學(xué)習(xí)第一個(gè)案例一般都是是mnist,只需這個(gè)案例徹底搞懂了,其他的便是觸類(lèi)旁通的事了。因?yàn)樽謹(jǐn)?shù)緣故,文中不簡(jiǎn)單介紹環(huán)境變量里邊每一個(gè)指標(biāo)的具體函義,如果要搞明白的,請(qǐng)參考我之前的微博文章:


  數(shù)據(jù)訪問(wèn)層及主要參數(shù)


  視覺(jué)效果層及主要參數(shù)


  solver環(huán)境變量及主要參數(shù)


  一、數(shù)據(jù)準(zhǔn)備


  官方網(wǎng)站給予的mnist數(shù)據(jù)信息并不是圖片,但是我們之后做出來(lái)的具體新項(xiàng)目很有可能是圖像。所以有的人并不知如何是好。在這里我們將mnist信息進(jìn)行了轉(zhuǎn)換,成了1張張的圖片,大伙兒訓(xùn)練先從照片逐漸。mnist圖片數(shù)據(jù)信息我放到了百度云。


  mnist圖片數(shù)據(jù)信息立即下載


  數(shù)據(jù)信息劃分成測(cè)試集(60000張共10類(lèi))和測(cè)試集(共10000張10類(lèi)),每一個(gè)類(lèi)型放到一個(gè)獨(dú)立的文件夾里。并將所有的圖片,都形成了txt目錄明細(xì)(train.txt和test.txt)。大伙兒直接下載后,立即緩解壓力到用戶(hù)狀態(tài)目錄下就行了。因?yàn)槲沂窃趙indows下壓縮成的,所以是winrar文件。如果你們需在linux下壓縮包解壓,必須安裝rar的linux版本,也是非常簡(jiǎn)易


  sudo apt-get install rar

  二、導(dǎo)入caffe庫(kù),并設(shè)定文件路徑


  我是將mnist直接放在根目錄下的,所以代碼如下:


  #-*-coding:utf-8-*-
  import caffe
  from caffe import layers as L,params as P,proto,to_proto
  #設(shè)定文件的保存路徑
  root='/home/xxx/'#根目錄
  train_list=root+'mnist/train/train.txt'#訓(xùn)練圖片列表
  test_list=root+'mnist/test/test.txt'#測(cè)試圖片列表
  train_proto=root+'mnist/train.prototxt'#訓(xùn)練配置文件
  test_proto=root+'mnist/test.prototxt'#測(cè)試配置文件
  solver_proto=root+'mnist/solver.prototxt'#參數(shù)文件


  其中train.txt和test.txt文件已經(jīng)有了,其它三個(gè)文件,我們需要自己編寫(xiě)。


  此處注意:一般caffe程序都是先將圖片轉(zhuǎn)換成lmdb文件,但這樣做有點(diǎn)麻煩。因此我就不轉(zhuǎn)換了,我直接用原始圖片進(jìn)行操作,所不同的就是直接用圖片操作,均值很難計(jì)算,因此可以不減均值。


  二、生成配置文件


  配置文件實(shí)際上就是一些txt文檔,只是后綴名是prototxt,我們可以直接到編輯器里編寫(xiě),也可以用代碼生成。此處,我用python來(lái)生成。


  #編寫(xiě)一個(gè)函數(shù),生成配置文件prototxt
  def Lenet(img_list,batch_size,include_acc=False):
  #第一層,數(shù)據(jù)輸入層,以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'))
  #激活函數(shù)層
  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():
  #寫(xiě)入train.prototxt
  with open(train_proto,'w')as f:
  f.write(str(Lenet(train_list,batch_size=64)))
  #寫(xiě)入test.prototxt
  with open(test_proto,'w')as f:
  f.write(str(Lenet(test_list,batch_size=100,include_acc=True)))

  配置文件里面存放的,就是我們所說(shuō)的network。我這里生成的network,可能和原始的Lenet不太一樣,不過(guò)影響不大。


  三、生成參數(shù)文件solver


  同樣,可以在編輯器里面直接書(shū)寫(xiě),也可以用代碼生成。


  #編寫(xiě)一個(gè)函數(shù),生成參數(shù)文件
  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,測(cè)試間隔參數(shù):訓(xùn)練完一次所有的圖片,進(jìn)行一次測(cè)試
  s.test_iter.append(100)#10000/100測(cè)試迭代次數(shù),需要迭代100次,才完成一次所有數(shù)據(jù)的測(cè)試
  s.max_iter=9380#10 epochs,938*10,最大訓(xùn)練次數(shù)
  s.base_lr=0.01#基礎(chǔ)學(xué)習(xí)率
  s.momentum=0.9#動(dòng)量
  s.weight_decay=5e-4#權(quán)值衰減項(xiàng)
  s.lr_policy='step'#學(xué)習(xí)率變化規(guī)則
  s.stepsize=3000#學(xué)習(xí)率變化頻率
  s.gamma=0.1#學(xué)習(xí)率變化指數(shù)
  s.display=20#屏幕顯示間隔
  s.snapshot=938#保存caffemodel的間隔
  s.snapshot_prefix=root+'mnist/lenet'#caffemodel前綴
  s.type='SGD'#優(yōu)化算法
  s.solver_mode=proto.caffe_pb2.SolverParameter.GPU#加速
  #寫(xiě)入solver.prototxt
  with open(solver_file,'w')as f:
  f.write(str(s))
  四、開(kāi)始訓(xùn)練模型
  訓(xùn)練過(guò)程中,也在不停的測(cè)試。
  #開(kāi)始訓(xùn)練
  def training(solver_proto):
  caffe.set_device(0)
  caffe.set_mode_gpu()
  solver=caffe.SGDSolver(solver_proto)
  solver.solve()
  最后,調(diào)用以上的函數(shù)就可以了。
  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
  #設(shè)定文件的保存路徑
  root='/home/xxx/'#根目錄
  train_list=root+'mnist/train/train.txt'#訓(xùn)練圖片列表
  test_list=root+'mnist/test/test.txt'#測(cè)試圖片列表
  train_proto=root+'mnist/train.prototxt'#訓(xùn)練配置文件
  test_proto=root+'mnist/test.prototxt'#測(cè)試配置文件
  solver_proto=root+'mnist/solver.prototxt'#參數(shù)文件
  #編寫(xiě)一個(gè)函數(shù),生成配置文件prototxt
  def Lenet(img_list,batch_size,include_acc=False):
  #第一層,數(shù)據(jù)輸入層,以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'))
  #激活函數(shù)層
  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():
  #寫(xiě)入train.prototxt
  with open(train_proto,'w')as f:
  f.write(str(Lenet(train_list,batch_size=64)))
  #寫(xiě)入test.prototxt
  with open(test_proto,'w')as f:
  f.write(str(Lenet(test_list,batch_size=100,include_acc=True)))
  #編寫(xiě)一個(gè)函數(shù),生成參數(shù)文件
  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,測(cè)試間隔參數(shù):訓(xùn)練完一次所有的圖片,進(jìn)行一次測(cè)試
  s.test_iter.append(500)#50000/100測(cè)試迭代次數(shù),需要迭代500次,才完成一次所有數(shù)據(jù)的測(cè)試
  s.max_iter=9380#10 epochs,938*10,最大訓(xùn)練次數(shù)
  s.base_lr=0.01#基礎(chǔ)學(xué)習(xí)率
  s.momentum=0.9#動(dòng)量
  s.weight_decay=5e-4#權(quán)值衰減項(xiàng)
  s.lr_policy='step'#學(xué)習(xí)率變化規(guī)則
  s.stepsize=3000#學(xué)習(xí)率變化頻率
  s.gamma=0.1#學(xué)習(xí)率變化指數(shù)
  s.display=20#屏幕顯示間隔
  s.snapshot=938#保存caffemodel的間隔
  s.snapshot_prefix=root+'mnist/lenet'#caffemodel前綴
  s.type='SGD'#優(yōu)化算法
  s.solver_mode=proto.caffe_pb2.SolverParameter.GPU#加速
  #寫(xiě)入solver.prototxt
  with open(solver_file,'w')as f:
  f.write(str(s))
  #開(kāi)始訓(xùn)練
  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文件夾下,因此可用以下代碼執(zhí)行
  sudo python mnist/mnist.py


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128775.html

相關(guān)文章

  • caffepython接口deploy形成caffemodel歸類(lèi)新圖片

      本文主要是給大家介紹了caffe的python插口生成deploy文件學(xué)習(xí)培訓(xùn)及其用練習(xí)好一點(diǎn)的實(shí)體模型(caffemodel)來(lái)歸類(lèi)新的圖片實(shí)例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪  caffe的python插口生成deploy文件  假如要將練習(xí)好一點(diǎn)的實(shí)體模型用于檢測(cè)新的圖片,那必然必須得一個(gè)deploy.prototxt文件,這一...

    89542767 評(píng)論0 收藏0
  • caffepython插口制作loss和accuracy曲線圖

      此篇文章主要是給大家介紹了caffe的python插口制作loss和accuracy曲線圖實(shí)例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪  前言  使用python插口來(lái)運(yùn)行caffe程序流程,根本原因是python很容易數(shù)據(jù)可視化。所以才建議大家在cmd下邊運(yùn)行python程序流程。如果一定要在cmd下邊運(yùn)作,不如直接用c++算了。  強(qiáng)烈推...

    89542767 評(píng)論0 收藏0
  • python格式Caffe圖片數(shù)據(jù)信息均值測(cè)算學(xué)習(xí)培訓(xùn)

      此篇文章關(guān)鍵給大家介紹了python格式Caffe圖片數(shù)據(jù)信息均值測(cè)算學(xué)習(xí)培訓(xùn)實(shí)例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以一些幫助,祝愿大家多多的發(fā)展,盡早漲薪  前言  照片減掉均值后,然后再進(jìn)行練習(xí)和檢測(cè),也會(huì)提高速度與精密度。因而,通常在各類(lèi)實(shí)體模型中都有這種操作。  那么這樣的均值是怎么來(lái)的呢,實(shí)際上是測(cè)算全部svm分類(lèi)器的均值,計(jì)算出來(lái)后,儲(chǔ)存為均值文檔,在今后的檢測(cè)中,就...

    89542767 評(píng)論0 收藏0
  • TensorFlow 2.0 / TF2.0 入門(mén)教程實(shí)戰(zhàn)案例

    摘要:七強(qiáng)化學(xué)習(xí)玩轉(zhuǎn)介紹了使用創(chuàng)建來(lái)玩游戲?qū)⑦B續(xù)的狀態(tài)離散化。包括輸入輸出獨(dú)熱編碼與損失函數(shù),以及正確率的驗(yàn)證。 用最白話的語(yǔ)言,講解機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)示例基于 TensorFlow 1.4 和 TensorFlow 2.0 實(shí)現(xiàn) 中文文檔 TensorFlow 2 / 2.0 官方文檔中文版 知乎專(zhuān)欄 歡迎關(guān)注我的知乎專(zhuān)欄 https://zhuanlan.zhihu.com/...

    whataa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<