官术网_书友最值得收藏!

1.6 卷積神經網絡的平臺和工具

為了在解決各種實際問題中有效地利用深度學習模型,特別是卷積神經網絡,現在已經有很多開發平臺和工具可以選擇。比較常用的有Theano、TensorFlow、Caffe、Caffe 2、CNTK、MXNet、Torch、Deeplearning4J和Keras等,其中TensorFlow、Caffe 2和MXNet之間的競爭可能會比較激烈。目前,這些平臺和工具還沒有任何一種完善到足以解決“所有”的業務問題,大多通過專有解決方案提供先進的機器學習和人工智能的功能,包括手寫字符識別、圖像識別、視頻識別、語音識別、自然語言處理和對象識別等高級功能。下面分別對它們進行簡要的說明。

1)Theano由蒙特利爾大學學習算法學院的30~40名教師和學生集體維護,其創始人是深度學習研究的重要貢獻者Yoshua Bengio。Theano通過BSD許可發布,支持快速開發高效的機器學習算法。Theano的結構相當簡單,以Python為代碼庫和接口,其中C/CUDA代碼也被打包成Python字符串。這對開發者來說很難駕馭、調試和重構。Theano開創了使用符號圖來編程網絡的趨勢,其符號API支持循環控制,使得循環神經網絡的實現更容易、更高效。雖然Theano是一個很好的學術研究工具,在單個CPU上的運行效率較高,但缺乏分布式應用程序管理框架,只支持一種編程開發語言,在開發大型分布式應用程序時可能會遇到挑戰。

2)TensorFlow來自早期的Google庫DistBelief V2,是作為Google Brain項目的一部分開發的專有深度網絡庫。由于TensorFlow支持廣泛的功能,如圖像識別、手寫字符識別、語音識別、預測以及自然語言處理,所以在2015年11月9日以Apache 2.0許可開源后,谷歌立即獲得了大量的關注。有些人評價TensorFlow是對Theano的重新設計。TensorFlow在2017年2月15日發布了1.0版本,是8個先前版本的累積,解決了很多不完整的核心功能和性能問題。TensorFlow的編程接口包括Python和C++,并支持Java、Go、R和Haskell API的alpha版本接口。另外,TensorFlow支持精細的網格層,允許用戶構建新的復雜層類型,允許模型的不同部分在不同的設備上并行訓練,還可以使用C++ Eigen庫在ARM架構上編譯和優化。經過訓練的TensorFlow模型可以部署在各種服務器或移動設備上,無須實現單獨的解碼器或加載Python解釋器。

3)Caffe開創于2013年年底,可能是第一個主流的行業級深度學習工具包,由領導Facebook AI平臺工程的賈揚清負責設計和實現,在BSD 2-Clause開源許可后發布。作為一種在計算機視覺界最受歡迎的工具包,Caffe具有優良的卷積神經網絡模型結構,在2014年ImageNet挑戰賽中脫穎而出。Caffe的運行速度快,學習速度為4ms/圖,推理速度為1ms/圖,在單個Nvidia K40 GPU上每天處理超過6000萬張圖片,是研究實驗和商業部署的完美選擇。Caffe是基于C++的,可以在各種跨平臺設備上編譯,包括一個Windows的端口,支持C++、Matlab和Python等編程接口。而且,Caffe擁有一個龐大的用戶社區為其深層網絡存儲庫做貢獻,包括AlexNet和GoogLeNet兩種流行的用戶網絡。Caffe的缺點是不支持細粒度網絡層,在構建復合層類型時必須以低級語言完成,對常規網絡和語言建模的支持總體上很差。

4)Caffe 2是Caffe的升級版,于2017年4月18日由Facebook根據BSD許可協議開源,繼續強力支持視覺類型問題,并增加了自然語言處理、手寫識別和時間序列預測的循環神經網絡和長短期記憶網絡。Caffe 2可以把Caffe模型輕松轉換為實用程序腳本,但更側重于模塊化、卓越的移動和大規模部署,能夠像TensorFlow一樣使用C++ Eigen庫來支持ARM架構,并在移動設備上部署深度學習模型。隨著Facebook最新宣布其改變航向,Caffe 2在深度學習社區中為大眾所熱捧,可能超越Caffe成為主要的深入學習框架。

5)CNTK開始稱為Computational Network Toolkit(計算網絡工具包),但在CNTK 2.0 Beta1版本根據MIT許可發布后被正式更名為Microsoft Cognitive Toolkit(微軟認知套件)。CNTK最早是由微軟的計算機科學家開發的,目的是想要更快、更高效地提高語音識別技術,但很快就超越了語音領域并演變成了一個產品,包括一些領先的國際家電制造商和微軟的旗艦產品組在內的客戶依靠它來執行各種各樣的深度學習任務。CNTK可以運行在使用傳統CPU或GPU的計算機上,既可以運行在一臺筆記本電腦上,也可以運行在數據中心的一系列計算機上,支持使用Python或C++編程接口的64位Linux和Windows操作系統,能夠輕松處理從相對較小到非常巨大等各種規模的數據集。與TensorFlow和Theano的組成相似,CNTK的網絡被描述為向量運算(如矩陣的加法/乘法或卷積)的符號圖,允許用戶構建細粒度的網絡層并創造新的復合層類型,而不像Caffe那樣需要通過低級語言實現。此外,CNTK又有點類似Caffe,也是基于C++的,具有跨平臺的CPU/GPU支持,并在Azure GPU Lab提供了最高效的分布式計算性能。目前,CNTK的主要不足是對ARM架構缺乏支持,這限制了其在移動設備上的功能。

6)MXNet(發音為“mix-net”)起源于卡內基-梅隆大學和華盛頓大學,2017年1月30日進入Apache基金會成為孵化器項目,是一個功能齊全、可編程和可擴展的深度學習框架,支持各種深度學習模型(比如卷積神經網絡、循環神經網絡和長短期記憶網絡),也是目前唯一支持生成對抗網絡模型的深度學習框架。而且,MXNet提供了混合編程模型(命令式和聲明式)的功能、大量編程語言的代碼(包括Python、C++、R、Scala、Julia、Matlab和JavaScript),以及強大的擴展能力(如GPU并行性和內存鏡像、編程器開發速度和可移植性),甚至被有些人稱為世界上最好的圖像分類器。此外,MXNet與Apache Hadoop YARN(一種通用的、分布式的應用程序管理框架)集成,使其成為TensorFlow的競爭對手。特別是,亞馬遜首席技術官Werner Vogels選擇公開支持MXNet,蘋果公司在2016年收購Graphlab/Dato /Turi之后也傳聞使用它。

7)Torch的主要貢獻者是Facebook、Twitter和Nvidia, Google Deep Mind也有一部分功勞。Torch按BSD 3開源許可發布,以非主流編程語言Lua實現,在員工熟練掌握之前很難提高整體效率,限制了其廣泛應用。當前的版本Torch7提供了一個比Caffe更詳盡的接口庫,可以在上面非常方便地對已有模塊實現邏輯復雜的調用。相比于Caffe, Torch7開放的接口更多,使用更靈活,很少會通過開發者給它實現新功能,而是依賴它去做擴展。但由于Lua語言本身功能偏弱,有點先天不足,所以Torch7不適合做層本身的組件開發。此外,Torch缺乏TensorFlow的分布式應用程序管理框架。

8)Deeplearning4J,簡稱DL4J,是用Java和Scala編寫的、由Apache 2.0授權的開放源碼,支持常用的機器學習向量化工具,以及豐富的深度學習模型,包括受限波耳茲曼機、深信度神經網絡、卷積神經網絡、循環神經網絡、RNTN和長短期記憶網絡等。DL4J是SkyMind的Adam Gibson的創意,是唯一與Hadoop和Spark集成的商業級深度學習框架,內置多GPU支持,可協調多個主機線程,使用Map-Reduce來訓練網絡,同時依靠其他庫來執行大型矩陣操作。DL4J在Java中開源,本質上比Python快,速度與Caffe相當,可以實現多個GPU的圖像識別、欺詐檢測和自然語言處理等出色功能。

9)Keras是一個高層神經網絡的應用程序編程接口(Application Programming Interface, API),由純Python語言編寫,并且使用TensorFlow、Theano或者CNTK作為后端。Keras的設計有4個原則:用戶友好、模塊性、易擴展性和與Python協作。用戶友好是指Keras提供一致而簡潔的API,以及清晰而有用的bug反饋,極大地減少了用戶工作量。模塊性是指Keras將網絡層、損失函數、優化器、激活函數等方法都表示為獨立的模塊,作為構建各種模型的基礎。易擴展性是指在Keras中只需要仿照現有的模塊編寫新的類或函數即可添加新的模塊,非常方便。與Python協作是指Keras沒有單獨的模型配置文件,模型完全由Python代碼描述,具有更緊湊和更易調試的優點。

如果讀者想了解上述開發工具的更多信息和資料,可以訪問下面的網址:

http://www.deeplearning.net/software/theano/

http://tensorf low.org

http://caffe.berkeleyvision.org

https://developer.nvidia.com/caffe2

http://cntk.codeplex.com/

http://mxnet.io

http://torch.ch/

http://deeplearning4j.org

https://keras.io/

此外,必須介紹一下CUDA-convnet。這是一個C++/CUDA實現的高性能卷積神經網絡庫,其中甚至包括更一般的前饋神經網絡。目前有CUDA-convnet和CUDA-convnet2兩個版本。CUDA-convnet可以建立任意層的連通性和網絡深度,實現任何有向無環圖,使用反向傳播算法進行訓練,需要Fermi-generation GPU(GTX 4xx、GTX 5xx或者Teslax系列)。在CUDA-convnet的基礎上,CUDA-convnet2主要做了3個改進。一是在Kepler-generation Nvidia GPU上提高了訓練速度(Geforce Titan、K20、K40);二是實現了數據并行、模型并行和二者混合并行的方式[99];三是改進了不太友好的代碼,完善了一些不完整的文檔,而且仍在不斷補充完善。CUDA-convnet和CUDA-convnet2的下載網址如下:

https://code.google.com/archive/p/cuda-convnet/downloads

https://github.com/akrizhevsky/cuda-convnet2

主站蜘蛛池模板: 新邵县| 金寨县| 辛集市| 东宁县| 旺苍县| 通江县| 彰化市| 阿克| 广昌县| 汉寿县| 普格县| 长宁县| 个旧市| 弥渡县| 蓝山县| 祥云县| 湖南省| 万山特区| 华阴市| 泽库县| 镇宁| 庄浪县| 尼玛县| 衢州市| 宁武县| 和静县| 荆门市| 集安市| 鹤山市| 乌海市| 株洲县| 乌兰浩特市| 土默特右旗| 康定县| 五寨县| 浦江县| 衡阳县| 东丽区| 乐亭县| 同江市| 无为县|