問(wèn)耕 編譯自 Source Dexter
量子位 出品 | 公眾號(hào) QbitAI
作者簡(jiǎn)介:akshay pai,數(shù)據(jù)科學(xué)工程師,熱愛(ài)研究機(jī)器學(xué)習(xí)問(wèn)題。Source Dexter網(wǎng)站創(chuàng)辦人。
TensorFlow是Google的開(kāi)源深度學(xué)習(xí)庫(kù),你可以使用這個(gè)框架以及Python編程語(yǔ)言,構(gòu)建大量基于機(jī)器學(xué)習(xí)的應(yīng)用程序。而且還有很多人把TensorFlow構(gòu)建的應(yīng)用程序或者其他框架,開(kāi)源發(fā)布到GitHub上。
這次跟大家分享一些GitHub上令人驚奇的TensorFlow項(xiàng)目,你可以直接在你的應(yīng)用中使用,或者根據(jù)自身所需進(jìn)一步予以改進(jìn)。
如果你已經(jīng)知道TensorFlow是什么,以及它是如何工作的,建議直接跳到下一節(jié)。如果你對(duì)使用Python學(xué)習(xí)TensorFlow感興趣,網(wǎng)上也有相關(guān)的教程可以參考。
這一節(jié)內(nèi)容比較傲適合初學(xué)者。如前所述,TensorFlow是一個(gè)深度學(xué)習(xí)庫(kù),使用這一框架,可以用來(lái)構(gòu)建和測(cè)試深度神經(jīng)網(wǎng)絡(luò)。
深度學(xué)習(xí)讓我們能夠以極高的準(zhǔn)確性構(gòu)建復(fù)雜的應(yīng)用程序。圖像、視頻、文本、音頻等領(lǐng)域的問(wèn)題,都可以通過(guò)深度學(xué)習(xí)解決。TensorFlow可以用于實(shí)現(xiàn)前述所有應(yīng)用。
2015年11月9日,Google正式發(fā)布并開(kāi)源TensorFlow,目前官方正式版本為T(mén)ensorFlow 1.2。下面這段視頻,是當(dāng)年TensorFlow剛發(fā)布時(shí),Google發(fā)布的一個(gè)官方介紹短片,Jeff Dean等出鏡講述。
TensorFlow很快成為GitHub上用戶最多的深度學(xué)習(xí)框架。這個(gè)庫(kù)之所以如此流行,是因?yàn)殚_(kāi)發(fā)人員可以輕松的用其來(lái)搭建、測(cè)試和部署機(jī)器學(xué)習(xí)應(yīng)用。
TensorFlow使用數(shù)據(jù)流圖,上面是一個(gè)TensorFlow的示意圖。我們不用關(guān)心這張圖具體代表什么,但你需要知道,其中的橢圓和正方形代表節(jié)點(diǎn),節(jié)點(diǎn)就是一些數(shù)學(xué)函數(shù),你可以將節(jié)點(diǎn)分組形成各種數(shù)學(xué)計(jì)算,并得到輸出。
箭頭代表流動(dòng)到各個(gè)節(jié)點(diǎn)的數(shù)據(jù)。所以TensorFlow也被成為數(shù)據(jù)流庫(kù)。
OK,簡(jiǎn)介到此,下面分享四個(gè)我非常喜歡的TensorFlow GitHub項(xiàng)目。
這是最酷的TensorFlow GitHub項(xiàng)目之一。神經(jīng)風(fēng)格是將一張照片的風(fēng)格遷移到另一張照片上的過(guò)程,同時(shí)保留相關(guān)的特張。簡(jiǎn)單的來(lái)說(shuō),通過(guò)這個(gè)項(xiàng)目,你可以使用TensorFlow創(chuàng)建自己的Prisma應(yīng)用程序。
如上圖所示,把梵高畫(huà)作的風(fēng)格,遷移到一張獅子的照片上,就得到一個(gè)星空風(fēng)格的獅子照片,這就是所謂的風(fēng)格遷移。下面再展示一組這個(gè)項(xiàng)目的風(fēng)格遷移,能把這張獅子的照片,變成哪些非常有趣的效果。
這個(gè)項(xiàng)目在風(fēng)格遷移的同時(shí),還能對(duì)圖像進(jìn)行語(yǔ)義分割。進(jìn)而實(shí)現(xiàn)對(duì)內(nèi)容的前景、背景進(jìn)行不同的風(fēng)格遷移處理。這個(gè)過(guò)程如下圖所示:
另外這個(gè)算法還能適用于視頻處理。
上述圖片處理使用的軟硬件如下:
CPU: Intel Core i7-6800K@3.4GHz×12
GPU: NVIDIA GeForce GTX 1080/PCIe/SSE2
OS: Linux Ubuntu 16.04.1 LTS 64-bit
CUDA: 8.0
python: 2.7.12
tensorflow: 0.10.0rc
opencv: 2.4.9.1
GitHub地址如下:
https://github.com/cysmith/neural-style-tf
這個(gè)GitHub項(xiàng)目使用TensorFlow將語(yǔ)音轉(zhuǎn)換為文本。語(yǔ)音轉(zhuǎn)文本是一個(gè)熱門(mén)的機(jī)器學(xué)習(xí)領(lǐng)域,然而各地的人們有著不同的口音,這也是一個(gè)難以解決的問(wèn)題。不過(guò)仍然可以通過(guò)深度學(xué)習(xí)實(shí)現(xiàn)非常不錯(cuò)的準(zhǔn)確性。
其實(shí)這個(gè)項(xiàng)目,是一個(gè)基于百度DeepSpeech架構(gòu)的TensorFlow實(shí)現(xiàn)。換句話說(shuō),這個(gè)項(xiàng)目是百度的內(nèi)核,Google的外貌。
百度的相關(guān)論文地址在此:
https://arxiv.org/abs/1412.5567
DeepSpeech是吳恩達(dá)帶領(lǐng)百度團(tuán)隊(duì)研發(fā)出的成果,最早發(fā)布于2014年底。今年初,百度基于DeepSpeech2,開(kāi)發(fā)出一款名為SwiftScribe的應(yīng)用(swiftscribe.ai),可以把語(yǔ)音文件更為快速、便捷的轉(zhuǎn)換為文字。目前只限于英文。
回到這個(gè)項(xiàng)目。
所需軟件環(huán)境如下:
Git Large File Storage
TensorFlow 1.0 or 1.1
SciPy
PyXDG
python_speech_features (nb: deprecated)
python sox
pandas
DeepSpeech native client libraries
如果你有至少8GB顯存的英偉達(dá)GPU,強(qiáng)烈建議安裝支持GPU的TensorFlow,因?yàn)槭褂肎PU的訓(xùn)練比CPU快得多。
GitHub地址如下:
https://github.com/mozilla/DeepSpeech
句子分類就是識(shí)別句子類型的過(guò)程。例如,對(duì)于“食物非常糟糕”這個(gè)句子,你可能希望將其分類為正面句子或負(fù)面句子,這也被稱為情緒分析。這個(gè)問(wèn)題的難點(diǎn)在于:句子結(jié)構(gòu)帶來(lái)的復(fù)雜性。
利用卷積神經(jīng)網(wǎng)絡(luò),我們可以嘗試構(gòu)建一個(gè)強(qiáng)大的文本分類器。
這里介紹的項(xiàng)目,是Yoon Kim論文《Convolutional Neural Networks for Sentence Classification(使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行句子分類)》的簡(jiǎn)單實(shí)現(xiàn)。這個(gè)論文的地址如下:
https://arxiv.org/abs/1408.5882
通過(guò)一個(gè)簡(jiǎn)單的CNN卷積神經(jīng)網(wǎng)絡(luò),只進(jìn)行很少的超參數(shù)調(diào)整和靜態(tài)矢量,就可以得到出色的句子分類結(jié)果。
所需軟件環(huán)境如下:
Python 3
Tensorflow > 0.12
Numpy
GitHub地址如下:
https://github.com/dennybritz/cnn-text-classification-tf
圖像分類,也就是訓(xùn)練系統(tǒng)識(shí)別貓貓狗狗,或者車(chē)道、海灘、天際線等場(chǎng)景。計(jì)算機(jī)視覺(jué)是一個(gè)范圍巨大的領(lǐng)域,從面部識(shí)別到情感識(shí)別,甚至可以進(jìn)行視覺(jué)氣體泄漏檢測(cè)。雖然實(shí)現(xiàn)流程各異,但底層系統(tǒng)是相通的。
所以作者創(chuàng)建了一個(gè)TensorFlow GitHub庫(kù),其中包括兩個(gè)相互關(guān)聯(lián)的部分。第一部分:能夠識(shí)別1000個(gè)對(duì)象的TensorFlow圖像分類器。第二部分:創(chuàng)建并訓(xùn)練一個(gè)全新的圖像分類器。
我們先來(lái)看看第一部分。
Google的TensorFlow圖像識(shí)別系統(tǒng)是目前最準(zhǔn)確的圖像分類軟件。所謂圖像識(shí)別,就是對(duì)圖片中的內(nèi)容進(jìn)行識(shí)別,然而這并非對(duì)任意圖片都能識(shí)別。
只有被訓(xùn)練過(guò)的對(duì)象,系統(tǒng)才能識(shí)別。例如,我們用三個(gè)類型訓(xùn)練分類器:貓、狗和牛。三個(gè)分類器只能識(shí)別相應(yīng)類別中的一個(gè)。如果給出一張駱駝的圖片會(huì)怎樣?圖片仍會(huì)通過(guò)一個(gè)分類器,但是置信率會(huì)非常的低。
如何快速創(chuàng)建一個(gè)TensorFlow圖像分類器?只需要簡(jiǎn)單的三步。當(dāng)然前提是你已經(jīng)裝好了TensorFlow,而且懂編程、會(huì)用Python。
第一步:下載
下載預(yù)訓(xùn)練的模型、圖片和腳本。使用如下命令即可。
第二步:運(yùn)行腳本找到最佳預(yù)測(cè)
給定一個(gè)圖片,運(yùn)行腳本來(lái)進(jìn)行分類。默認(rèn)情況下,會(huì)顯示最佳預(yù)測(cè)。
為了獲得top n分類,可以使用如下參數(shù)。
示例:比方我們給出這樣一張圖片。
分類器表示:這是石榴,準(zhǔn)確率98%。
第三步:運(yùn)行腳本獲得top n識(shí)別分類
現(xiàn)在我們嘗試給出一個(gè)具有更多屬性的圖像,如下圖的房子。
從上面的結(jié)果可以看出,分類器以95%的可能性預(yù)測(cè)圖片中有一個(gè)柵欄,另外分類器還發(fā)現(xiàn)了其他圍欄、庭院、露臺(tái)等。
到此為止,你已經(jīng)學(xué)到如何設(shè)置TensorFlow圖像識(shí)別系統(tǒng)。雖然,這個(gè)系統(tǒng)被限制在預(yù)訓(xùn)練模型的幾個(gè)分類器之間。
那么我們接下來(lái)看看第二部分,如何增加一些新的分類器。
也是三個(gè)步驟。
第一步:下載預(yù)訓(xùn)練模型以及所需腳本
我已經(jīng)把全部所需的文件整合進(jìn)一個(gè)git倉(cāng)庫(kù)里。使用下面的命令可以下載。
第二步:設(shè)置圖像文件夾
這個(gè)步驟用于設(shè)置文件夾結(jié)構(gòu),以便數(shù)據(jù)流圖可以簡(jiǎn)單地拾取分類。假設(shè),你想重新訓(xùn)練五種新的花朵分類器:玫瑰、郁金香、蒲公英、五月花和萬(wàn)壽菊,那么需要如下的三個(gè)步驟來(lái)創(chuàng)建相應(yīng)的文件夾結(jié)構(gòu):
1、為每種花型創(chuàng)建一個(gè)文件夾,文件夾的名稱就是類型的名稱
2、將花的所有圖像添加到各自的文件夾中,所有的玫瑰放入玫瑰花文件夾
3、將所有的文件夾,添加到一個(gè)父文件夾中,可以命名為:花
然后我們就得到如下的結(jié)構(gòu):
這樣,文件夾結(jié)構(gòu)已經(jīng)OK了。
第三步:運(yùn)行預(yù)訓(xùn)練腳本
使用如下命令運(yùn)行腳本。
部分命令行參數(shù):
-model_dir 這個(gè)參數(shù)給出了預(yù)訓(xùn)練模型的位置。
-image_dir 在步驟二中創(chuàng)建的文件夾路徑
-output_graph 存儲(chǔ)新訓(xùn)練圖的位置
-how_many_training_steps 這代表要執(zhí)行的迭代次數(shù),默認(rèn)為4000
好了,以上就是如何重新訓(xùn)練一個(gè)TensorFlow Inception模型。一旦你有了模型,就能開(kāi)始用來(lái)進(jìn)行分類處理。
我希望你們也能體會(huì)到上述這些項(xiàng)目的精彩之處。學(xué)習(xí)一件事最好的方法就是動(dòng)手去做。如果你還有更值得推薦的TensorFlow GitHub項(xiàng)目,可以留言給我們,讓更多的人看到。今天就先到這里吧。休息,休息一下~
【完】
活動(dòng)報(bào)名
8月2日(周三),量子位邀請(qǐng)保險(xiǎn)服務(wù)領(lǐng)域的AI公司靈智優(yōu)諾CTO許可,分享NLP在保險(xiǎn)智能投顧中的應(yīng)用和相關(guān)技術(shù)問(wèn)題,歡迎報(bào)名~
聯(lián)系客服