當前位置:
首頁 > 科技 > 谷歌:為何從Scikit-learn轉向TensorFlow

谷歌:為何從Scikit-learn轉向TensorFlow



谷歌:為何從Scikit-learn轉向TensorFlow




谷歌:為何從Scikit-learn轉向TensorFlow



圖:pixabay

本文編譯自medium,作者為谷歌機器學習專家KarthikMSwamy。該專家日前撰文,討論了TensorFlow與開源學習工具Scikit-Learn的異同及其先進性,並探討TensorFlow的未來發展前景。


在過去這一年半的時間裡,TensorFlow在採用率和計算速度等方面,均以驚人的速度在增長。



谷歌:為何從Scikit-learn轉向TensorFlow



圖:deliprao.com


TensorFlow已經成為最受歡迎的機器學習演算法開發庫。但與此同時,它似乎也把自己定位為一個需要對會話和圖表進行定義的庫,而這是相當乏味和耗時的。儘管它在有效地計算梯度來訓練卷積神經網路(CNN)、循環神經網路(RNN)和長短期記憶網路(LSTM)方面做得非常好,但也不盡然。



谷歌:為何從Scikit-learn轉向TensorFlow



深度學習框架排序


在這一系列的帖子中,我想討論一下TensorFlow是如何用作通用機器學習庫的。更具體地說,我們將討論TensorFlow是如何類似於機器學習工具scikit-learn的,這是同樣在數據科學家和開發人員中非常受歡迎的另一個機器學習庫。

轉向TensorFlow的原因


雖然scikit-learn在其演算法庫中具有高度優化的演算法,但是當面對大量數據點時,它缺乏擴大的能力。而TensorFlow卻可以提供相當多的優於scikit-learn的特點:


?高性能機器學習模塊


?定製靈活性


?縮放以適應大數據點


?能夠利用GPU並對地理分布式GPU設備進行訓練


?設備不可知計算


?利用谷歌雲對經過訓練的機器學習模型進行推理


?高度靈活的Apache 2.0許可證,而scikit-learn是基於BSD許可證(雖然兩者都是商業上可用的,但Apache 2.0不太容易受到專利訴訟)


目標

了解scikit-learn和TensorFlow之間類似的功能,這將使scikit-learn用戶無縫地來使用TensorFlow。



谷歌:為何從Scikit-learn轉向TensorFlow



使用scikit-learn和TensorFlow開發一個從「鳶尾花數據集」中進行花品種分類的程序,以理解構建這樣的系統所需的努力。


展示TensorFlow是如何容易地為原型設計新的思路。


功能級別的相似性


scikit-learn受歡迎的原因之一是它很簡單


classifier.fit() / classifier.predict()


使用任何一種分類器都可以使用相同的方法。這種簡單的用戶體驗允許開發人員專註於演算法及其參數,而不用擔心那些需要被調用來完成手頭任務的API。


另一方面,我們在TensorFlow中有高級API,這是受到scikit-learn的啟發而得到的。TensorFlow中的這些功能與scikit-learn非常相似,具有類似的擬合和預測方法,以及允許進一步微調的其他功能。

在深入研究使用TensorFlow的高級API調用來開發我們的分類框架之前,我們先來討論TensorFlow的低級計算框架。TensorFlow使用計算圖表來執行其所有的計算。計算被表示為tf.Graph對象的一個實例,而其中的數據被表示為tf.Tensor對象,並使用tf.Operation對象對這樣的張量對象進行操作。然後再使用tf.Session對象的會話中執行該圖表。顯而易見的是,使用TensorFlow的低級API創建分類框架將需要測試一個簡單的機器學習原型。這就是我們討論TensorFlow的高級API以與scikit-learn的API進行比較的原因之一。我們將會在接下來的帖子中討論低級API及其用法。


示例代碼


我們使用scikit-learn的支持向量機(SVM)模塊和TensorFlow的高級API構建分類器,以根據花的特徵來對花進行分類。在這種情況下,數據集提供了四種不同的特徵,比如萼片寬度、萼片長度、花瓣寬度和花瓣長度,以變將花分為這三種花種中的一種——Iris Setosa(山鳶尾)、Iris Versicolour(雜色鳶尾),以及Iris Virginica(維吉尼亞鳶尾)。


在我的GitHub頁面上可以找到該項目的代碼。



谷歌:為何從Scikit-learn轉向TensorFlow



圖:TensorFlow.org


如果我們看一下GitHub鏈接,我們可以看到數據載入和拆分功能是由兩個框架共享的。我們在scikit-learn中定義一個SVM分類器,如下所示:


# ------------------------------------------


# Scikit Learn Implementation

# ------------------------------------------


# Use support vector classification


classifier_sk = svm.SVC()


# Use the train data to train this classifier


classifier_sk.fit(x_train, y_train)


# Use the trained model to predict on the test data


predictions = classifier_sk.predict(x_test)


score = metrics.accuracy_score(y_test, predictions)


在上面的代碼片段中,我們簡單地定義了一個支持向量分類器svm.SVC(),其對象用於訓練和預測。我們使用fit()實現訓練,而使用predict()方法調用實現預測。最後,我們計算出這四行代碼片段的最後一行的精度值。


另一方面,在TensorFlow中,我們可以使用一個深層神經網路(DNN)分類器來執行相同的任務。我們使用的TensorFlow的contrib模塊下可用的DNNClassifier,如下所示:

# ------------------------------------------


# TensorFlow Implementation


# ------------------------------------------


# Extract the features from the training data


# Building a 3-layer DNN with 50 units each.


hidden_units=[50, 50, 50],


n_classes=3)


# Use the train data to train this classifier


classifier_tf.fit(x_train, y_train, steps=5000)


# Use the trained model to predict on the test data

predictions = list(classifier_tf.predict(x_test, as_iterable=True))


score = metrics.accuracy_score(y_test, predictions)


在上面的代碼片段中,我們可以看到如何為數量幾乎相同的行構建一個DNN(除了用於將輸入數據轉換為特徵的附加行除外)。這個附加行完成將輸入數據轉換為密集、定長的浮點值。


TensorFlow遷移路徑


雖然從一個框架轉移到另一個框架的任務通常是令人張皇無措的,甚至有時令人沮喪,但是TensorFlow好像有些不一樣,它似乎有一個橋樑,允許開發人員從不同的框架中平穩過渡。contrib.learn模塊就提供了一個這樣的橋樑,可以從scikit-learn或Keras進入到TensorFlow。


TensorFlow還適應於包含針對生產質量使用進行高度優化的讀寫器,與此同時,還支持機器學習社區使用的大多數文件格式。這使得開發人員可以避免使用其他框架,如Pandas(這是很重要的閱讀文件,但仍然需要手動將數據提供到機器學習框架中。)在今年早些時候舉行的TensorFlow發展峰會上,TensorFlow讀寫器已被證實具有十分高的性能。


總結


在這篇文章中,我們著手研究開發一個使用scikit-learn和TensorFlow來完成一個簡單任務的分類器。我們討論了高級TensorFlowAPI與scikit-learn的API是如何相似的。你可以在我的GitHub頁面訪問本博客中討論的代碼。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器人圈 的精彩文章:

3D列印有多強?西子湖畔的這個大會將見分曉!
Facebook最新機器翻譯研究成果—CNN比RNN更有效
購物機器人加持新零售,商場的新春天來了
GTC17:百度用「稀疏訓練」使RNN體積降低90%

TAG:機器人圈 |

您可能感興趣

Sphero公司CEO Paul Berberian談公司為何要將重心轉型到教育領域?
Canada Goose為何這麼火?
Nike Air Span II還有服飾系列?為何Patta費盡心思連個Logo都沒有?
《Darling in the Franxx》一月新番動漫為何在愛奇藝緊急下線?
華為Mate10Pro無畏南極嚴寒 為何蘋果iPhone不行
專訪微軟副總裁:我們為何造Surface,我們為誰造Surface?
專訪微軟副總裁:我們為何造 Surface,我們為誰造 Surface?
iPhone減產已成定局,為何iPhoneX銷售爆冷?
明星最愛穿的 Acne Studios,為何普通人卻不買賬?
Facebook掌權後Oculus調了個頭,為何不搞遊戲搞影視?
蘋果iPhoneX減產已成定局,為何iPhoneX在銷售也遇冷了?
Vintage Minds | 它又胖又丑,為何你們還這麼愛?
為何要重視電商客戶的feedback?
傳言要停產的iPhone X,居然令iPhone的利潤持續上漲,為何?
庫克不明白:為何國人不喜歡原版iPhone X,卻偏愛定製iPhone X?
AI前線一周新聞盤點:Facebook 意外發布監控型AI工具;emoji為何能夠成為深度學習語言的理想候選方案
為何首發屏幕指紋的是X20Plus?vivo Xplay7未能發布因不肯妥協
grand Seiko系列屬於什麼路子,為何有的比入門勞還貴!
Science Works | 澳洲的科技人才為何如此之多?這家「科學遊樂場」告訴你答案
Justin黃明昊個人資料曝光 Justin為何被粉絲叫賈富貴