【TensorFlow】01 TensorFlow簡介與Python基礎(chǔ)
1100
2025-04-01
1.6 卷積神經(jīng)網(wǎng)絡(luò)的平臺和工具
為了在解決各種實際問題中有效地利用深度學(xué)習(xí)模型,特別是卷積神經(jīng)網(wǎng)絡(luò),現(xiàn)在已經(jīng)有很多開發(fā)平臺和工具可以選擇。比較常用的有Theano、TensorFlow、Caffe、Caffe 2、CNTK、MXNet、Torch、Deeplearning4J和Keras等,其中TensorFlow、Caffe 2和MXNet之間的競爭可能會比較激烈。目前,這些平臺和工具還沒有任何一種完善到足以解決“所有”的業(yè)務(wù)問題,大多通過專有解決方案提供先進(jìn)的機器學(xué)習(xí)和人工智能的功能,包括手寫字符識別、圖像識別、視頻識別、語音識別、自然語言處理和對象識別等高級功能。下面分別對它們進(jìn)行簡要的說明。
1)Theano由蒙特利爾大學(xué)學(xué)習(xí)算法學(xué)院的30~40名教師和學(xué)生集體維護(hù),其創(chuàng)始人是深度學(xué)習(xí)研究的重要貢獻(xiàn)者Yoshua Bengio。Theano通過BSD許可發(fā)布,支持快速開發(fā)高效的機器學(xué)習(xí)算法。Theano的結(jié)構(gòu)相當(dāng)簡單,以Python為代碼庫和接口,其中C/CUDA代碼也被打包成Python字符串。這對開發(fā)者來說很難駕馭、調(diào)試和重構(gòu)。Theano開創(chuàng)了使用符號圖來編程網(wǎng)絡(luò)的趨勢,其符號API支持循環(huán)控制,使得循環(huán)神經(jīng)網(wǎng)絡(luò)的實現(xiàn)更容易、更高效。雖然Theano是一個很好的學(xué)術(shù)研究工具,在單個CPU上的運行效率較高,但缺乏分布式應(yīng)用程序管理框架,只支持一種編程開發(fā)語言,在開發(fā)大型分布式應(yīng)用程序時可能會遇到挑戰(zhàn)。
2)TensorFlow來自早期的Google庫DistBelief V2,是作為Google Brain項目的一部分開發(fā)的專有深度網(wǎng)絡(luò)庫。由于TensorFlow支持廣泛的功能,如圖像識別、手寫字符識別、語音識別、預(yù)測以及自然語言處理,所以在2015年11月9日以Apache 2.0許可開源后,谷歌立即獲得了大量的關(guān)注。有些人評價TensorFlow是對Theano的重新設(shè)計。TensorFlow在2017年2月15日發(fā)布了1.0版本,是8個先前版本的累積,解決了很多不完整的核心功能和性能問題。TensorFlow的編程接口包括Python和C++,并支持Java、Go、R和Haskell API的alpha版本接口。另外,TensorFlow支持精細(xì)的網(wǎng)格層,允許用戶構(gòu)建新的復(fù)雜層類型,允許模型的不同部分在不同的設(shè)備上并行訓(xùn)練,還可以使用C++ Eigen庫在ARM架構(gòu)上編譯和優(yōu)化。經(jīng)過訓(xùn)練的TensorFlow模型可以部署在各種服務(wù)器或移動設(shè)備上,無須實現(xiàn)單獨的解碼器或加載Python解釋器。
3)Caffe開創(chuàng)于2013年年底,可能是第一個主流的行業(yè)級深度學(xué)習(xí)工具包,由領(lǐng)導(dǎo)Facebook AI平臺工程的賈揚清負(fù)責(zé)設(shè)計和實現(xiàn),在BSD 2-Clause開源許可后發(fā)布。作為一種在計算機視覺界最受歡迎的工具包,Caffe具有優(yōu)良的卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),在2014年ImageNet挑戰(zhàn)賽中脫穎而出。Caffe的運行速度快,學(xué)習(xí)速度為4ms/圖,推理速度為1ms/圖,在單個Nvidia K40 GPU上每天處理超過6000萬張圖片,是研究實驗和商業(yè)部署的完美選擇。Caffe是基于C++的,可以在各種跨平臺設(shè)備上編譯,包括一個Windows的端口,支持C++、Matlab和Python等編程接口。而且,Caffe擁有一個龐大的用戶社區(qū)為其深層網(wǎng)絡(luò)存儲庫做貢獻(xiàn),包括AlexNet和GoogLeNet兩種流行的用戶網(wǎng)絡(luò)。Caffe的缺點是不支持細(xì)粒度網(wǎng)絡(luò)層,在構(gòu)建復(fù)合層類型時必須以低級語言完成,對常規(guī)網(wǎng)絡(luò)和語言建模的支持總體上很差。
4)Caffe 2是Caffe的升級版,于2017年4月18日由Facebook根據(jù)BSD許可協(xié)議開源,繼續(xù)強力支持視覺類型問題,并增加了自然語言處理、手寫識別和時間序列預(yù)測的循環(huán)神經(jīng)網(wǎng)絡(luò)和長短期記憶網(wǎng)絡(luò)。Caffe 2可以把Caffe模型輕松轉(zhuǎn)換為實用程序腳本,但更側(cè)重于模塊化、卓越的移動和大規(guī)模部署,能夠像TensorFlow一樣使用C++ Eigen庫來支持ARM架構(gòu),并在移動設(shè)備上部署深度學(xué)習(xí)模型。隨著Facebook最新宣布其改變航向,Caffe 2在深度學(xué)習(xí)社區(qū)中為大眾所熱捧,可能超越Caffe成為主要的深入學(xué)習(xí)框架。
5)CNTK開始稱為Computational Network Toolkit(計算網(wǎng)絡(luò)工具包),但在CNTK 2.0 Beta1版本根據(jù)MIT許可發(fā)布后被正式更名為Microsoft Cognitive Toolkit(微軟認(rèn)知套件)。CNTK最早是由微軟的計算機科學(xué)家開發(fā)的,目的是想要更快、更高效地提高語音識別技術(shù),但很快就超越了語音領(lǐng)域并演變成了一個產(chǎn)品,包括一些領(lǐng)先的國際家電制造商和微軟的旗艦產(chǎn)品組在內(nèi)的客戶依靠它來執(zhí)行各種各樣的深度學(xué)習(xí)任務(wù)。CNTK可以運行在使用傳統(tǒng)CPU或GPU的計算機上,既可以運行在一臺筆記本電腦上,也可以運行在數(shù)據(jù)中心的一系列計算機上,支持使用Python或C++編程接口的64位Linux和Windows操作系統(tǒng),能夠輕松處理從相對較小到非常巨大等各種規(guī)模的數(shù)據(jù)集。與TensorFlow和Theano的組成相似,CNTK的網(wǎng)絡(luò)被描述為向量運算(如矩陣的加法/乘法或卷積)的符號圖,允許用戶構(gòu)建細(xì)粒度的網(wǎng)絡(luò)層并創(chuàng)造新的復(fù)合層類型,而不像Caffe那樣需要通過低級語言實現(xiàn)。此外,CNTK又有點類似Caffe,也是基于C++的,具有跨平臺的CPU/GPU支持,并在Azure GPU Lab提供了最高效的分布式計算性能。目前,CNTK的主要不足是對ARM架構(gòu)缺乏支持,這限制了其在移動設(shè)備上的功能。
6)MXNet(發(fā)音為“mix-net”)起源于卡內(nèi)基-梅隆大學(xué)和華盛頓大學(xué),2017年1月30日進(jìn)入Apache基金會成為孵化器項目,是一個功能齊全、可編程和可擴(kuò)展的深度學(xué)習(xí)框架,支持各種深度學(xué)習(xí)模型(比如卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)和長短期記憶網(wǎng)絡(luò)),也是目前唯一支持生成對抗網(wǎng)絡(luò)模型的深度學(xué)習(xí)框架。而且,MXNet提供了混合編程模型(命令式和聲明式)的功能、大量編程語言的代碼(包括Python、C++、R、Scala、Julia、Matlab和JavaScript),以及強大的擴(kuò)展能力(如GPU并行性和內(nèi)存鏡像、編程器開發(fā)速度和可移植性),甚至被有些人稱為世界上最好的圖像分類器。此外,MXNet與Apache Hadoop YARN(一種通用的、分布式的應(yīng)用程序管理框架)集成,使其成為TensorFlow的競爭對手。特別是,亞馬遜首席技術(shù)官Werner Vogels選擇公開支持MXNet,蘋果公司在2016年收購Graphlab/Dato /Turi之后也傳聞使用它。
7)Torch的主要貢獻(xiàn)者是Facebook、Twitter和Nvidia,Google Deep Mind也有一部分功勞。Torch按BSD 3開源許可發(fā)布,以非主流編程語言Lua實現(xiàn),在員工熟練掌握之前很難提高整體效率,限制了其廣泛應(yīng)用。當(dāng)前的版本Torch7提供了一個比Caffe更詳盡的接口庫,可以在上面非常方便地對已有模塊實現(xiàn)邏輯復(fù)雜的調(diào)用。相比于Caffe,Torch7開放的接口更多,使用更靈活,很少會通過開發(fā)者給它實現(xiàn)新功能,而是依賴它去做擴(kuò)展。但由于Lua語言本身功能偏弱,有點先天不足,所以Torch7不適合做層本身的組件開發(fā)。此外,Torch缺乏TensorFlow的分布式應(yīng)用程序管理框架。
8)Deeplearning4J,簡稱DL4J,是用Java和Scala編寫的、由Apache 2.0授權(quán)的開放源碼,支持常用的機器學(xué)習(xí)向量化工具,以及豐富的深度學(xué)習(xí)模型,包括受限波耳茲曼機、深信度神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、RNTN和長短期記憶網(wǎng)絡(luò)等。DL4J是SkyMind的Adam Gibson的創(chuàng)意,是唯一與Hadoop和Spark集成的商業(yè)級深度學(xué)習(xí)框架,內(nèi)置多GPU支持,可協(xié)調(diào)多個主機線程,使用Map-Reduce來訓(xùn)練網(wǎng)絡(luò),同時依靠其他庫來執(zhí)行大型矩陣操作。DL4J在Java中開源,本質(zhì)上比Python快,速度與Caffe相當(dāng),可以實現(xiàn)多個GPU的圖像識別、欺詐檢測和自然語言處理等出色功能。
9)Keras是一個高層神經(jīng)網(wǎng)絡(luò)的應(yīng)用程序編程接口(Application Programming Interface,API),由純Python語言編寫,并且使用TensorFlow、Theano或者CNTK作為后端。Keras的設(shè)計有4個原則:用戶友好、模塊性、易擴(kuò)展性和與Python協(xié)作。用戶友好是指Keras提供一致而簡潔的API,以及清晰而有用的bug反饋,極大地減少了用戶工作量。模塊性是指Keras將網(wǎng)絡(luò)層、損失函數(shù)、優(yōu)化器、激活函數(shù)等方法都表示為獨立的模塊,作為構(gòu)建各種模型的基礎(chǔ)。易擴(kuò)展性是指在Keras中只需要仿照現(xiàn)有的模塊編寫新的類或函數(shù)即可添加新的模塊,非常方便。與Python協(xié)作是指Keras沒有單獨的模型配置文件,模型完全由Python代碼描述,具有更緊湊和更易調(diào)試的優(yōu)點。
如果讀者想了解上述開發(fā)工具的更多信息和資料,可以訪問下面的網(wǎng)址:
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實現(xiàn)的高性能卷積神經(jīng)網(wǎng)絡(luò)庫,其中甚至包括更一般的前饋神經(jīng)網(wǎng)絡(luò)。目前有CUDA-convnet和CUDA-convnet2兩個版本。CUDA-convnet可以建立任意層的連通性和網(wǎng)絡(luò)深度,實現(xiàn)任何有向無環(huán)圖,使用反向傳播算法進(jìn)行訓(xùn)練,需要Fermi-generation GPU(GTX 4xx、GTX 5xx或者Teslax系列)。在CUDA-convnet的基礎(chǔ)上,CUDA-convnet2主要做了3個改進(jìn)。一是在Kepler-generation Nvidia GPU上提高了訓(xùn)練速度(Geforce Titan、K20、K40);二是實現(xiàn)了數(shù)據(jù)并行、模型并行和二者混合并行的方式[99];三是改進(jìn)了不太友好的代碼,完善了一些不完整的文檔,而且仍在不斷補充完善。CUDA-convnet和CUDA-convnet2的下載網(wǎng)址如下:
https://code.google.com/archive/p/cuda-convnet/downloads
https://github.com/akrizhevsky/cuda-convnet2
機器學(xué)習(xí) 深度學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。