深度學習與爬蟲實例教學--深度學習模型構建和訓練


深度學習與爬蟲實例教學

聲明:該教程不會直接貼代碼,以免凌亂,你需要先下載項目代碼(第一章)並結合來看,教程中會告訴你具體代碼放在什么位置,以及作用,用法

深度學習實現驗證碼自動識別,爬蟲自動認證防ban

我們將學習如何構建一個用於驗證碼識別的深度學習模型和結合爬蟲進行構建一個項目

教學大綱

項目基本介紹和體驗
深度學習模型構建和訓練
自動識別知乎認證碼並實現抓取
擴展之結合scrapy,Django構建完整項目


構建網絡

網絡模型如下圖

具體代碼請見項目目錄Unofficial-Zhihu-API/ufzh下的orcmodel.py模塊,該模塊只有一個類LSTMOCR,該類維護了整個網絡的模型構建、可視化tensorboard的記錄、loss、優化器等等。

模仿驗證碼數據

為什么要模仿驗證碼數據呢,我們回想一下上一章節說到的我們准備用遷移學習方案來實現知乎驗證碼的識別,而遷移學習的前提是我們有一個別的類似的場景的模型,我們現在就是要模仿驗證碼數據,並拿這些數據訓練得到的模型就是我們所說的“別的類似的場景訓練好的模型”,得到這個模型我們才可以進行遷移學習。

我們可以看出知乎驗證碼(忽略傾斜等效果,因為我們也可以做傾斜等處理)的字體跟euphemia.ttf字體很類似,注意了是類似,你也可以覺得它跟其他字體類似並拿那個字體為模版,隨意點即可,

敲黑板敲黑板,知乎驗證碼除了上面的實體,還有藝術字體的空心字體,空心字體要不要也模仿呢,不用,為啥啊,因為我們只是需要一個“別的類似的場景訓練好的模型”,不需要包括那么全,只需要在遷移學習的時候少量包含空心字體的訓練樣本進行遷移學習就可以了,這也是遷移學習的強大體現

具體代碼請見項目目錄Unofficial-Zhihu-API/train_workspace下的pai_image.py模塊,該模塊包含ImageCaptcha類,該類create_captcha_image方法就是模仿了知乎驗證碼的生成,注意,只是模仿,相似度還是有差距的,人眼看起來可能沒那么大差別,但是對於像素上的差別,毛刺,平滑等等,實際上算是差別很大的

訓練入口

具體代碼請見項目目錄Unofficial-Zhihu-API/train_workspace下的main.py模塊,該模塊包含一個方法train,train方法會負責加載模型,加載圖數據以及label(由名稱分離出來)到內存中,然后進行訓練
用到的命令行參數包含在utils.py模塊中,主要的參數有:
restore 是否加載之前訓練過的參數,可以實現斷點續接,隨時隨地斷了再繼續訓練
initial_learning_rate 初始化學習率
train_dir 訓練圖片的目錄
val_dir 驗證圖片的目錄

代碼用法

本章節介紹了orcmodel.py模塊,該模塊包含了網絡模型,pai_image.py模塊,該模塊包含了模仿驗證碼的生成代碼,代碼用法如目錄Unofficial-Zhihu-API/train_workspace下的helper.py模塊

打開終端,cd到目錄Unofficial-Zhihu-API/train_workspace,打開ipython,並輸入下列代碼

# 刪除./data/train目錄
# 准備一下200000張圖片,你可以調整,如果你內存很大
# 你可以生成40萬,內存不大可以生成5萬
# 以免圖數據太多,內存不夠導致運行訓練的時候會報錯
import helper
# 生成訓練數據
helper.gen_simulated_img('./data/train', 200000) # 地二個參數是生成200000張
# 生成驗證數據
helper.gen_simulated_img('./data/val', 2000)

生成過程中就可以在根目錄的data/train目錄下看到如下圖,每張圖的名稱格式為: id_正確驗證碼.png

數據生成完畢之后,打開終端,cd到根目錄Unofficial-Zhihu-API/train_workspace
運行一下命令

python main.py --restore False --initial_learning_rate 1e-5 --train_dir data/train --val_dir data/val

訓練會產生summary日志,可以用tensorboard可視化查看訓練過程中cost的變化,打開終端,cd到目錄Unofficial-Zhihu-API/train_workspace,輸入下列命令,然后打開http://localhost:6006/#scalars查看cost變化,打開http://pai-pc:6006/#graphs查看圖模型

tensorboard --logdir ./log

如果你電腦的GPU不錯,你就用tensorflow-gpu版本訓練,我是用的GTX1060 6
G的GPU訓練的,如果你沒有GPU或者GPU很爛,你可以去用百度GPU訓練,我曾經用過,2塊多一個小時吧,還可以接受

訓練到正確率有90%以上之后就可以停止了,這個時候我們就得到一個“別的類似的場景訓練好的模型”,然后可以進入遷移學習部分了

進行遷移學習

上面已經獲得一個“別的類似的場景訓練好的模型”,但是對於真實的知乎驗證碼,識別率低到你懷疑人生,所以,咱們開始進行遷移學習知乎真實驗證碼吧

在項目根目錄的data目錄下,有一份打包文件遷移學習樣本.zip,這個是我自己抓取下載並自己手工標記的2000張真實的知乎驗證碼,心累啊,2000張都標記到我手斷了,然后解壓放在./data/zhihu_train和./data/zhihu_val,因為真實的知乎驗證碼數據太珍貴了,我們就直接讓訓練和測試數據都一樣了,然后運行下列命令進行遷移學習

python main.py --restore True --initial_learning_rate 1e-5 --train_dir data/zhihu_train --val_dir data/zhihu_val --log_dir zhihu_log

還是一樣的用tensorboard實現可視化,不過這回我們生成summary日志的地址變成zhihu_log了

tensorboard --logdir ./zhihu_log

訓練到90%以上正確率就可以了

獲得自己訓練的結果之后找到python的類似site-packages/ufzh-1.0.0-py3.6.egg/ufzh/checkpoint這樣的目錄,替換里面的checkpoint即可用自己訓練的參數進行測試,替換四個文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM