班主任之眼!——看穿彥正瑪少女の薄紗

簡介

這是一篇正經的技術科普文章,盡量使用淺顯易懂的語言介紹圖像處理的知識以及圖片選擇類驗證碼識別的一種方法。

本方法采用無監督學習(文字識別采用了有監督學習,但可以改為無監督),選擇準確率達到了78%,相關研究成果已被學術會議CRV 2017接受,全文禁止轉載,論文具體內容已由學校方面聯系相關單位,代碼會在文章正式發表后公開。

為了讓更多人讀懂,我調整了敘述的順序和嚴謹性,并有意忽略了一些數學和實現上的細節,專業人士和對實現感興趣的可以閱讀論文或參考源代碼(源代碼只是驗證模型用,中間反復修改,目標是能跑就行,有的地方可能寫得很丑陋,見笑)。

當然,如果對技術細節感興趣的人多的話(圖片哈希,計算優化,標簽傳播算法等),或許我可以開一個Live講一講。

第一次在知乎分享技術文章,如果覺得我寫得不錯,請通過文末打賞鼓勵一下吧,有空的話我會分享更多有意思的內容。

序言

雖說公認的國民岳父是韓寒,可是畢竟小野只有一個。其實在我心中,真正的國民岳父乃我當朝重臣鐵道部君。別不承認,君不見逢年過節有多少人抱著鐵道部君的大腿哭喊道:“鐵道部君,爸爸,我七十歲老母催得緊,求你給我上一個吧,給我上一個吧!”

新世紀以來,鐵道部君抓住時代機遇,真抓猛干,麾下誕生了一大批秀色可餐的少女,然而我最感興趣的,卻是其中最神秘的彥正瑪小姐。

說到這彥正瑪小姐,她幾乎從不以全貌示人:她是如此的多變,以至于凡人只能看到她薄紗后萬千面孔之一二,還埋怨她看上去全是馬賽克。平庸的人自然無法欣賞這樣的美麗,被下身支配的人們更只會在乎是否身輕體柔易推倒。可對于我來說,推導比推倒更有趣,更何況,驗證碼知識遮擋住了我們的視野,卻放飛了我們的想象(劉翔應該最懂)。這千千萬萬的面孔中,包含了日月星辰,火水土石,寒暑陰陽……我就是喜歡如此博學而又如此低調的姑娘。

若以常人的視角去看她,她的變化萬千,陰陽不定,低像素的圖片和扭曲的文字組合在一起,混沌雜亂,毫無規律,毫無美感。可縱然她有萬般變化,古語有云:“道可道,非恒道;名可名,非恒名。”獨特的少女需要從獨特的角度去欣賞,兩年以來,我一直默默端詳她,試圖撩開她的薄紗,觸碰她最隱秘的本質。終于,領悟了班主任之眼的我,逐漸揭開了她的秘密……

班主任之眼

哎喲,作為三好學生這種文風我還是寫不來,我還是回歸我平時的說話方式吧。既然這是一篇科普文,就是面向大眾的。

雖然驗證碼識別這個話題總是跟什么機器學習、人工智能等高深的概念在一起出現,看似不可企及。但實際上,一些看似復雜的問題,往往有簡單而精妙的思路讓人拍案叫絕,所謂“千里之堤潰于蟻穴”。這也正是研究系統安全的樂趣。今天就給大家介紹一下我畢業設計的項目——破解圖像選擇型驗證碼。

什么是驗證碼?

驗證碼的正式全稱叫做“全自動區別人類與計算機的公開圖靈測試”,通過向用戶提問的方式區分人和計算機。驗證碼由卡內基梅隆大學的三位學生發明,被廣泛用于安全領域,防范程序對系統進行的攻擊破解。而我在本科期間就被這所學校的教科書震撼,之后申請到研究生,并以驗證碼作為我的畢業設計項目,不得不說是一種緣分。

最常見的驗證碼自然是扭曲的圖形和數字驗證碼啦,不過今天我們要說的是另一種,也是中國人最熟悉的——圖片選擇型驗證碼。


上圖大家看到的就是最開始使用圖片選擇型驗證碼的公司——Google的驗證碼。然而我的畢業設計并沒有選擇這種驗證碼來做實驗,因為——它是在太簡單了!

開個玩笑,其實除了它“簡單”之外,更重要的原因是Google本身就是網絡爬蟲起家,它的反爬蟲技術太厲害了,我采集不到足夠的數據……想當年,我做美國數學建模比賽的時候,采取換IP+模擬IE瀏覽器動作的方法才勉強能夠抓取足夠做實驗的數據,到如今,只怕難度還要翻番。

我清醒認識到了這一點的難度,于是我把魔爪伸向了……彥正瑪小姐!

關于彥正瑪小姐的討論,在知乎上已經足夠多了,比如:

12306 的 8% 正確率驗證碼是否比其他驗證碼更有效地擋住了黃牛黨?

如何評價 12306 的圖片型驗證碼?

@王貓貓@董春秋的答案給了我很大的啟發,在此表示感謝。

好了,啰啰嗦嗦說了這么多,下面進入正題:如何借助“班主任之眼”搞定這一類驗證碼。

可疑的巧合

我不知道在知乎的各位中學的環境如何,反正在我的高中,早戀是條高壓線,堅決不能碰,否則被教導處主任發現是要處分甚至勸退的。但是年輕的時候,誰能沒有一顆悸動的心?有的班主任不忍心事情發展到無可挽回的地步,看到苗頭就開始打預防針——他們都有獨特的技巧,往往一抓一個準。

多年后聊起來,老師說,最有效的一條準則是——

在學校或街上,碰到兩個男女學生單獨在一起或者一前一后走,就可能有事情;碰到兩次,就基本能夠確定關系。

來源:某年級組長

這就是所謂的“可疑的巧合”,英文叫做suspicious coincidence. 在老師的假設中,男女同學之間是互不相關的,就像丟骰子一樣,哪兩個點數一起出現這個事件本身是隨機的,而且概率應當想等。所以如果男女同學一起單獨出現,那每一次應該出現不同的組合;如果某對組合一起出現多次,那就違反了老師的假設——這就說明男女同學有關系。

這跟驗證碼又有什么關系呢?

一個驗證碼可以看做兩部分:文字和圖片。驗證碼向用戶提的問題是:找到和文字相關的圖片。

文字可以看做是男同學,圖片可以看做是女同學,他們之間的親密程度不一——有的如膠似漆,比如“航母”和航母的圖片;有的形同陌路,比如“肥皂”和毛巾的圖片。現在,為了不讓外人發現他們之間的關系,他們成批出現——一個文字標簽同若干相關和不相關的圖片混合在同一個驗證碼中。

想想驗證碼是怎么生成的?


假設有若干個類別,比如天鵝、海灘、航母、飛機等;每個類別下面有若干圖片。那么最簡單的【注1】生成驗證碼的步驟如下:

1、從所有類別的名稱中抽取一個作為當前驗證碼的文字,比如“天鵝”

2、從該類別下的圖片中隨機抽取至少一張張作為相關圖片,也就是用戶要去選取的答案,比如上圖中的第五(第二行第一個)和第七張圖(第二行第三個)。

3、從剩下的圖片中隨便選取幾張不相關的圖片,湊夠八張,就組成了如上圖所示的驗證碼。

如果有10個圖片的類別、每個類別有100張圖片,總共就有1000張圖片。那么對于每一個類別,只有10張圖是相關的,剩下900張都是不相關的。那么在一張選取目標是“手電筒”的驗證碼里,相關圖片的選擇只有10種,而不相關圖片的選擇有900種!

反過來想呢?如果你手中有1000張驗證碼都是要選取“天鵝”的驗證碼,那么天鵝的圖片至少需要出現1000次,也就是平均下來,天鵝這個類別的100張圖片平均每張要出現10次。而不是“天鵝”這個種類的900張中,平均每張出現的次數是0.9次!

雖然這只是平均值,但確實是一個足以利用的巨大差距。

同樣的,相關和不相關圖片共同出現在一個驗證碼中概率差距也十分巨大,這里就留給學有余力的同學自己去計算了(需要做假設)。根據我們在部分樣本上的采樣結果,如果兩張圖片一起出現2次,那么他們有66%的可能是同一類的;如果兩張圖片一起出現三次或三次以上,那么他們有98%的可能性是屬于同一個種類。

而班主任之眼,就是從這被刻意掩蓋的關系中,尋找那些發生概率明顯跟假設不一樣的關系,從而確定文字和圖片,以及圖片和圖片的“親密程度”,也就是相關度。

利用文字和圖片的相關度,我們可以做什么?

先反過來思考一個問題,我們在做這類驗證碼選擇題的時候,真的需要理解它的含義嗎?一般人在識別驗證碼的時候,思維流程圖是這樣的:


我們的大腦分別把文字和圖像經過一系列復雜的轉換對應到了某個抽象的實體,最后再經過比較決定他們是否相關。可是我們做決策一定要走完這個流程嗎?

有一個著名的思想實驗叫做“中文房間”:

一個對漢語一竅不通,只說英語的人關在一間只有一個開口的封閉房間中。房間里有一本用英文寫成的手冊,指示該如何處理收到的漢語訊息及如何以漢語相應地回復。房外的人不斷向房間內遞進用中文寫成的問題。房內的人便按照手冊的說明,查找到合適的指示,將相應的中文字符組合成對問題的解答,并將答案遞出房間。

來源:維基百科
https://zh.wikipedia.org/wiki/%E4%B8%AD%E6%96%87%E6%88%BF%E9%97%B4

也就是說,要學會翻譯,并不需要真正“理解”圖片或者文字所對應的抽象實體。那么類似地,在識別驗證碼的時候無需理解真正的實體是什么,只需要按照某種規則將文字和圖像對應起來就可以了:


要做出正確選擇,只需要通過某種標準確定文字和圖片是否關聯就好——這恰恰是我們可以通過之前所說圖片和文字的“親密程度”可以獲取的信息。而這種標準,就是“中文房間”中的手冊。

試想,如果積累足夠多的驗證碼的統計數據,對于上圖所示驗證碼,圖片與“天鵝”文字標簽一起出現的次數如下,那么做選哪幾張是否就變得顯而易見了?

至此,只要我們有足夠多的數據,我們就可以根據統計的方法,在圖片和文字之間建立關聯,從而做出推測。這是不是太簡單了?實際上,就是這么簡單。下圖是我們實驗中統計的共同出現2次的幾組圖片,根據我們統計有大概20%~30%屬于同一個類別,共同出現3次以上的圖片一起出現的概率更是高達96%:


好了,說到這里,論文方法最核心、最基礎的思想已經講解完了。理論上,有足夠的金錢或者資源,這個方法已經足夠——像360、金山那樣自己開發瀏覽器的公司,只要能夠從用戶那里采集點擊數據,用這種方法破解驗證碼簡直易如反掌。

榨干他們!

但是作為畢業設計,這樣的方案是不行的,因為圖庫的實在是太大了,圖片種類也太多了。根據估算,圖庫的數量應該在千萬的級別,圖片類別根據公開的報道來說應該有600左右——但實際上根據我們搜集的三百萬張驗證碼來看,種類只有230種【注2】。

這意味著什么?這意味著,如果他有一百萬張圖片,而我們恰恰也只采集了一千萬張圖片的樣本,那么每張圖片平均只出現了十次——實際上,真實的情況是大部分圖片只出現一次或者零次,少部分出現了多次——總體而言服從長尾分布,如下圖所示:


這是統計學中的一個現象,有數學證明,在這里就不做展開了。

這就導致兩個問題:

1、成本過高。要窮盡他們所有的圖庫,需要數倍于他們圖庫的采樣——因為你有可能反復得到已經出現過的圖片。這其實是一個有趣的問題,跟氪金游戲中抽卡是一樣的,比如陰陽師中期望要抽多少次卡才能夠把所有的卡片集齊?(參考答案)。對于企業級用戶來說或許尚可以承受,但對于我這種畢業設計還得自己掏腰包的人來說,每花一塊錢都肉疼——何況又一次我的隊友手一抖,把本地運行變成了在亞馬遜服務器集群上運行,一個小時刷掉了一百多美元,我倆的研究支出就這么被迫翻倍。

2、理論水平太低。我可是要靠著它拿畢業證的,這么簡單粗暴地搞有辱師門。

所以我們試圖盡可能地壓榨樣本中包含的信息。在上述的內容中,我們只利用了文字與圖片共同出現次數這一信息。但實際上,還有下列兩個信息我們沒有利用:

1、圖片與圖片共同出現的次數

2、圖片本身所蘊含的特征(顏色、紋理等)

這兩個信息都可以描述圖片之間的相似度。

在之前我們已經提到過,同一類別的圖片出現在一起的概率是大大超過不同類別的圖片出現在一起的概率的。共同出現的頻率越高,圖片就越有可能屬于同一類——但這也不是絕對,因為會有部分圖片由于命運的安排一起出現多次的情況,但是畢竟是極少數。

這就如同見一見如故的愛情:最后在一起的叫一見鐘情,沒在一起的叫做一夜情——在相遇的第一天,你是很難知道到底是一見鐘情還是一夜情的……

而就圖片本身而言,相同種類的圖片往往看上去是很相似的,比如下圖所示的驗證碼中“荷葉”這一類的圖片,往往有大面積的綠色,這就是一個顯著的特征。


當然了,這都是對人而言的相似。對計算機而言,這些圖像都是一堆數字——更準確的說,是一個個向量,所以計算機可以有一個公式將這些向量轉化為兩個圖片的相似度。關于圖像、聲音在計算機里的表示,改天可以另外再寫一篇番外,里面也有不少有趣的話題。

有了這兩個東西,我們就可以在我們第一步的基礎上提高我們猜測的準確率了。怎么做呢?

首先,我之前講了,如果他有100萬張圖片,你如果搜集了125萬驗證碼,每個驗證碼有8張圖片,這樣總共你手上有1000萬張圖片。這1000萬張圖片并不是100萬張每張出現10次,而是少部分出現的頻率特別高,大部分出現的頻率特別少。這樣就分為兩種情況:

對于出現次數特別多的圖片,我們只需要看它跟哪個文字標簽出現得最多,我們就可以認為它是屬于哪一個類別的。

對于出現次數特別少的圖片,因為數據太少我們沒有辦法確定——因為和它一起出現的文字標簽可能只是偶然在一起。

出現次數多和出現次數少的圖片,我們都可以用跟它一起出現次數最多的文字標簽去做猜測他們的類別,但是二者對于我們的區別是——我們對猜測的信心不一樣。第一種,一個圖片出現了一百次,其中90次都是和文字標簽“雨靴”一起出現,那么我們幾乎可以肯定這個圖片是雨靴。對于第二種,一個圖片只出現了兩次,文字標簽分別是“航母”和“沙灘”,這時候我們就比較難分辨到底是航母還是沙灘了——也可能都不是。

能不能借助第一種情況我們擁有的信息來提升我們對第二種情況下猜測的準確率呢?萬幸我在最后一個學期選了一門叫做Machine Learning on Large Dataset的課,剛好講到了一個非常有用的方法:和諧領域!

開個玩笑,這種方法的英文名叫做Harmonic Field,正經的翻譯應該是調諧場。大致的思想是這樣的,如下圖所示:


假設圖3出現了一百次,圖6只出現了4次,但是圖6與圖3一起出現了2次,顯著高于兩張圖一起出現的期望次數——幾乎為0。這樣,雖然我們不能確定圖6是不是戒指,但是我對圖3是戒指非常有信心,同時由于圖3和圖6一起出現過2次,而且視覺上特征高度相似,所以我可以認為圖6也是戒指。

僅僅靠這樣的信息還不夠,因為在我們手中,有大量的只共同出現一次的圖片,而這些圖片中的絕大部分真的是純屬偶然一起出現的——但是,也有小部分比例是真的屬于同一種類并且一起出現的,這部分比例雖然不多,但是乘以基數(上千萬)還是非常大的,所以我們得想辦法盡可能把這部分有效信息也給榨出來。

共同出現的這個信息是用不上了,但是別忘了我們還有圖片本身。比如上面的幾個菠蘿的圖片,雖然是屬于不同的圖片,但是它們都有幾個顯著的視覺特征:圓形輪廓,粗糙的紋理,偏黃的顏色,頂上有綠葉……所以,這部分信息也可以利用起來。這些都有現成的模型可以直接拿來用,最著名的莫過于ImageNet,這個用巨大圖庫訓練出來的模型用在這里提取特征是在是再合適不過了。下圖中,左邊是我們實驗中所提取的視覺上高度相似的幾組圖片,右邊是我們樣本中圖片相似度的分布情況,可以看出來大致是正態分布:


然后我用我想出來的一個美妙的公式(自大一下)將二者融合起來,得到一個圖片之間的最終相似度,并用其作為圖片之間邊的權值,然后進行標簽傳遞(Label Propagate)。

實際上,這樣的方法非常奏效,將單個圖片的分類成功率提高到了10%~15%

最后的堡壘

扭曲的文字是這類驗證碼最后的堡壘了,這也就是我說為什么Google驗證碼太簡單的原因——它直接是網頁文字呈現的,理論上可以直接復制粘貼,不需要識別,但是我們研究的這個卻是扭曲的漢字圖像——不能直接轉換為文字。

我仔細查看了知乎的帖子,大家在做漢字識別的思路都是想辦法把文字切割開然后識別,效果不佳。其實,還有另外一種思路——把所有文字切放到一起做整體識別。畢竟根據官方說明種類最多只有600個——實際上我斷斷續續搜集了10個月的數據,我從中抽取并肉眼檢查了一萬張驗證碼,只有230個類別。當項目完成后我又采集了一些數據,發現了新的類別。所以我猜測可能有多組圖片,會不定期更換顯示圖片和類別,但這只需要采集更多的數據即可解決。當然也有可能是某些類別實在是太難辨認,他們刪除了。

把文字湊到一起識別有一個顯而易見的好處,就是大大減少了需要分類的個數,而且不需要考慮分割的問題。

首先,文字分割就是一個難點,即便是英文字符的分割都很難,漢字本身就有偏旁部首,特別是左右結構的,常用的英文字符分割方法難以奏效,這條路是很難走通的——更何況漢字在扭曲之后往往有粘連,這更加提高了難度。

其次,在我搜集的230個類別里,類別名稱有1~4個字,按平均每個類別名稱有2.5個字來算,就需要有525個類別,足足增長了2.5倍。類別的增多意味著分類難度的增大和需要訓練樣本的增多。分類難度增加好理解,要教會寶寶10以內的加法和教會它九九乘法表,難度是不一樣的。所需訓練樣本增多的意思是,你如果要教會寶寶分辨貓和狗,你可能只需要2張圖就夠了,但是你如果要教會他分辨波斯貓,加菲貓,牧羊犬和藏獒,就需要至少4張圖片。

所以,把所有文字當做整體做識別是一個不錯的想法,事實上效果也相當好。我們的識別程序在7000個漢字標簽的測試集上達到了80%的準確率,最后的集成測試中文字標簽的識別率更是達到了96%——因為最后的驗證碼是12月份另外采集的,我猜測之前的驗證碼已經經過輪轉,所以有部分訓練集有的數據測試集沒有再出現,導致測試變“簡單”了。

論文中,我們為了方便,使用了標注數據訓練神經網絡,也就是所謂的有監督學習。舉個簡單的例子,你在教寶寶把貓和狗圖片分開的時候,指著貓的圖片說這是貓,指著狗的圖片說這是狗——這是有監督的學習;給一堆貓和狗的圖片,混起來,不告訴他這些圖片是啥,讓寶寶自己去悟出兩個不一樣的種類——這是無監督的學習。

有監督學習需要大量的標記數據——標注了其真實類別的標簽圖片。那么數據哪里來呢?我也不知道從哪兒就發現了若快網這個神奇的網站,先來看看網站描述:


敢情這號稱世界上最先進的圖片處理算法和神經網絡訓練系統——是人眼識別啊。而且費用特別特別便宜,我充了300人民幣,加上它識別錯誤給的補償,輕松搜集了幾萬條標注的數據。不過說實話,這個網站的識別成功率的確有97%

至于我怎么知道錯誤的呢?我的做法是維護一個詞表(我肉眼看10000張看出來的),不在這里面的直接報錯。當然,有更好的實現方式:如果出現新詞,再提交幾次,如果是相同的結果,那么將其加入詞表。但是我自己實現的時候發現若快對圖片有緩存,如果是相同的直接返回結果,我就懶得做變化提交了——因為效果已經足夠好了。

我們采用的是有監督學習(數據是標記了類別的),實際上可以采用無監督學習,做是做了,沒有去認真調(沒怎么調的情況下識別準確率也到了40%),否則純無監督學習的模型會更漂亮。考慮到讀者的接受水平,我把這部分討論放到理論部分。

這樣,我們成功地使用簡單的神經網絡結構和相對比較低的成本就搞定了漢字識別。

圖片選擇

通過以上步驟,在得到一個驗證碼的時候,我們已經可以知道其中文的標簽和8張圖片。然后我們就可以搜集大量的驗證碼,并使用之前提到的方法得到每張圖屬于各個類別的概率。結果大概是這樣:


那么怎么在這其中選擇呢?我們目前使用的方法是固定閾(yù)值法,設定當概率高于某個閾值的時候,就選擇這個圖片,在一個小規模的數據集上實驗并選擇合適的閾值:


經過實驗,我們的閾值取到0.065這個值的時候識別效果最好,大概78%. 當然這里其實可以用動態閾值、權值區間等,但是時間太緊,我們也就沒有再去仔細調整了。

總結

彥正瑪小姐這次是被實實在在看個透了。

其實,這種驗證碼的問題在于,以為“隨機”加上足夠大的數據量就萬事大吉了,卻沒有考慮到“隨機”本身也是在提供某種信息。這其實是一個很有趣的問題,如果從香農的信息論的角度來看,均勻分布的隨機性是為了掩蓋某種信息——這時候不確定性(熵)最大,從統計學的意義上更難攻破。然而,驗證碼本質上是隱含地傳遞某種期望只能夠被人讀懂信息,并讓人把這種信息識別出來并且以另一種方式反饋回去,而信息的本質是能夠將不確定性降低的事物,它在傳遞的時候是沒辦法抹除的——否則人肯定也識別不了。所以,即便使用了均勻分布的隨機性,也必然會導致圖文、圖圖關聯等分布的非均勻隨機性,從而露出破綻,這是這類驗證碼固有的理論缺陷。

討論

(專業內容,可跳過)

文中提到,由于時間關系,在漢字驗證碼那一塊我們使用了有監督學習的方法。其實,在最開始我們沒有知道“若快”這個網站之前,采用的方法是模擬產生文字的方式:


紅框內是原始圖片,右邊都是我們生成的(干擾字符+隨機橫縱向正弦變換),看著是不是有一點像?這樣我們就可以獲取近乎無限的標記數據。在只采用我們自己生成的數據的情況下,在獨立生成的測試集合上能夠得到99%的準確率(見思考題3),在真實數據集上的準確率也有30%~40%

實際上,最近出來了一個比較火的對抗網絡(Generative Adversarial Nets)和受限玻爾茲曼機(Restricted Boltzmann Machine),生成數據的方法比我們的要高級不少,如果用這種方法來生成訓練數據我相信訓練效果要更好。只是一個我理論水平不夠,二個時間也不夠了,有興趣的朋友可以做一做,探討一下。

增強措施

放棄這種驗證碼——經過歲月洗禮的才是最好的,扭曲的英文字母流行那么多年不是沒有道理。

像Google那樣增強工程難度(但要防住自研瀏覽器、瀏覽器插件好像有點難),比如最近直播網站流行的拼圖型驗證碼就是屬于這一類。

在隨機的概率分布上做手腳(這并非無法破解,只不過增加了破解成本,但是破解成本一般來說比加密成本要高)

為圖片增加變形、變色、旋轉等技術手段(雖然能夠防止我們論文中使用的感知哈希的方法,但是換一個更范化的哈希函數還是防不住,而且還增加了用戶的識別難度)

花絮


注釋

【1】這只是一種假設,真正的生成過程可能并不是如此。實際上,根據我們的觀察,他們的生成算法甚至比均勻隨機分布提供了更多的相關性信息——即便是與文字無關的圖片,如果屬于同一類,那么出現在同一驗證碼中的概率也大大高于隨機的理論值。

【2】根據我們的觀察,他們可能把所有圖庫分成了若干組,不定期輪換顯示。

閱讀理解

給“學有余力的同學”一些思考題:

在前面文章所舉的例子中,假設每張圖片被抽取的概率都是相等的,如果有10個圖片的類別、每個類別有100張圖片,如果有1000張驗證碼的文字都是“天鵝”,那么,天鵝這個類別的100張圖片的出現次數應該服從什么分布,為什么?

如何通過圖片總數與其中不同的圖片數估算圖庫總數?(參考答案:Large-Scale Inference:Empirical Bayes Methods forEstimation, Testing and Prediction11.5 The Missing Species Problem 233)

為什么在獨立的測試集合上能夠達到99%的準確率,而真實數據集上只有30%~40%?延伸閱讀:TensorFlow識別字母扭曲干擾型驗證碼-開放源碼與98%模型,這篇文章的作者犯了什么錯誤?

圖片中有隨機噪點,如何把相同圖片噪點不同的圖片合并?

如何使用ImageNet的輸出進行相似度的比較?如何減少這個比較的計算量?

非正式廣告

文中涉及到在一個大圖上進行建模、計算和查詢,傳統關系型數據庫存在建模不直觀、查詢效率慢等問題,圖數據庫能夠更好地建模和分析。我現在工作的公司所做的事情就是開發基于圖的數據庫,能夠實時對上十億個點、邊和其上的數據進行查詢和更新。最近剛剛發布了一個新版本。在業務中有需求的話,可以了解一下噢,我們的客戶現在包含某些著名電力公司、支付公司、游戲公司等等。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容