深度學習動手入門:GitHub上四個超棒的TensorFlow開源項目


作者簡介:akshay pai,數據科學工程師,熱愛研究機器學習問題。Source Dexter網站創辦人。

TensorFlow是Google的開源深度學習庫,你可以使用這個框架以及Python編程語言,構建大量基於機器學習的應用程序。而且還有很多人把TensorFlow構建的應用程序或者其他框架,開源發布到GitHub上。

這次跟大家分享一些GitHub上令人驚奇的TensorFlow項目,你可以直接在你的應用中使用,或者根據自身所需進一步予以改進。

TensorFlow簡介

如果你已經知道TensorFlow是什么,以及它是如何工作的,建議直接跳到下一節。如果你對使用Python學習TensorFlow感興趣,網上也有相關的教程可以參考。

這一節內容比較傲適合初學者。如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網絡。

深度學習讓我們能夠以極高的准確性構建復雜的應用程序。圖像、視頻、文本、音頻等領域的問題,都可以通過深度學習解決。TensorFlow可以用於實現前述所有應用。

2015年11月9日,Google正式發布並開源TensorFlow,目前官方正式版本為TensorFlow 1.2。下面這段視頻,是當年TensorFlow剛發布時,Google發布的一個官方介紹短片,Jeff Dean等出鏡講述。

 

TensorFlow很快成為GitHub上用戶最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕松的用其來搭建、測試和部署機器學習應用。

TensorFlow使用數據流圖,上面是一個TensorFlow的示意圖。我們不用關心這張圖具體代表什么,但你需要知道,其中的橢圓和正方形代表節點,節點就是一些數學函數,你可以將節點分組形成各種數學計算,並得到輸出。

箭頭代表流動到各個節點的數據。所以TensorFlow也被成為數據流庫。

OK,簡介到此,下面分享四個我非常喜歡的TensorFlow GitHub項目。

項目一:Neural Style

這是最酷的TensorFlow GitHub項目之一。神經風格是將一張照片的風格遷移到另一張照片上的過程,同時保留相關的特張。簡單的來說,通過這個項目,你可以使用TensorFlow創建自己的Prisma應用程序。

如上圖所示,把梵高畫作的風格,遷移到一張獅子的照片上,就得到一個星空風格的獅子照片,這就是所謂的風格遷移。下面再展示一組這個項目的風格遷移,能把這張獅子的照片,變成哪些非常有趣的效果。

這個項目在風格遷移的同時,還能對圖像進行語義分割。進而實現對內容的前景、背景進行不同的風格遷移處理。這個過程如下圖所示:

另外這個算法還能適用於視頻處理。

上述圖片處理使用的軟硬件如下:

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

項目二:Mozilla Deep Speech

這個GitHub項目使用TensorFlow將語音轉換為文本。語音轉文本是一個熱門的機器學習領域,然而各地的人們有着不同的口音,這也是一個難以解決的問題。不過仍然可以通過深度學習實現非常不錯的准確性。

其實這個項目,是一個基於百度DeepSpeech架構的TensorFlow實現。換句話說,這個項目是百度的內核,Google的外貌。

百度的相關論文地址在此:

https://arxiv.org/abs/1412.5567

DeepSpeech是吳恩達帶領百度團隊研發出的成果,最早發布於2014年底。今年初,百度基於DeepSpeech2,開發出一款名為SwiftScribe的應用(swiftscribe.ai),可以把語音文件更為快速、便捷的轉換為文字。目前只限於英文。

回到這個項目。

所需軟件環境如下:

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顯存的英偉達GPU,強烈建議安裝支持GPU的TensorFlow,因為使用GPU的訓練比CPU快得多。

GitHub地址如下:

https://github.com/mozilla/DeepSpeech

項目三:句子分類

句子分類就是識別句子類型的過程。例如,對於“食物非常糟糕”這個句子,你可能希望將其分類為正面句子或負面句子,這也被稱為情緒分析。這個問題的難點在於:句子結構帶來的復雜性。

利用卷積神經網絡,我們可以嘗試構建一個強大的文本分類器。

這里介紹的項目,是Yoon Kim論文《Convolutional Neural Networks for Sentence Classification(使用卷積神經網絡進行句子分類)》的簡單實現。這個論文的地址如下:

https://arxiv.org/abs/1408.5882

通過一個簡單的CNN卷積神經網絡,只進行很少的超參數調整和靜態矢量,就可以得到出色的句子分類結果。

所需軟件環境如下:

Python 3

Tensorflow > 0.12

Numpy

GitHub地址如下:

https://github.com/dennybritz/cnn-text-classification-tf

項目四:圖像分類/物體識別

圖像分類,也就是訓練系統識別貓貓狗狗,或者車道、海灘、天際線等場景。計算機視覺是一個范圍巨大的領域,從面部識別到情感識別,甚至可以進行視覺氣體泄漏檢測。雖然實現流程各異,但底層系統是相通的。

所以作者創建了一個TensorFlow GitHub庫,其中包括兩個相互關聯的部分。第一部分:能夠識別1000個對象的TensorFlow圖像分類器。第二部分:創建並訓練一個全新的圖像分類器。

我們先來看看第一部分。

Google的TensorFlow圖像識別系統是目前最准確的圖像分類軟件。所謂圖像識別,就是對圖片中的內容進行識別,然而這並非對任意圖片都能識別。

只有被訓練過的對象,系統才能識別。例如,我們用三個類型訓練分類器:貓、狗和牛。三個分類器只能識別相應類別中的一個。如果給出一張駱駝的圖片會怎樣?圖片仍會通過一個分類器,但是置信率會非常的低。

如何快速創建一個TensorFlow圖像分類器?只需要簡單的三步。當然前提是你已經裝好了TensorFlow,而且懂編程、會用Python。

第一步:下載

下載預訓練的模型、圖片和腳本。使用如下命令即可。

git clone https://github.com/akshaypai/tfClassifiercd tfClassifier

第二步:運行腳本找到最佳預測

給定一個圖片,運行腳本來進行分類。默認情況下,會顯示最佳預測。

Python classifier.py --image_file file_path_to_image

為了獲得top n分類,可以使用如下參數。

Python classifier.py --image_file file_path_to_image --num_top_predictions number_of_top_results

示例:比方我們給出這樣一張圖片。

python classifier.py --image_file ~/Pictures/fruit.jpgpomegranate (score = 0.98216)

分類器表示:這是石榴,准確率98%。

第三步:運行腳本獲得top n識別分類

現在我們嘗試給出一個具有更多屬性的圖像,如下圖的房子。

python classifier.py --image_file ~/Pictures/house.jpg --num_top_predictions 5picket fence, paling (score = 0.95750)worm fence, snake fence, snake-rail fence, Virginia fence (score = 0.03615)beacon, lighthouse, beacon light, pharos (score = 0.00018)boathouse (score = 0.00013)patio, terrace (score = 0.00007)

從上面的結果可以看出,分類器以95%的可能性預測圖片中有一個柵欄,另外分類器還發現了其他圍欄、庭院、露台等。

到此為止,你已經學到如何設置TensorFlow圖像識別系統。雖然,這個系統被限制在預訓練模型的幾個分類器之間。

那么我們接下來看看第二部分,如何增加一些新的分類器。

也是三個步驟。

第一步:下載預訓練模型以及所需腳本

我已經把全部所需的文件整合進一個git倉庫里。使用下面的命令可以下載。

git clone https://github.com/akshaypai/tfClassifiercd tfClassifier

第二步:設置圖像文件夾

這個步驟用於設置文件夾結構,以便數據流圖可以簡單地拾取分類。假設,你想重新訓練五種新的花朵分類器:玫瑰、郁金香、蒲公英、五月花和萬壽菊,那么需要如下的三個步驟來創建相應的文件夾結構:

1、為每種花型創建一個文件夾,文件夾的名稱就是類型的名稱

2、將花的所有圖像添加到各自的文件夾中,所有的玫瑰放入玫瑰花文件夾

3、將所有的文件夾,添加到一個父文件夾中,可以命名為:花

然后我們就得到如下的結構:

~/flowers~/flowers/roses/img1.jpg~/flowers/roses/img2.jpg...~/flowers/tulips/tulips_img1.jpg~/flowers/tulips/tulips_img2.jpg~/flowers/tulips/tulips_img3.jpg...

這樣,文件夾結構已經OK了。

第三步:運行預訓練腳本

使用如下命令運行腳本。

python retrain.py --model_dir ./inception --image_dir ~/flowers --output_graph ./output --how_many_training_steps 500

部分命令行參數:

-model_dir這個參數給出了預訓練模型的位置。

-image_dir在步驟二中創建的文件夾路徑

-output_graph存儲新訓練圖的位置

-how_many_training_steps這代表要執行的迭代次數,默認為4000

好了,以上就是如何重新訓練一個TensorFlow Inception模型。一旦你有了模型,就能開始用來進行分類處理。

結論

我希望你們也能體會到上述這些項目的精彩之處。學習一件事最好的方法就是動手去做。如果你還有更值得推薦的TensorFlow GitHub項目,可以留言給我們,讓更多的人看到。今天就先到這里吧。休息,休息一下~

原文地址:http://www.techweb.com.cn/news/2017-07-31/2566452.shtml


免責聲明!

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



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