RM新时代网站-首页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MATLAB、Torch和TensorFlow對比分析_初學者如何選擇

Hx ? 作者:工程師陳翠 ? 2018-06-29 07:46 ? 次閱讀

初學者在學習神經網絡的時候往往會有不知道從何處入手的困難,甚至可能不知道選擇什么工具入手才合適。近日,來自意大利的四位研究者發(fā)布了一篇題為《神經網絡初學者:在 MATLAB、Torch 和 TensorFlow 中的快速實現(Neural Networks for Beginners A fast implementation in Matlab, Torch, TensorFlow)》的論文,對 MATLAB、Torch 和 TensorFlow 這三種神經網絡工具進行了介紹和比較。

本報告提供了最常見的開發(fā)環(huán)境內一些機器學習工具的介紹。本報告主要關注實際問題,跳過了任何理論介紹。本報告面向的讀者是想要進入機器學習領域的學生和正在尋找新框架的專家。

這篇論文是關于人工神經網絡(ANN,[1,2])的,因為這是目前最熱門的主題,并且在許多人工智能任務上都達到了當前最佳的水平。在單獨介紹了每一種框架之后,我們同時也給出實現一些一般常見問題的設置方法,從而使它們的比較更簡單。

因為這個主題已經得到了廣泛的研究,而且還在持續(xù)快速地增長,所以我們將這個文檔和一個 GitHub 庫進行了配對,這個庫中的文檔是動態(tài)更新的,而且以后可能還會擴大規(guī)模。

1 Matlab:一個統一的友好環(huán)境

1.1 介紹

Matlab 是一個強大的工具,能夠對大部分類型的數值運算、算法、編程和測試進行簡單又快速的處理。其直觀且友好的交互式接口使得它能簡單地對數據進行處理、可視化與分析。針對各種類型的任務,該軟件提供了大量的內置數學函數,以及豐富的、易于獲取的文檔。其主要設計是處理矩陣的,因此,幾乎所有的函數和運算都向量化了,也就是說它們可以管理標量以及向量、矩陣和張量(往往會有)。因此,其能更高效地避免循環(huán)(可能的時候),以及建立利用矩陣乘法的運算。

在此文檔中,我們只展現了一些簡單的用于上手人工神經網絡(ANN)的機器學習相關的工具。我們假設讀者有基礎知識,并把重點放在了進一步信息的官方文檔上。例如,你可以從 Matlab 的官網發(fā)現如何掌握該軟件的相關信息。確實,其許可證并非免費的,雖然大部分大學會為學生提供教學用許可證,但可能也無法獲取目前所有的程序包。特別是 Statistic and Machine Learning Toolbox 和 Neural Network Toolbox 提供了大量內置函數和模型,可用于實現適用于各類任務的不同 ANN 架構。

即使我們參考一些簡單獨立的案例,這兩個工具也是基本所需的。最容易理解的是 nnstart 函數,其能激活一個簡單的 GUI 并通過簡單的 2 層架構來引導用戶。它能允許加載可用的數據樣本或使用用戶自定義數據(即輸入數據和對應目標的兩個矩陣),還能訓練網絡并分析結果(誤差趨勢、混淆矩陣、ROC 曲線等)。

然而,還有更多可用于特定任務的函數。比如說,patternnet 函數是專為模式識別問題而設計的、newfit 函數適用于回歸問題,而 feedforwardnet 函數是最靈活的,其允許構建自定義的和復雜的網絡。所有的版本都以類似方式實現,主要的選項和方法適用于所有函數。在下一章節(jié)中,我們展示了如何管理可定制架構,并開始解決非?;A的問題。相關詳細信息可以在官方網站找到:

2 Torch 和 Lua 環(huán)境

2.1 介紹

Torch7 是一個易于使用并十分高效的科學計算框架,本質上是面向機器學習算法的。Torch7 以 C 語言寫成,這就保證了高效性。然而,通過 LuaJIT 接口(其提供了一種快速和直觀的腳本語言),我們可以進行完全地交互(通常很方便)。此外,它還集成了支持 GPU 計算的 CUDA 環(huán)境的必要庫。截至目前,Torch7 是構建任何種類拓撲結構的 ANN 原型上最常用的工具之一。事實上,Torch7 現在有很多軟件包,有很大的社區(qū)和不斷的更新和改進,這些都讓我們可以非常簡單地開發(fā)幾乎任何種類的架構。

有關安裝信息可以在官方網站入門部分找到: 。對基于 UNIX 的操作系統,這一過程非常簡單直接,而 Windows 系統即使有替代方法( https://github.com/torch/torch7/wiki/Windows ),但還沒有官方支持。如果已經安裝了 CUDA,那么就會自動添加 cutorch 和 cunn 包,其中包含了處理 Nvidia GPU 的所有必要工具。

3 TensorFlow

3.1 簡介

TensorFlow [5] 是一個用于數值計算的開源軟件庫,其相比于其它機器學習框架是最年輕的。TensorFlow 最初由谷歌大腦團隊的研究員和工程師開發(fā),其目的是鼓勵對深度架構的研究。然而,該環(huán)境對一些數值編程領域提供了大量的合適的工具。其計算方式是在數據流圖(Data Flow Graphs)概念下構想的。圖的結點表示數學運算,圖的邊表示張量(多維數據數組)。該機器學習包的核心是用 C++寫的,但其提供了一個優(yōu)良的 Python API,而且有很好的文檔支持。TensorFlow 主要的特征是其符號方法,該方法允許對前向模型做出一般性定義,而將對應的衍生計算留給該環(huán)境本身執(zhí)行。

4 MNIST 手寫字符識別

在本章節(jié)中,我們將討論如何建立一個 2 層 ANN 以解決 MNIST [6] 分類問題,MNIST 是一個著名的手寫字體識別數據集。其廣泛用于測試和比較一般機器學習算法和計算視覺方法。該數據集提供 28×28 像素(灰度)的手寫數字圖像。訓練和測試集分別包含 6 萬與 1 萬條樣本。壓縮文件可以在官網獲得: ,同時還有大多數常見算法的性能測評列表。

我們展示了構建的標準 2 層 ANN,其每一個隱藏層包含 300 個神經元。如圖 4 所示,因為該網絡是在官方網站上測評報告的架構之一,我們可以輕松地比較所得到的結果。其輸入需要重塑為包含 28 · 28 = 784 個元素的一維向量以滿足神經網絡。每個圖像最初由包含灰度像素值 [0, 255] 的矩陣所表征,并將歸一化為 [0, 1] 之內。輸出將是包含 10 個元素的預測向量,因為每個元素的標簽將由 one-hot 編碼的 10 空位二元向量組成。激活和懲罰函數在不同的環(huán)境中并不相同,這樣以提供一個不同方法的概覽。

MATLAB、Torch和TensorFlow對比分析_初學者如何選擇

圖 4:面向 MNIST 數據的 2 層網絡模型的一般架構

5 卷積神經網絡

在本章節(jié)中,我們將介紹卷積神經網絡(CNN [7, 6, 8]),該神經網絡是一種重要和強大的學習架構,其廣泛用于計算機視覺應用。卷積神經網絡目前代表著用于圖像分類任務的最先進算法,并構成了深度學習中的主要架構。我們展示了在所有提到的框架內如何構建和訓練這樣一個神經網絡,并且還探索了其最常用的功能和在 MNIST 上進行一些試驗以指出一些重要的特征。

MATLAB、Torch和TensorFlow對比分析_初學者如何選擇

圖 8:面向 MNIST 數據的 CNN 模型的一般架構

圖 9:在 MNIST 圖像上用 Matlab 訓練后的第一個卷積層的 5 × 5 濾波器

圖 11:在 2 × 2 最大池化的 MNIST 圖像上用 Torch 訓練的第一個卷積層的 5 × 5 濾波器。

圖 12:在 MNIST 圖像上用 TensorFlow 和所述的架構訓練的第一個卷積層的 5 × 5 濾波器。

6 關鍵比較

在這一節(jié),我們將提供對這些環(huán)境的整體概覽。即使我們在表 1 中提供了基于一些我們認為和機器學習軟件開發(fā)主要相關的特征的分數比較,但本研究的目的并不是通過這樣簡單的評估來完成分析。相反,我們希望提出一個有用的引導,可幫助人們進入廣義上的 ANN 和機器學習領域,從而根據個人背景和要求來在環(huán)境中自我定位。更完整的和統計相關的比較可參閱:,這里我們進行了總結,以幫助人們加速單個和全局的任務開發(fā)。

我們首先給出了每個環(huán)境的一般描述,然后我們嘗試在一些具體要求上比較了它們的優(yōu)缺點。最后,我們在不同的任務上進行了計算性能的指示性數值分析,這也可以作為一個比較和討論的主題。

6.1 MATLAB

該編程語言是直觀的,并且該軟件也提供了完整的軟件包——讓用戶可以無需編寫任何特定的代碼就能定義和訓練幾乎所有類型的人工神經網絡架構。其代碼并行化(code parallelization)是自動完成的,而且與 CUDA 的集成也很直接。其可用的內置函數是高度可自定義和可優(yōu)化的,從而提供了快速的和可擴展的實驗設置方式,讓你可以輕松獲取網絡的變量以進行深度分析。但是,擴展和集成 Matlab 工具需要對于該環(huán)境的高階知識。這可能會驅使用戶開始從頭編寫其代碼,導致計算表現的普遍衰減。這些功能讓其成為了一個完美的統計和分析工具箱,但是作為開發(fā)環(huán)境來說還是慢了一點。其 GUI 需要一些重量級的計算,但另一方面,這對用戶很友好,而且還提供了最好的圖形數據可視化。MATLAB 的文檔很完整,在官網上也組織得非常好。

6.2 Torch

Torch 的編程語言(Lua)有時候有一點難,但它應該比這些語言中其它一些要快一點。其提供了所有所需的 CUDA 集成和 CPU 并行自動化。其基于模塊的結構允許靈活的 ANN 架構,而且擴展其提供的軟件包也相對容易。而且其還有其它強大的軟件包,但一般而言它們需要一定的專業(yè)知識才能實現有意識的操作。Torch 可被輕松用于特定和一般算法測試的原型設計環(huán)境。其文檔遍布于整個 Torch 的 GitHub 庫,有時候不能立即解決一些特定的問題。

6.3 Tensor Flow

其使用了非常動態(tài)的語言 Python,讓用戶可以輕松地編寫腳本。其 CPU 并行化是自動的,而且其使用了計算圖結構,可以輕松利用 GPU 計算。其提供了很好的數據可視化,并且讓初學者也可以輕松地獲取已經準備好的軟件包,盡管本文并沒有涉及到這方面。其符號計算(symbolic computation)的力量僅在前向步驟中涉及到用戶,而其反向步驟完全是由 TensorFlow 環(huán)境導出的。這樣的靈活性讓任何知識水平的用戶都可以非常快速地進行開發(fā)。

6.4 整體比較情況概覽

就像之前說過的,我們嘗試在表 1 中總結出全局對比,根據不同的視角進行 1-5 的評分。下面介紹了主要的對比指標:

編程語言:它們所有的基本語言都非常直觀

GPU 集成:Matlab 因為需要額外的工具包而得分較低

CPU 并行化:所有的環(huán)境都可利用盡可能多的核(core)

函數可定制性:Matlab 得分較低,因為要將良好優(yōu)化的函數與已有的函數整合起來很困難

符號運算:Lua 不支持

網絡結構可定制性:每種網絡都是可能的

數據可視化:交互式的 Matlab 優(yōu)于其它

安裝:所有都相當簡單,但 Matlab 的交互式 GUI 是個加分項

操作系統兼容性:Torch 在 Windows 上不容易安裝

語言性能:Matlab 接口有時候很沉重

開發(fā)靈活性:同樣,Matlab 得分低,因為其會迫使中等用戶精通其語言,才能有能力整合已有的工具或編寫出合適的代碼,一般來說,這會拖慢軟件開發(fā)速度。

MATLAB、Torch和TensorFlow對比分析_初學者如何選擇

表 1:三種環(huán)境的各項得分

6.5 計算問題

在表 2 中,我們比較了不同任務的運行時間,分析了 CPU 和 GPU 計算的優(yōu)點和不同之處。結果是 5 次實驗的平均得分,而且實驗都是在同一臺計算機上完成的,該計算機的配置是:32 核的英特爾 Xeon CPU E5-2650 v2 @ 2.60GHz、66 GB RAM、4 GB 內存的 Geforce GTX 960。操作系統是 Debian GNU/Linux 8 (jessie)。我們在不同的網絡框架、批大小(包括隨機梯度下降(SGD)、1000 樣本批和完全批(Full Bacth))和硬件(在 HW 列說明)上測試了標準的梯度下降流程。這里用到的 CNN 架構和圖 8 中給出的一樣。結果是通過嘗試使用盡可能相似的優(yōu)化流程而得到的。在實際中,我們很難在 Matlab 內置的工具箱中應用特定的優(yōu)化技術。我們?yōu)?Torch 的第二個架構(第 8 行)跳過了 SGD 的案例,因為其第一個架構獲得了大量的計算時間。我們也跳過了使用 GPU 的 Matlab 在 ANN 上的 SGD,因為其訓練函數不支持 GPU 計算(第 4 和 10 行)。實際上,這可能是一個不常見的研究案例,但為了最好的完整性,我們還是報告其結果。我們跳過了在 GPU 上的 CNN Full Batch 的實驗,因為其內存需求實在太高了。

MATLAB、Torch和TensorFlow對比分析_初學者如何選擇

表 2:給定環(huán)境在 MNIST 數據上用不同架構訓練 10 epoch 5 次后的平均時間(秒)。所有架構都使用了 ReLU 作為激活函數,softmax 作為輸出函數,交叉熵作為懲罰

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    185

    文章

    2974

    瀏覽量

    230381
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60527
收藏 人收藏

    評論

    相關推薦

    MATLAB入門教程-初學者必看

    MATLAB入門教程-初學者必看
    發(fā)表于 06-28 15:39

    MATLAB初學者最好到GUI資料

    目前對MATLAB初學者最好到GUI資料,詳細的實例分析+代碼詳解。
    發(fā)表于 09-22 22:30

    Visual Studio NET初學者教程

    Visual Studio NET初學者教程
    發(fā)表于 01-08 11:15 ?74次下載
    Visual Studio NET<b class='flag-5'>初學者</b>教程

    初學者之路—硬件學習經驗

    初學者之路—硬件學習經驗一文是一位搞硬件的在校研究生寫的,希望對那些初學者之路電腦網等處于迷茫的硬件初學者學習之路有所幫助!
    發(fā)表于 12-29 10:20 ?1.5w次閱讀

    電子初學者電路圖如何看

    電子初學者的指南,介紹了好些東西,都是最基礎的。適合于初學者
    發(fā)表于 11-23 12:05 ?0次下載

    從51初學者到電子工程師

    51初學者的學習指導,對51初學者是個很好的入門教程,
    發(fā)表于 02-23 15:53 ?0次下載

    protel99初學者教程

    protel99初學者教程
    發(fā)表于 12-11 22:52 ?0次下載

    初學者的avr基礎教程

    初學者的avr基礎教程
    發(fā)表于 09-21 08:45 ?14次下載

    PSOC1初學者5個實驗,針對初學者的實驗

    PSOC1初學者5個實驗,針對初學者的實驗
    發(fā)表于 10-16 09:33 ?14次下載
    PSOC1<b class='flag-5'>初學者</b>5個實驗,針對<b class='flag-5'>初學者</b>的實驗

    linux初學者入門

    linux初學者入門
    發(fā)表于 10-27 14:34 ?14次下載
    linux<b class='flag-5'>初學者</b>入門

    推薦初學者TensorFlow延伸閱讀

    推薦初學者的延伸閱讀 除了課程內容外,TensorFlow 官網也為大家提供了學習研究機器學習豐富實用的資源,例如老師在課程中提到的 TensorFlow tfds 數據集、IMDB 數據集
    的頭像 發(fā)表于 11-04 18:31 ?1876次閱讀

    Labview初學者常見問題及解答

    Labview初學者常見問題及解答。
    發(fā)表于 05-25 15:56 ?20次下載

    FPGA初學者必讀文檔

    FPGA初學者必讀文檔(嵌入式開發(fā)適合哪個城市)-FPGA初學者必讀文檔,為學習FPGA做好準備。
    發(fā)表于 08-04 11:39 ?32次下載
    FPGA<b class='flag-5'>初學者</b>必讀文檔

    初學者的基本LED設置

    電子發(fā)燒友網站提供《初學者的基本LED設置.zip》資料免費下載
    發(fā)表于 11-22 10:14 ?3次下載
    <b class='flag-5'>初學者</b>的基本LED設置

    面向初學者的基本教程程序

    電子發(fā)燒友網站提供《面向初學者的基本教程程序.zip》資料免費下載
    發(fā)表于 12-19 11:25 ?6次下載
    面向<b class='flag-5'>初學者</b>的基本教程程序
    RM新时代网站-首页