最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年07月11日 15:25:03   作者:Keras深度學(xué)習(xí)  
這篇文章主要介紹了opencv(python)使用ann神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字,由于這里主要研究knn算法,為了圖簡單,直接使用Keras的mnist手寫數(shù)字解析模塊,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

opencv中也提供了一種類似于Keras的神經(jīng)網(wǎng)絡(luò),即為ann,這種神經(jīng)網(wǎng)絡(luò)的使用方法與Keras的很接近。
關(guān)于mnist數(shù)據(jù)的解析,讀者可以自己從網(wǎng)上下載相應(yīng)壓縮文件,用python自己編寫解析代碼,由于這里主要研究knn算法,為了圖簡單,直接使用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ù)。

在這里插入圖片描述

可以看到整個(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.

在這里插入圖片描述

到此這篇關(guān)于Python Opencv使用ann神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字的文章就介紹到這了,更多相關(guān)python opencv識(shí)別手寫數(shù)字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決torch.to(device)是否賦值的坑

    解決torch.to(device)是否賦值的坑

    這篇文章主要介紹了解決torch.to(device)是否賦值的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 詳解python程序中的多任務(wù)

    詳解python程序中的多任務(wù)

    這篇文章主要介紹了python程序中多任務(wù)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • python數(shù)據(jù)結(jié)構(gòu)鏈表之單向鏈表(實(shí)例講解)

    python數(shù)據(jù)結(jié)構(gòu)鏈表之單向鏈表(實(shí)例講解)

    下面小編就為大家?guī)硪黄猵ython數(shù)據(jù)結(jié)構(gòu)鏈表之單向鏈表(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • python 實(shí)現(xiàn)目錄復(fù)制的三種小結(jié)

    python 實(shí)現(xiàn)目錄復(fù)制的三種小結(jié)

    今天小編就為大家分享一篇python 實(shí)現(xiàn)目錄復(fù)制的三種小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制

    Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制

    K線圖又稱蠟燭圖,常用說法是“K線”。K線是以每個(gè)分析周期的開盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)繪制而成。本文將利用Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制,需要的可以參考一下
    2022-08-08
  • python爬蟲 爬取超清壁紙代碼實(shí)例

    python爬蟲 爬取超清壁紙代碼實(shí)例

    這篇文章主要介紹了python爬蟲學(xué)習(xí) 爬取超清壁紙代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python 已知三條邊求三角形的角度案例

    python 已知三條邊求三角形的角度案例

    這篇文章主要介紹了python 已知三條邊求三角形的角度案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 實(shí)例講解Python編程中@property裝飾器的用法

    實(shí)例講解Python編程中@property裝飾器的用法

    裝飾器中蘊(yùn)含著很多Python的進(jìn)階技巧,@property也不例外,比如文后會(huì)講到的快速進(jìn)行代碼重構(gòu)的一個(gè)例子,這里我們就來以實(shí)例講解Python編程中@property裝飾器的用法:
    2016-06-06
  • Python處理unicode字符的方法詳解

    Python處理unicode字符的方法詳解

    這篇文章主要介紹了Python處理unicode字符的方法詳解,unicodedata中定義了所有Unicode字符的字符屬性,主要包含兩個(gè)功能,其一是根據(jù)名字查找字符;其二是給定字符查找其對(duì)應(yīng)的信息,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于Python下的Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy)

    關(guān)于Python下的Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy)

    這篇文章主要介紹了關(guān)于Python下的Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

涟源市| 勃利县| 阿克苏市| 抚松县| 洱源县| 勃利县| 政和县| 逊克县| 固镇县| 安乡县| 蓝山县| 内乡县| 开化县| 哈密市| 巴青县| 英德市| 普陀区| 元朗区| 驻马店市| 佳木斯市| 专栏| 郑州市| 固阳县| 文水县| 象州县| 北京市| 鞍山市| 鄂伦春自治旗| 仁化县| 阳江市| 广丰县| 双牌县| 迁安市| 蒲江县| 清远市| 海丰县| 莱芜市| 宁明县| 营山县| 肇东市| 黄浦区|