實用性高的那種教程:使用Tensorflow和Keras進行手寫識別
手寫體識別(也就是由手寫體分類)是一個具有挑戰性的問題,因為每個個體寫作風格有巨大的差異。解決這個問題的傳統方法是提取諸如不同字母的曲率、字母b/w的間隔等的語言相關特徵,然後使用類似SVM的分類器來區分作者。在本文中,將會展示一個基於深度學習的方法來識別這些功能。我們將把小塊的手寫圖像傳遞給CNN,並用softmax分類損失進行訓練。
GIF
為了演示這種技術的有效性,讓我們用它來分類英文手寫文本。
完整的代碼:
https://github.com/priya-dwivedi/Deep-Learning/blob/master/handwriting_recognition/English_Writer_Identification.ipynb
獲取的數據
IAM手寫資料庫是英文手寫圖像的最大資料庫。它有1539頁由600多名作家編寫的掃描文本。為了達到這個演示的目的,我們將拿出數量最多的前50名作家。對於每個作者來說,資料庫是由他們編寫的單個句子的集合。以下是其中一個作者的示例:
神經網路不需要太多的原始數據預處理。所以我們不會對這些圖片做任何修改,而是將完整的圖片傳遞給神經網路,還會傳遞一小段文字。
生成的補丁數據
我們希望神經網路能夠理解個體作家的寫作風格,也希望這個神經網路能獨立於文本(可以在任何語言上工作)。所以不是傳遞單個的句子或單詞,而是傳遞隨機的文本片段。這是通過從每句話隨機裁剪113x113大小的補丁來完成的。下面的圖片是8個這樣的補丁拼貼。
8個補丁組成的拼貼畫
我們可以編寫一個生成器函數來移動每個句子,並從中產生隨機的圖像塊。對於每個圖像,我們將限制到可以生成的補丁總量的30%。
模型和結果
為此,我們可以使用Tensorflow後端在Keras中構建一個卷積神經網路(CNN)。這裡將使用具有多個卷積和maxpool層的標準CNN,一些密集層和一個softmax激活的最終輸出層。在卷積層和密集層之間使用RELU激活,並使用Adam優化器對模型進行優化。
模型的大小需要與數據的大小成正比。三個卷積最大層和幾個緻密層就足以解決這個問題。具體參見下面的模型總結:
CNN模型概述
經過一些超參數調整之後,我們在模型測試數據集上損失了94%。
請參閱下面的兩個補丁,該模型被分類為同一個作者。 「t」的形狀看起來非常相似,所以也會讓人直觀地覺得屬於同一個作者。
總結
使用深度學習的手寫識別是一種非常強大的技術,原因如下:
·它自動識別出強大的功能
·我們採用隨機補丁的方法使模型文本獨立
·預測精度高,可以在實際應用中使用
TAG:全球大搜羅 |