【人工智能】圖像識別之小白天書——驗證碼篇(4)

介紹

大家好!非常高興又和大家見面了!不知道上一篇那些濃濃的理論知識大家理解了多少?有了那些上乘的內功打下根基,我今天再傳授你一些招式,相信很快你就可以獨當一面了!我們今天要學的就是一套上手極易!變化很大!威力驚人的招式!


這套武功的名字就叫Keras寶典!欲練此功,必先自…必先熟讀並理解上一篇!

Keras是一個高層神經網絡庫,Keras由純Python編寫而成,可以很好的運行於Tensorflow庫或Theano庫。Keras爲支持快速實驗而生,能夠把你的想法、創意迅速轉換爲結果,如果你有如下需求,請選擇Keras:

·        簡易和快速的原型設計(Keras具有高度模塊化,極簡,可擴充特性)

·        支持CNN(卷積神經網絡)和RNN(循環神經網絡),或二者的結合

·        支持任意的鏈接方案(包括多輸入和多輸出訓練)

·        無縫CPU和GPU切換


上述是官方對Keras的評價。 其實現在Python的機器學習庫有很多,據不完全統計有139個之多!它們各具特色,甚至還有帶圖形界面的,囧。其中公認最成熟的要屬Theano和谷歌的力推的親兒子Tensorflow!而我們要學的Keras可以任意在這兩個優秀的庫之間切換,並且具備了學習成本低和研發、迭代速度快等很多優點,可謂老少皆宜,居家必備之良品!


環境&配置

從這一章開始咱們的環境均使用類unix系統。

這一章咱們先基於Theano backend,至於Tensorflow,後面有關於的它的詳細介紹及實戰講解,咱們也得照顧一下大谷歌的親兒子是不是!(它現在確實非常流行)

安裝過程可以說是非常簡單,也可以說是非常艱難,我們來看看官方給出的安裝指南:

>>> sudo pip install -U --pre pip setuptools wheel

>>> sudo pip install -U --pre numpy scipy matplotlibscikit-learn scikit-image

>>> sudo pip install -U --pre theano

>>> sudo pip install -U --pre keras

然後進入Python終端驗證:


圖1 驗證環境是否安裝成功

沒有報錯就完成了……

呵呵我真想install你一臉!反正我是沒成功。實際上你可能遇上各種各樣的問題需要調上一天時間!文章結束我會把一些最有用的填坑指南網址附上,爭取不管你遇到什麼奇葩的問題都可以找到解決的辦法。

看我圖中顯示的是“Using Theanobackend”,爲了避免默認是Tensorflow backend,去這裏修改:~/.keras/keras.json,這裏的“backend”改成Theano即可。


圖2 keras.json配置文件

使用

這一張我們來用keras來搭建一個簡單的神經網絡,訓練它識別一些驗證碼。本章主要講搭建網絡結構來訓練嘛,圖片就偷點懶,用我們小白天書第一篇中切割出來的那些驗證碼,下面就讓我們用神經網絡代替KNN算法,識別驗證碼!

按照慣例,第一件事還是準備樣本!正如我們前文所說的,這個打標的過程就沒那麼好玩了…


圖3 樣本集

根據驗證碼的難易程度,切出相應數量的樣本打標。這個還是我們第一章用的驗證碼,很簡單,所以每一類只要有幾個樣本就夠了,我這裏準備了284個樣本,儘可能的去覆蓋每一類所有的可能切割出來的形態。正某人就曾經有過手動打4000個標的經歷,那酸爽,打一會兒就睡着了,醒了繼續打……

樣本準備好了,現在就開始建立模型吧!網上現在大部分教程都是停留在構建網絡結構上,今天我們就把高高在上的神經網絡就帶入實際的應用場景,針對某一個驗證碼來一次構建網絡+訓練模型+識別的全教程!並且把過程一一細化,讓你知道每一行代碼是在做什麼。直接上交一份代碼,詳細解析寫在註釋裏:


圖4 建立訓練模型

這就是全部模型結構的代碼了,對於我們這種比較簡單的驗證碼,不需要多複雜的網絡結構,只要恰當的三層加上合適的目標函數、優化函數就可以了。

建立好模型之後,我們來看訓練的相關代碼,圖5、4是連在一起的,圖5的前半段也是屬於圖4中train_examples方法,要注意。


圖5 訓練相關代碼

不出意外的話,控制檯應該輸出了這樣的結果:


圖6 訓練log

由於early stop的機制,我們進行了102輪的迭代就結束了。結束時我們的識別正確率和驗證的正確率從都已經到了95%以上,訓練損失和驗證集損失都處於一個較小的狀態,由於這個驗證碼相對比較簡單,這就完全足夠了。複雜的驗證碼則要求損失越小越好。

恭喜你!!!你已經完成一次完整的機器訓練的任務,提升到了2級!

已經可以用剛纔訓練出來的模型(就是代碼訓練完成後生成的json和weight結尾的文件)!識別代碼如下:


圖7 識別圖片

運行程序,得到結果:



圖8 識別結果展示

哈哈!是不是覺得自己離大神又近了一步!沒錯!你已經具備了用Keras簡單的搭建人工神經來識別驗證碼了!如果熟練掌握這些技能,就可以輕鬆地K.O市面上50%以上的驗證碼了,是不是很牛?

那另外那50%呢?比較複雜的驗證碼,只用普通的神經網絡來訓練就有些相形見絀了,我們需要更厲害的黑科技!那就是CNN(卷積神經網絡)和RNN(循環神經網絡)。只要你會Keras,用它們也是很簡單滴~在稍後奉上的《小白天書進階版》中,一定會帶你瞭解各種高深的神經網絡!持續關注我們吧!

附:安裝keras填坑指南
Keras中文文檔:http://keras-cn.readthedocs.io/en/latest/
import報錯:http://zhanxw.com/blog/2013/11/%E5%AE%89%E8%A3%85theano/

疑難雜症:http://blog.csdn.net/leexurui/article/details/52352094

失敗解決辦法:http://blog.csdn.net/leexurui/article/details/52352094 



微信掃一掃
關注該公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章