偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

機器學習和深度學習的最佳框架大比拼

開發(fā) 架構(gòu)
機器學習框架和深度學習框架之間有區(qū)別。本質(zhì)上,機器學習框架涵蓋用于分類,回歸,聚類,異常檢測和數(shù)據(jù)準備的各種學習方法,并且其可以或可以不包括神經(jīng)網(wǎng)絡方法。深度學習或深度神經(jīng)網(wǎng)絡(DNN)框架涵蓋具有許多隱藏層的各種神經(jīng)網(wǎng)絡拓撲。這些層包括模式識別的多步驟過程。網(wǎng)絡中的層越多,可以提取用于聚類和分類的特征越復雜。

在過去的一年里,咱們討論了六個開源機器學習和/或深度學習框架:Caffe,Microsoft Cognitive Toolkit(又名CNTK 2),MXNet,Scikit-learn,Spark MLlib和TensorFlow。如果把網(wǎng)撒得大些,可能還會覆蓋其他幾個流行的框架,包括Theano(一個10年之久的Python深度學習和機器學習框架),Keras(一個Theano和TensorFlow深度學習的前端),DeepLearning4j(Java和Scala在Hadoop和Spark之上的深度學習軟件)。如果你有興趣使用機器學習和神經(jīng)網(wǎng)絡,你從來沒有像現(xiàn)在這樣多的選擇。

機器學習框架和深度學習框架之間有區(qū)別。本質(zhì)上,機器學習框架涵蓋用于分類,回歸,聚類,異常檢測和數(shù)據(jù)準備的各種學習方法,并且其可以或可以不包括神經(jīng)網(wǎng)絡方法。深度學習或深度神經(jīng)網(wǎng)絡(DNN)框架涵蓋具有許多隱藏層的各種神經(jīng)網(wǎng)絡拓撲。這些層包括模式識別的多步驟過程。網(wǎng)絡中的層越多,可以提取用于聚類和分類的特征越復雜。

Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow是深度學習框架。 Scikit-learning和Spark MLlib是機器學習框架。 Theano跨越了這兩個類別。

一般來說,深層神經(jīng)網(wǎng)絡計算在GPU(特別是Nvidia CUDA通用GPU,大多數(shù)框架)上運行的速度要比CPU快一個數(shù)量級。一般來說,更簡單的機器學習方法不需要GPU的加速。

雖然你可以在一個或多個CPU上訓練DNN,訓練往往是緩慢的,慢慢我不是說秒或分鐘。需要訓練的神經(jīng)元和層數(shù)越多,可用于訓練的數(shù)據(jù)越多,需要的時間就越長。當Google Brain小組在2016年針對新版Google翻譯訓練語言翻譯模型時,他們在多個GPU上同時運行了一周的訓練時間。沒有GPU,每個模型訓練實驗將需要幾個月。

這些框架中每一個框架具有至少一個顯著特征。 Caffe的強項是用于圖像識別的卷積DNN。 Cognitive Toolkit有一個單獨的評估庫,用于部署在ASP.Net網(wǎng)站上工作的預測模型。 MXNet具有良好的可擴展性,可用于多GPU和多機器配置的訓練。 Scikit-learn具有廣泛的強大的機器學習方法,易學已用。 Spark MLlib與Hadoop集成,具有良好的機器學習可伸縮性。 TensorFlow為其網(wǎng)絡圖TensorBoard提供了一個獨特的診斷工具。

另一方面,所有深度學習框架在GPU上的訓練速度幾乎相同。這是因為訓練內(nèi)循環(huán)在Nvidia CuDNN包中花費大部分時間。然而,每個框架采用一種不同的方法來描述神經(jīng)網(wǎng)絡,具有兩個主要的陣營:使用圖形描述文件的陣營,以及通過執(zhí)行代碼來創(chuàng)建它們的描述的陣營。

考慮到這一點,讓我們來看看每一個框架的特性。

Caffe(咖啡)

Caffe深度學習項目,最初是一個強大的圖像分類框架,似乎停滯不前,基于它的持續(xù)的bug,以及它已被卡住1.0版RC3一年多的事實,并且創(chuàng)始人已離開項目。它仍然有良好的卷積網(wǎng)絡圖像識別和良好的支持Nvidia CUDA GPU,以及一個簡單的網(wǎng)絡描述格式。另一方面,它的模型通常需要大量的GPU內(nèi)存(超過1GB)運行,它的文檔是多斑點和問題,支持很難獲得,安裝是iffy,特別是對于它的Python筆記本支持。

Caffe有命令行,Python和Matlab接口,它依靠ProtoText文件來定義它的模型和求解器。 Caffe在其自己的模型模式中逐層定義網(wǎng)絡。網(wǎng)絡定義從輸入數(shù)據(jù)到丟失的整個模型。當數(shù)據(jù)和派生數(shù)據(jù)在前向和后向遍歷網(wǎng)絡時,Caffe存儲,通信和操作信息為blob(二進制大對象),內(nèi)部是以C連續(xù)方式存儲的N維數(shù)組(表示行該數(shù)組被存儲在連續(xù)的存儲器塊中,如在C語言中)。 Blob之于Caffe如Tensor之于TensorFlow。

圖層對blob執(zhí)行操作,并構(gòu)成Caffe模型的組件。層卷積濾波器,執(zhí)行池,取內(nèi)部乘積,應用非線性(諸如整流線性和S形以及其他元素方面的變換),歸一化,加載數(shù)據(jù)和計算諸如softmax和鉸鏈的損失。

Caffe已經(jīng)證明其在圖像分類中的有效性,但它的時刻似乎已經(jīng)過去了。除非現(xiàn)有的Caffe模型符合您的需要,或者可以根據(jù)您的目的進行微調(diào),我建議使用TensorFlow,MXNet或CNTK。

在NBViewer中顯示的預先計算的CaffeJupyter筆記本。這本筆記本解釋了使用一只可愛的小貓在Caffe網(wǎng)絡上做“手術(shù)”。

Microsoft Cognitive Toolkit(Microsoft認知工具包)

Microsoft Cognitive Toolkit是一個快速,易用的深度學習軟件包,但與TensorFlow相比,其范圍有限。它有各種各樣的模型和算法,極好的支持Python和Jupyter筆記本,一個有趣的聲明性神經(jīng)網(wǎng)絡配置語言BrainScript,以及在Windows和Ubuntu Linux環(huán)境下自動部署。

在缺點方面,當我審查Beta 1的文檔還沒有完全更新到CNTK 2,并且包沒有對MacOS支持。雖然自Beta 1以來,CNTK 2有許多改進,包括新的內(nèi)存壓縮模式,以減少GPU和新的Nuget安裝包的內(nèi)存使用,但對MacOS支持仍然缺失。

為Beta 1添加的PythonAPI有助于將認知工具包帶入主流的、用Python碼的、深度學習研究人員當中。 API包含模型定義和計算、學習算法、數(shù)據(jù)讀取和分布式訓練的抽象。作為PythonAPI的補充,CNTK 2具有新的Python示例和教程,以及對 Google Protocol Buffer序列化的支持。教程以Jupyter筆記本實現(xiàn)。

CNTK 2組件可以處理來自Python,C ++或BrainScript的多維密集或稀疏數(shù)據(jù)。認知工具包包括各種各樣的神經(jīng)網(wǎng)絡類型:FFN(前饋),CNN(卷積),RNN/ LSTM(遞歸/長期短期記憶),批次標準化和序列注意序列。它支持強化學習,生成對抗網(wǎng)絡,監(jiān)督和非監(jiān)督學習,自動超參數(shù)調(diào)整,以及從Python添加新的,用戶定義的核心組件在GPU上運行的能力。它能夠在多個GPU和機器上做到精確的并行性,而且(微軟聲稱)它甚至可以適應***的模型到GPU內(nèi)存。

CNTK 2 API支持從Python,C ++和BrainScript定義網(wǎng)絡,學習者,讀者,培訓和評估。他們還支持使用C#進行評估。 Python API與NumPy互操作,并包括一個高級層級庫,可以精確定義包括復現(xiàn)在內(nèi)的高級神經(jīng)網(wǎng)絡。該工具包支持以符號形式表示循環(huán)模型作為神經(jīng)網(wǎng)絡中的循環(huán),而不需要靜態(tài)展開循環(huán)步驟。

您可以在Azure網(wǎng)絡和GPU上訓練CNTK 2模型。配備GPU的N系列Azure虛擬機系列,在我審核Beta 1時受到限制,現(xiàn)在通??梢詮腁zure控制臺獲得并完全管理。

幾個CNTK 2 / Microsoft Cognitive Toolkit教程以Jupyter筆記本提供。該圖顯示了Logistic回歸訓練的繪制的可視化。

MXNet

MXNet是一個可移植的、可伸縮的深度學習庫,是亞馬遜的DNN框架的選擇,結(jié)合了神經(jīng)網(wǎng)絡幾何的象征性聲明與張量操作的命令性編程。 MXNet可跨多個主機擴展到多個GPU,接近線性擴展效率為85%,具有出色的開發(fā)速度、可編程性和可移植性。它支持Python,R,Scala,Julia和C ++,支持程度各不相同,它允許你混合符號和命令式編程風格。

在我***次評論MXNet時,文檔感覺還沒有完成,除Python之外,我發(fā)現(xiàn)很少有其它語言的例子。自從我評論以后,這兩種情況都有所改善。

MXNet平臺是建立在一個動態(tài)依賴調(diào)度器上的,它可以自動并行化符號和命令式操作,但是你必須告訴MXNet要使用哪些GPU和CPU核心。在調(diào)度器頂部的圖優(yōu)化層使符號執(zhí)行快速和內(nèi)存高效。

MXNet目前支持用Python,R,Scala,Julia和C ++構(gòu)建和訓練模型;訓練的MXNet模型也可以用于Matlab和JavaScript中的預測。無論您選擇哪種語言來構(gòu)建模型,MXNet都會調(diào)用優(yōu)化的C ++后端引擎。

MXNet作者認為他們的API是Torch、Theano、Chainer和Caffe提供的一個超集,盡管對GPU集群有更多的可移植性和支持。在許多方面MXNet類似于TensorFlow,但增加了嵌入命令張量操作的能力。

除了實際強制的MNIST數(shù)字分類之外,MXNet教程的計算機視覺包含使用卷積神經(jīng)網(wǎng)絡(CNN)的圖像分類和分割,使用更快的R-CNN的對象檢測,神經(jīng)藝術(shù)和使用深度CNN的大規(guī)模圖像分類和ImageNet數(shù)據(jù)集。還有自然語言處理、語音識別、對抗網(wǎng)絡以及監(jiān)督和非監(jiān)督機器學習的其他教程。

亞馬遜測試了在P2.16xlarge實例上的MXNet中實現(xiàn)的Inception v3算法,發(fā)現(xiàn)其伸縮效率為85%。

Scikit-learn

Scikit-learn Python框架具有廣泛的可靠的機器學習算法,但沒有深度學習算法。如果你是一個Python粉絲,Scikit-learn可能是一般機器學習庫中***選擇。

Scikit-learn是一個強大的,成熟的機器學習Python庫,包含各種各樣成熟的算法和集成圖。它相對容易安裝、學習和使用,帶有很好的例子和教程。

在另一方面,Scikit-learn不包括深度學習或強化學習,缺少圖模型和序列預測,并且除Python之外,不能真正使用其它語言。它不支持PyPy,Python即時編譯器或GPU。也就是說,除了它的少量進入神經(jīng)網(wǎng)絡,它不會真的有速度問題。它使用Cython(Python到C編譯器)來處理需要快速的函數(shù),例如內(nèi)循環(huán)。

Scikit-learn對分類、回歸、聚類、降維、模型選擇和預處理算法具有很好的選擇。它有所有這些的良好的文檔和示例,但沒有任何種類的指導工作流以完成這些任務。

Scikit-learn贏得了易于開發(fā)的***分,主要是因為算法都像廣告和文檔一樣工作,API是一致的,設計良好,數(shù)據(jù)結(jié)構(gòu)之間幾乎沒有“阻抗不匹配”。函數(shù)庫其中的功能已徹底充實,錯誤徹底消除,用來開發(fā)十分愉快。

本示例使用Scikit-learn的小手寫數(shù)字數(shù)據(jù)集來演示使用Label Spreading模型的半監(jiān)督學習。在1,797總樣本中只有30個被標記。

另一方面,函數(shù)庫沒有涵蓋深度學習或強化學習,這隱藏了當前困難但重要的問題,例如準確的圖像分類和可靠的實時語言解析和翻譯。顯然,如果你對深度學習感興趣,你應該另覓他處。

然而,存在許多問題,從建立鏈接不同觀察值的預測函數(shù)到分類觀察值到學習未標記數(shù)據(jù)集的結(jié)構(gòu),這使得它們適應于普通的老的機器學習,而不需要數(shù)十層的神經(jīng)元,對于這些領域 Scikit-learn 是非常好的選擇。

Spark MLlib

Spark MLlib是Spark的開源機器學習庫,提供了通用的機器學習算法,如分類、回歸、聚類和協(xié)同過濾(但不包括DNN)以及特征提取、轉(zhuǎn)換、維數(shù)降低工具,以及構(gòu)建、評估和調(diào)整機器學習管道選擇和工具。Spark MLlib還包括用于保存和加載算法、模型和管線、用于數(shù)據(jù)處理以及進行線性代數(shù)和統(tǒng)計的實用程序。

Spark MLlib是用Scala編寫的,并使用線性代數(shù)包Breeze。 Breeze依靠netlib-java來優(yōu)化數(shù)值處理,雖然在開源分布中意味著優(yōu)化使用CPU。 Databricks提供與GPU配合使用的定制Spark集群,這有可能為您帶來另一個10倍的速度改進,用于訓練具有大數(shù)據(jù)的復雜機器學習模型。

MLlib實現(xiàn)了大量的分類和回歸的常用算法和模型,新手可能變得混亂不堪,無可適從,但專家最終可能會為分析數(shù)據(jù)找到一個很好的模型的數(shù)據(jù)。對于這么多的模型Spark2.x增加了超參數(shù)調(diào)優(yōu)的重要特性,也稱為模型選擇。超參數(shù)t允許調(diào)優(yōu)分析人員設置參數(shù)網(wǎng)格、估計器和評估器,并且它允許交叉驗證方法(耗時但準確)或訓練驗證分割方法(更快但不太準確)找到***數(shù)據(jù)模型。

Spark MLlib擁有針對Scala和Java的完整API,主要是針對Python的完整API以及針對R的粗略部分API。您可以通過計算示例來獲得良好的覆蓋率:54個Java和60個Scala機器學習示例,52個Python機器學習示例,只有五個R示例。在我的經(jīng)驗中,Spark MLlib是最容易使用Jupyter筆記本,但你可以肯定地在控制臺運行它,如果你馴服詳細的Spark狀態(tài)消息。

Spark MLlib提供了你想要的基本機器學習、特性選擇、管道和持久性的任何東西。它在分類、回歸、聚類和過濾方面做得相當不錯。鑒于它是Spark的一部分,它具有訪問數(shù)據(jù)庫、流和其他數(shù)據(jù)源的強大訪問權(quán)限。另一方面,SparkMLlib并不真正采用與TensorFlow,MXNet,Caffe和Microsoft Cognitive Toolkit相同的方式建模和訓練深層神經(jīng)網(wǎng)絡。

Spark MLlibPython示例(Naive Bayes)作為Databricks筆記本。注意解釋,代碼和輸出如何散布。

TensorFlow

TensorFlow,Google的可移植機器學習和神經(jīng)網(wǎng)絡庫,執(zhí)行和伸縮性很好,雖然它有點難學。TensorFlow擁有各種各樣的模型和算法,它們對深度學習非常重視,并且在具有GPU(用于訓練)或Google TPU(用于生產(chǎn)規(guī)模預測)的硬件上具有出色的性能。它還具有對Python的良好支持,良好的文檔和良好的軟件,用于顯示和理解描述其計算的數(shù)據(jù)流圖TensorBoard。

數(shù)據(jù)流圖中的節(jié)點表示數(shù)學運算,而圖的邊表示在它們之間流動的多維數(shù)據(jù)數(shù)組(張量)。這種靈活的架構(gòu)允許您將計算部署到桌面、服務器或移動設備中的一個或多個CPU或GPU,而無需重寫代碼。

使用TensorFlow的主要語言是Python,雖然對C ++有限的支持。TensorFlow提供的教程包括手寫數(shù)字分類。圖像識別、字嵌入、遞歸神經(jīng)網(wǎng)絡,用于機器翻譯的序列到序列模型、自然語言處理和基于PDE(偏微分方程)的模擬的應用。

TensorFlow可以方便地處理各種神經(jīng)網(wǎng)絡,包括目前正在急劇變化的圖像識別和語言處理領域的深度CNN和LSTM遞歸模型。用于定義圖層的代碼可能fan,但是您方便但不詳細,可以使用三個可選的深度學習界面中的任何一個來修復它。雖然調(diào)試異步網(wǎng)絡求解器可以是平凡的,但TensorBoard軟件可以幫助您可視化圖。

TensorBoard顯示TensorFlow計算的圖形。我們放大了幾個部分來檢查圖形的細節(jié)。

總結(jié)

對于任何給定的預測任務,您應該使用哪種機器學習或深度學習包取決于機器學習的復雜性,用于訓練的數(shù)據(jù)量和形式,您的計算資源以及您的編程語言偏好和技能。它也可能取決于您是否喜歡使用代碼或配置文件定義模型。

但是,在開始自己的模型訓練考察之前,您可能希望了解來自Google,HPE和MicrosoftAzure云的任何預先訓練的應用機器學習服務是否能夠處理您的數(shù)據(jù),無論是語音、文本或圖像。如果他們對你的數(shù)據(jù)不能很好地工作,你可能還想在嘗試基本的機器學習訓練(***,如果沒有其他工作)深度學習訓練之前,看看你能用簡單的統(tǒng)計方法獲得多大的好處。這里的原則是保持分析盡可能簡單,但不是更簡單。

在我討論的兩個基本的機器學習包,我建議喜歡Scala和在Hadoop中有他們的數(shù)據(jù)的使用Spark MLlib 。我建議喜歡Python的人Scikit-learn。

我應該提到那些喜歡Scala(和Java)的人和在Hadoop中有他們的數(shù)據(jù)的人的另一個選擇事Deeplearning4j。我沒有評論他,但是,因為其名稱意味著它是一個學習深度包。

選擇Caffe,Microsoft Cognitive Toolkit,MXNet和TensorFlow的深度學習包是一個更困難的決定。我不再建議使用Caffe,因為它的發(fā)展停滯不前。然而,選擇其他三個中的一個仍然是棘手,因為對于具有類似功能,它們都是***的選擇。

Cognitive Toolkit現(xiàn)在有Python和C ++ API以及網(wǎng)絡配置語言BrainScript。如果您喜歡使用配置文件而不是編程網(wǎng)絡拓撲,那么CognitiveToolkit可能是一個不錯的選擇。另一方面,它似乎不像TensorFlow一樣成熟,它不能在MacOS上運行。

MXNet支持Python、R、Scala、Julia和C ++,但其支持***的API是用Python開發(fā)的。 MXNet在多個主機上的多個GPU上展示出良好的伸縮性(85%的線性)。當我評論MXNet的文檔和示例是吝嗇的,但他們已經(jīng)改進了。

TensorFlow可能是三個包中最成熟的,并且它是一個很好的選擇,只要你喜歡編寫Python,并可以克服學習曲線。 TensorFlow具有你可以使用基本的構(gòu)建塊,它給你細粒度的控制,但也需要你編寫大量的代碼來描述一個神經(jīng)網(wǎng)絡。有三個簡化的API與TensorFlow一起工作來解決這個問題:tf.contrib.learn,TF-Slim和Keras。支持TensorFlow的最終考慮是TensorBoard,它對于可視化和理解您的數(shù)據(jù)流圖非常有用。

文章來源:網(wǎng)路冷眼|翻譯

責任編輯:張燕妮 來源: 云頭條
相關(guān)推薦

2020-08-04 17:06:40

Merging Rebasing Git

2014-01-07 17:08:02

Java開源框架

2010-08-05 14:25:30

Flex框架

2010-05-28 11:09:51

SVN功能

2017-08-22 17:55:35

機器學習SparkTensorFlow

2011-01-19 11:10:30

2019-07-22 09:00:18

DialogflowAzure機器人

2010-03-18 14:54:46

主流無線技術(shù)

2021-03-02 09:00:00

開源框架技術(shù)

2010-07-14 13:38:51

Perl開發(fā)工具

2010-05-24 18:15:34

SVN中Branch和

2017-09-10 14:29:03

眼力

2021-03-15 21:07:17

IT行業(yè)薪酬薪水

2023-05-26 15:53:48

MidjourneyAI圖像

2010-08-25 16:12:34

職場

2010-09-08 15:41:28

SIP協(xié)議棧

2011-11-08 10:29:44

2018-10-25 14:08:07

KubernetesGoogle

2011-04-01 09:18:01

MRTGCactiZabbix

2019-08-27 09:00:00

敏捷開發(fā)開發(fā)方法項目
點贊
收藏

51CTO技術(shù)棧公眾號