『壹』 圖像識別 | 基於Keras的手寫數字識別(含代碼)
前沿
人工智慧的浪潮已經席捲全球,深度學習(Deep Learning)和人工智慧(Artificial Intelligence, AI)等詞彙也不斷地充斥在我們身邊。人工智慧的發展是一個三起兩落的變化,90年代期間,知識推理>神經網路>機器學習;2005年左右,機器學習>知識(語義網)>神經網路;而從2017年之後,基於深度學習的神經網路>知識(知識圖譜)>機器學習。
卷積神經網路(convolutional neural network, CNN)作為深度學習中的代表,最早的靈感是來源於1961年Hubel和Wiesel兩位神經生物學家,在對貓視覺皮層細胞的實驗中,發現大腦可視皮層是分層的(CNN中的分層網路結構與其如出一轍)。深度學習作為機器學習(ML)的一個子領域,由於計算機能力的提高和大量數據的可用性,得到了戲劇性的復甦。但是,深度學習是否能等同或代表人工智慧,這一點筆者認為有待商榷,深度學習可以認為是目前人工智慧發展階段的重要技術。由於本文主要撰寫關於深度學習的入門實戰,關於細節概念不做深入研究,下面筆者從實際案例,介紹深度學習處理圖像的大致流程。
目錄:
以手寫識別數字為例,作為深度學習的入門項目,本文以Keras深度學習庫為基礎。其中使用的tensorflow等模塊需要提前配置好,同時注意模型,圖片保存、載入的文件路徑問題。在自己的計算機上運行時,需要創建或修改。下面的流程包括:使用Keras載入MNIST數據集,構建Lenet訓練網路模型,使用Keras進行模型的保存、載入,使用Keras實現對手寫數字數據集的訓練和預測,最後畫出誤差迭代圖。
手寫數字數據集介紹:
手寫數字識別幾乎是深度學習的入門數據集了。在keras中內置了MNIST數據集,其中測試集包含60000條數據,驗證集包含10000條數據,為單通道的灰度圖片,每張圖片的像素大小為28 28.一共包含10個類別,為數字0到9。
導入相關模塊:
載入MNIST數據集
Keras可實現多種神經網路模型,並可以載入多種數據集來評價模型的效果,下面我們使用代碼自動載入MNIST數據集。
顯示MNIST訓練數據集中的前面6張圖片:
數據的預處理
首先,將數據轉換為4維向量[samples][width][height][pixels],以便於後面模型的輸入
為了使模型訓練效果更好,通常需要對圖像進行歸一化處理
最後,原始MNIST數據集的數據標簽是0-9,通常要將其表示成one-hot向量。如訓練數據標簽為1,則將其轉化為向量[0,1,0,0,0,0,0,0,0,0]
模型的建立與計算
訓練模型的參數設置:
本文使用Lenet網路架構,下面定義Lenet網路結構,若要更改網路結構,如用VGGNet,GoogleNet,Inception,ResNets或自己構建不同的網路結構,可以直接在這一塊函數內進行修改。
再附上兩個經典的模型:
VGG16:
GoogleNet:
設置優化方法,loss函數,並編譯模型:
本文使用生成器以節約內存:
結果分析
作出訓練階段的損失、精確度迭代圖,本文將epoch設置為10,已達到0.98的准確率(代碼、圖像如下所示)。
公眾號:帕帕 科技 喵
歡迎關注與討論~
『貳』 按鍵精靈里,圖片更換後識別點擊實現代碼
1.把變化前的圖截圖(不要截太滿),存為A.bmp,然後添加到附件裡面。
2.復制下面代碼到腳本運行測試即可
Do
FindPic 0,0,2000,2000,"Attachment:\A.bmp",0.9,intX,intY
If intX > 0 And intY > 0 Then
MoveTo intX,intY
Delay 100
LeftDoubleClick 1
Delay 100
End If
Loop
注意這里LeftDoubleClick 1,最好用下面三種方式也都測試一遍,以保證你的機器有效。
1.LeftDoubleClickS
2.LeftDoubleClickH
3. LeftClick 1
Delay 20
LeftClick 1
最好關閉360運行