深度學習與爬蟲例項教學

2021-08-15 18:34:42 字數 2780 閱讀 7328

深度學習與爬蟲例項教學

深度學習實現驗證碼自動識別,爬蟲自動認證防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/www.wancyule.com  train_workspace,開啟ipython,並輸入下列**

# 刪除./data/train目錄

# 準備一下200000張,你可以調整,如果你記憶體很大

# 你可以生成40萬,記憶體不大可以生成5萬

# 以免圖資料太多,記憶體不夠導致執行訓練的時候會報錯

import helper

# 生成訓練資料

helper.gen_simulated_img('./data/train', 200000) # 地二個引數是生成200000張

# 生成驗證資料

helper.gen_simulated_img('.www.douniu828.com /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 .www.thd729.com /log

如果你電腦的gpu不錯,你就用tensorflow-gpu版本訓練,我是用的gtx1060 6

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

進行遷移學習

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

python main.py --restore true --initial_www.dfgj729.com 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爬蟲廣度優先與深度優先 例項說明

感覺網上的文章都是以這篇為中心去照搬的 不過這篇文章也確實把廣度跟深度優先演算法說完了,但感覺沒有爬取例項的話還是挺抽象的,所以就配合例子說一下廣 深度優先。首先我們要知道 廣度優先 把同一等級的url全部爬取網然後再往下一級的url去爬取 深度優先 把乙個分頁的所有等級的url從淺到深爬取完後再爬...

《神經網路與深度學習》的教學方法

神經網路,是人們發明的最優美的程式設計正規化之一。在通常程式設計模式下,人們告訴計算機做些什麼,把乙個大問題拆解成多個小問題,並精確定義任務,以方便計算機去執行。神經網路則與此相反,人們並不告訴計算機如何求解問題,而是由計算機通過觀察資料進行學習,自行得出解決問題的辦法。人們期待神經網路能從資料中自...

天蛛爬蟲學習筆記 Requests爬蟲例項

定義乙個爬蟲的通用框架 import requests defgethtmltext url 爬蟲通用框架,try 捕捉到錯誤後會執行except的語句 r requests.get url r.raise for status 返回值若為200,則表示正常訪問 繼續執行,否則會返回httperro...