国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何使用Python Opencv中的ann神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字功能

89542767 / 643人閱讀


  寫這篇文章的主要目的,是關(guān)于Python Opencv的相關(guān)知識(shí),包括ann神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字功能,教給大家怎么去使用這種功能,接下來請(qǐng)大家仔細(xì)的進(jìn)行閱讀哦。


  opencv會(huì)給大家提供一種神經(jīng)網(wǎng)絡(luò)的功能,即為ann,這種神經(jīng)的網(wǎng)絡(luò)功能與Keras的很接近。


  關(guān)于mnist數(shù)據(jù)怎么去進(jìn)行解析,讀者人員可以自己從網(wǎng)上downland軟件,用python自己編寫解析代碼,由于這里主要研究knn算法,為了圖簡(jiǎn)單,直接使用Keras的mnist手寫數(shù)字解析模塊。


  本次代碼運(yùn)行環(huán)境為:


  python 3.6.8


  opencv-python 4.4.0.46


  opencv-contrib-python 4.4.0.46


  下面的代碼為使用ann進(jìn)行模型的訓(xùn)練:


  from keras.datasets import mnist
  from keras import utils
  import cv2
  import numpy as np
  #opencv中ANN定義神經(jīng)網(wǎng)絡(luò)層
  def create_ANN():
  ann=cv2.ml.ANN_MLP_create()
  #設(shè)置神經(jīng)網(wǎng)絡(luò)層的結(jié)構(gòu)輸入層為784隱藏層為80輸出層為10
  ann.setLayerSizes(np.array([784,64,10]))
  #設(shè)置網(wǎng)絡(luò)參數(shù)為誤差反向傳播法
  ann.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
  #設(shè)置激活函數(shù)為sigmoid
  ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM)
  #設(shè)置訓(xùn)練迭代條件
  #結(jié)束條件為訓(xùn)練30次或者誤差小于0.00001
  ann.setTermCriteria((cv2.TermCriteria_EPS|cv2.TermCriteria_COUNT,100,0.0001))
  return ann
  #計(jì)算測(cè)試數(shù)據(jù)上的識(shí)別率
  def evaluate_acc(ann,test_images,test_labels):
  #采用的sigmoid激活函數(shù),需要對(duì)結(jié)果進(jìn)行置信度處理
  #對(duì)于大于0.99的可以確定為1對(duì)于小于0.01的可以確信為0
  test_ret=ann.predict(test_images)
  #預(yù)測(cè)結(jié)果是一個(gè)元組
  test_pre=test_ret[1]
  #可以直接最大值的下標(biāo)(10000,)
  test_pre=test_pre.argmax(axis=1)
  true_sum=(test_pre==test_labels)
  return true_sum.mean()
  if __name__=='__main__':
  #直接使用Keras載入的訓(xùn)練數(shù)據(jù)(60000,28,28)(60000,)
  (train_images,train_labels),(test_images,test_labels)=mnist.load_data()
  #變換數(shù)據(jù)的形狀并歸一化
  train_images=train_images.reshape(train_images.shape[0],-1)#(60000,784)
  train_images=train_images.astype('float32')/255
  test_images=test_images.reshape(test_images.shape[0],-1)
  test_images=test_images.astype('float32')/255
  #將標(biāo)簽變?yōu)閛ne-hot形狀(60000,10)float32
  train_labels=utils.to_categorical(train_labels)
  #測(cè)試數(shù)據(jù)標(biāo)簽不用變?yōu)閛ne-hot(10000,)
  test_labels=test_labels.astype(np.int)
  #定義神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
  ann=create_ANN()
  #開始訓(xùn)練
  ann.train(train_images,cv2.ml.ROW_SAMPLE,train_labels)
  #在測(cè)試數(shù)據(jù)上測(cè)試準(zhǔn)確率
  print(evaluate_acc(ann,test_images,test_labels))
  #保存模型
  ann.save('mnist_ann.xml')
   #加載模型
  myann=cv2.ml.ANN_MLP_load('mnist_ann.xml')

  訓(xùn)練100次得到的準(zhǔn)確率為0.9376,可以接著增加訓(xùn)練次數(shù)或者提高神經(jīng)網(wǎng)絡(luò)的層次結(jié)構(gòu)深度來提高準(zhǔn)確率。


  使用ann神經(jīng)網(wǎng)絡(luò)的模型結(jié)構(gòu)非常小,因?yàn)橹皇潜4媪藱?quán)重參數(shù)。

01.png

  可以看到整個(gè)模型文件的大小才1M,而svm的大小為十多兆,knn的為幾百兆,因此使用ann神經(jīng)網(wǎng)絡(luò)更加適合部署在客戶端上。


  接下來使用ann進(jìn)行圖片的測(cè)試識(shí)別:


  import cv2
  import numpy as np
  if __name__=='__main__':
  #讀取圖片
  img=cv2.imread('shuzi.jpg',0)
  img_sw=img.copy()
  #將數(shù)據(jù)類型由uint8轉(zhuǎn)為float32
  img=img.astype(np.float32)
  #圖片形狀由(28,28)轉(zhuǎn)為(784,)
  img=img.reshape(-1,)
  #增加一個(gè)維度變?yōu)?1,784)
  img=img.reshape(1,-1)
  #圖片數(shù)據(jù)歸一化
  img=img/255
  #載入ann模型
  ann=cv2.ml.ANN_MLP_load('minist_ann.xml')
  #進(jìn)行預(yù)測(cè)
  img_pre=ann.predict(img)
  #因?yàn)榧せ詈瘮?shù)sigmoid,因此要進(jìn)行置信度處理
  ret=img_pre[1]
  ret[ret>0.9]=1
  ret[ret<0.1]=0
  print(ret)
  cv2.imshow('test',img_sw)
  cv2.waitKey(0)


  運(yùn)行程序,結(jié)果如下,可見該模型正確識(shí)別了數(shù)字0.

02.png

  小編就為大家介紹到這里了,希望可以為大家?guī)砀嗟膸椭?/p>

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/127978.html

相關(guān)文章

  • 初學(xué)者怎么選擇神經(jīng)網(wǎng)絡(luò)環(huán)境?對(duì)比MATLAB、Torch和TensorFlow

    摘要:本報(bào)告面向的讀者是想要進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域的學(xué)生和正在尋找新框架的專家。其輸入需要重塑為包含個(gè)元素的一維向量以滿足神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)目前代表著用于圖像分類任務(wù)的較先進(jìn)算法,并構(gòu)成了深度學(xué)習(xí)中的主要架構(gòu)。 初學(xué)者在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的時(shí)候往往會(huì)有不知道從何處入手的困難,甚至可能不知道選擇什么工具入手才合適。近日,來自意大利的四位研究者發(fā)布了一篇題為《神經(jīng)網(wǎng)絡(luò)初學(xué)者:在 MATLAB、Torch 和 ...

    yunhao 評(píng)論0 收藏0
  • opencv python 基于KNN的手寫識(shí)別

    摘要:我們的目標(biāo)是構(gòu)建一個(gè)可以讀取手寫數(shù)字的應(yīng)用程序?yàn)榇耍覀冃枰恍┖透綆б粋€(gè)在文件夾中,它有個(gè)手寫數(shù)字每個(gè)數(shù)字個(gè)每個(gè)數(shù)字是圖像所以首先要將圖片切割成個(gè)不同圖片每個(gè)數(shù)字變成一個(gè)單行像素前面的個(gè)數(shù)字作為訓(xùn)練數(shù)據(jù),后個(gè)作為測(cè)試數(shù)據(jù)輸出進(jìn)一步 OCR of Hand-written Data using kNN OCR of Hand-written Digits 我們的目標(biāo)是構(gòu)建一個(gè)可以讀取...

    wing324 評(píng)論0 收藏0
  • opencv python 基于SVM的手寫識(shí)別

    摘要:最后,與前一種情況一樣,我們首先將大數(shù)據(jù)集拆分為單個(gè)單元格,對(duì)于每個(gè)數(shù)字,保留個(gè)單元用于訓(xùn)練數(shù)據(jù),剩余的個(gè)數(shù)據(jù)保留用于測(cè)試。 OCR of Hand-written Data using SVM 在kNN中,我們直接使用像素強(qiáng)度作為特征向量。 這次我們將使用方向梯度直方圖(HOG)作為特征向量。在計(jì)算HOG之前,使用其二階矩來校正圖像: def deskew(img): m ...

    seanHai 評(píng)論0 收藏0
  • [譯]OpenCV OCR and text recognition with Tesseract

    摘要:納入深度學(xué)習(xí)模型來進(jìn)一步提升準(zhǔn)確率只是時(shí)間問題,事實(shí)上,這個(gè)時(shí)間已經(jīng)到來。最新版本支持基于深度學(xué)習(xí)的,準(zhǔn)確率顯著提高。該函數(shù)使用基于深度學(xué)習(xí)的文本檢測(cè)器來檢測(cè)不是識(shí)別圖像中的文本區(qū)域。高效使用概率最高的文本區(qū)域,刪除其他重疊區(qū)域。 By Adrian Rosebrock on September 17, 2018 in Deep Learning, Optical Character ...

    gnehc 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

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

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

0條評(píng)論

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