深度學習理論與實踐 課件 第2章 深度學習框架及其對比_第1頁
深度學習理論與實踐 課件 第2章 深度學習框架及其對比_第2頁
深度學習理論與實踐 課件 第2章 深度學習框架及其對比_第3頁
深度學習理論與實踐 課件 第2章 深度學習框架及其對比_第4頁
深度學習理論與實踐 課件 第2章 深度學習框架及其對比_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第2章深度學習框架及其對比第一節什么是深度學習框架什么是深度學習框架TensorFlow流行框架Pytorch深度學習采用

“端到端”的學習模式,在很大程度上減輕負擔。但隨著神經網絡的發展,模型的復雜度也在不斷提升。框架存在的意義就是屏蔽底層的細節,使研究者可以專注于模型結構。Caffe第二節PyTorch的特點和概述PyTorch簡介SWOT考慮到Python在計算科學領域的領先地位,以及其生態完整性和接口易用性,幾乎任何框架都不可避免地要提供Python接口。終于,在2017年,Torch的幕后團隊推出了PyTorch。PyTorch不是簡單地封裝LuaTorch提供Python接口,而是對Tensor之上的所有模塊進行了重構,并新增了最先進的自動求導系統,成為當下最流行的動態圖框架。PyTorch具有先進設計理念的框架,其歷史可追溯到2002年就誕生于紐約大學的Torch。Torch使用了一種不是很大眾的語言Lua作為接口。Lua簡潔高效,但由于其過于小眾,以至于很多人聽說要掌握Torch必須新學一門語言就望而卻步,但Lua其實是一門比Python還簡單的語言。PyTorch的特點PyTorch既可以看作為加入了GPU支持的numpy。TensorFlow與Caffe都是命令式的編程語言,而且是靜態的,即首先必須構建一個神經網絡,然后一次又一次使用同樣的結構;如果想要改變網絡的結構,就必須從頭開始。但是PyTorch通過一種反向自動求導的技術,可以讓用戶零延遲地任意改變神經網絡的行為。PyTorch的設計思路是線性、直觀且易于使用的,當用戶執行一行代碼時,它會忠實地執行,所以當用戶的代碼出現Bug的時候,可以通過這些信息輕松快捷地找到出錯的代碼,不會讓用戶在Debug的時候因為錯誤的指向或者異步和不透明的引擎浪費太多的時間。PyTorch的代碼相對于TensorFlow而言,更加簡潔直觀,同時對于TensorFlow高度工業化的底層代碼,PyTorch的源代碼就要友好得多,更容易看懂。深入API,理解PyTorch底層肯定是一件令人高興的事。030102ThreeTwoOnePyTorch概述PyTorch最大優勢是建立的神經網絡是動態的,可以非常容易的輸出每一步的調試結果,相比于其他框架來說,調試起來十分方便。PyTorch的圖是隨著代碼的運行逐步建立起來的,也就是說使用者并不需要在一開始就定義好全部的網絡的結構,而是可以隨著編碼的進行來一點一點的調試,相比于TensorFlow和Caffe的靜態圖而言,這種設計顯得更加貼近一般人的編碼習慣。第三節TensorFlow的特點和概述

數據流圖

節點

線TensorFlow簡介TensorFlow是一個采用數據流圖(dataflowgraphs)用于數值計算的開源軟件庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。TensorFlow最初由Google大腦小組的研究員和工程師們開發出來,用于機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用于其他計算領域。數據流圖數據流圖用“結點”(nodes)和“線”(edges)的有向圖來描述數學計算。“節點”一般用來表示施加的數學操作,但也可以表示數據輸入(feedin)的起點/輸出(pushout)的終點,或者是讀取/寫入持久變量(persistentvariable)的終點。“線”表示“節點”之間的輸入/輸出關系。這些數據“線”可以輸運“size可動態調整”的多維數據數組,即“張量”(tensor)。張量從圖中流過的直觀圖像是這個工具取名為“TensorFlow”的原因。一旦輸入端的所有張量準備好,節點將被分配到各種計算設備完成異步并行地執行運算。TensorFlow的特點特點設備遷移商業策略擴展便捷界面交互數據透明TensorFlow不是一個嚴格的“神經網絡”庫。只要用戶可以將計算表示為一個數據流圖就可以使用TensorFlow。用戶負責構建圖,描寫驅動計算的內部循環。TensorFlow提供有用的工具來幫助用戶組裝“子圖”,用戶也可以在TensorFlow基礎上寫自己的“上層庫”。TensorFlow的可擴展性相當強,可以自己寫一些c++代碼來豐富底層的操作。基于梯度的機器學習算法會受益于TensorFlow自動求微分的能力。只需要定義預測模型的結構,將這個結構和目標函數(objectivefunction)結合在一起,并添加數據,TensorFlow將自動計算相關的微分導數。計算某個變量相對于其他變量的導數僅僅是通過擴展你的圖來完成的,所以用戶能一直清楚看到究竟在發生什么。TensorFlow在CPU和GPU上運行,比如說可以運行在臺式機、服務器、手機移動設備等等。TensorFlow支持將訓練模型自動在多個CPU上規模化運算,以及將模型遷移到移動端后臺。TensorFlow還有一個合理的c++使用界面,也有一個易用的python使用界面來構建和執行你的graphs。你可以直接寫python/c++程序,也可以用交互式的ipython界面來用TensorFlow嘗試些想法,它可以幫用戶將筆記、代碼、可視化等有條理地歸置好。TensorFlow概述TensorFlow中Flow,也就是流,是其完成運算的基本方式。流是指一個計算圖或簡單的一個圖,圖不能形成環路,圖中的每個節點代表一個操作,如加法、減法等。每個操作都會導致新的張量形成。計算圖具有以下屬性:葉子頂點或起始頂點始終是張量。意即,操作永遠不會發生在圖的開頭,由此可以推斷,圖中的每個操作都應該接受一個張量并產生一個新的張量。同樣,張量不能作為非葉子節點出現,這意味著它們應始終作為輸入提供給操作/節點。計算圖總是以層次順序表達復雜的操作。通過將a+b表示為c,將b+1表示為d,可以分層次組織上述表達式。因此,可以將e寫為:e=(c)x(d)這里c=a+b且d=b+1.以反序遍歷圖形而形成子表達式,這些子表達式組合起來形成最終表達式。當我們正向遍歷時,遇到的頂點總是成為下一個頂點的依賴關系,例如沒有a和b就無法獲得c,同樣的,如果不解決c和d則無法獲得e。同級節點的操作彼此獨立,這是計算圖的重要屬性之一。當我們按照圖中所示的方式構造一個圖時,很自然的是,在同一級中的節點,例如c和d,彼此獨立,這意味著沒有必要在計算d之前計算c。因此它們可以并行執行。計算圖的并行也是最重要的屬性之一。它清楚地表明,同級的節點是獨立的,這意味著在c被計算之前不需空閑,可以在計算c的同時并行計算d。TensorFlow充分利用了這個屬性。TensorFlow概述TensorFlow允許用戶使用并行計算設備更快地執行操作。計算的節點或操作自動調度進行并行計算。這一切都發生在內部,例如在上圖中,可以在CPU上調度操作c,在GPU上調度操作d。下圖展示了兩種分布式執行的過程。上圖中,第一種是單個系統分布式執行,其中單個TensorFlow會話創建單個worker,并且該worker負責在各設備上調度任務。在第二種系統下,有多個worker,他們可以在同一臺機器上或不同的機器上,每個worker都在自己的上下文中運行。在上圖中,worker進程1運行在獨立的機器上,并調度所有可用設備進行計算。TensorFlow概述子圖是主圖的一部分,從屬性2可以說子圖總是表示一個子表達式,因為c是e的子表達式。子圖也滿足最后一個屬性。同一級別的子圖也相互獨立,可以并行執行。因此可以在一臺設備上調度整個子圖。左圖解釋了子圖的并行執行。這里有2個矩陣乘法運算,因為它們都處于同一級別,彼此獨立,這符合最后一個屬性。由于獨立性的緣故,節點安排在不同的設備gpu_0和gpu_1上。TensorFlow將其所有操作分配到由worker管理的不同設備上。更常見的是,worker之間交換張量形式的數據,例如在e=(c)*(d)的圖表中,一旦計算出c,就需要將其進一步傳遞給e,因此Tensor在節點間前向流動。該流動如右圖所示。第四節PaddlePaddle的特點和概述PaddlePaddle簡介SWOTPaddlePaddle的2.0版本相對1.8版本有重大升級,包括完善動態圖功能,動態圖模式下數據表示概念為Tensor;調整API目錄體系,API的命名和別名進行了統一規范化;數據處理、組網方式、模型訓練、多卡啟動、模型保存和推理等開發流程都有了對應優化。PaddlePaddle(飛槳)是由百度自主研發的開源深度學習框架。PaddlePaddle以百度多年的深度學習技術研究和業務應用為基礎,集深度學習核心框架、基礎模型庫、端到端開發套件、工具組件和服務平臺于一體。飛槳源于產業實踐,始終致力于與產業深入融合。目前飛槳已廣泛應用于工業、農業、服務業等,與合作伙伴一起幫助越來越多的行業完成AI賦能。飛漿2016年正式開源,2017年啟動新一代深度學習框架研發,2018年7月發布Paddlev0.14,目前的最新版本是2022年底發布的Paddlev2.3.1。PaddlePaddle的特點PaddlePaddle是靈活高效的產業級深度學習框架。它采用基于編程邏輯的組網范式,對于普通開發者而言更容易上手,符合他們的開發習慣。同時支持聲明式和命令式編程,兼具開發的靈活性和高性能。網絡結構自動設計,模型效果超越人類專家。同時,PaddlePaddle支持超大規模深度學習模型的訓練。它突破了超大規模深度學習模型訓練技術,實現了世界首個支持千億特征、萬億參數、數百節點的開源大規模訓練平臺,攻克了超大規模深度學習模型的在線學習難題,實現了萬億規模參數模型的實時更新。然后,PaddlePaddle還有多端多平臺部署的高性能推理引擎。它不僅兼容其他開源框架訓練的模型,還可以輕松地部署到不同架構的平臺設備上。同時,飛槳的推理速度也是全面領先的。尤其經過了跟華為麒麟NPU的軟硬一體優化,使得飛槳在NPU上的推理速度進一步突破。030102ThreeTwoOnePaddlePaddle概述PaddlePaddle不僅僅是一個深度學習的框架,基于該核心框架,百度公司擴展了一系列的工具和模型,覆蓋了深度學習開發和應用的整個流程,已然成為了一個功能齊全的產品。PaddlePaddle的官網上給出了產品的全景介紹,其中包括了主要使用流程和使用工具。首先在開發和訓練方面,如圖2-10所示,PaddlePaddle以深度學習框架為核心,包括了高階分布式訓練FleetAPI、靈活通用且易于使用的NLP大規模預訓練和多任務學習框架PALM、云上任務平臺PaddleCloud和量子機器學習框架PaddleQuantum。PaddlePaddle概述在模型方面,PaddlePaddle提供了預訓練模型工具PaddleHub和模型壓縮工具PaddleSlim,同時為不同的領域提供了開發套件,如圖2-11所示。尤其是PaddleOCR,在很多OCR的產品中都有其影子。同時還有文心大模型、PaddleCV、PaddleNLP等模型庫,為開發者提供了極大的便利。PaddlePaddle概述而部署方面,PaddlePaddle也為不同的平臺提供了相應工具。如圖2-12所示,PaddleInference提供原生推理庫,PaddleServing提供方便的服務端部署,PaddleLite則面向輕量級部署,Paddle.js為Web前端提供部署方式,FastDeploy則是一個新的、綜合的部署套件。第五節三者的比較三者的比較PyTorchPyTorch是當前難得的簡潔優雅且高效快速的框架。PyTorch的設計追求最少的封裝,遵循tensor→variable(autograd)→nn.Module三個由低到高的抽象層次,分別代表高維數組(張量)、自動求導(變量)和神經網絡(層/模塊),而且這三個抽象之間聯系緊密,可以同時進行修改和操作。PyTorch的靈活性不以速度為代價,在許多評測中,PyTorch的速度表現勝過TensorFlow和Keras等框架。簡潔的設計帶來的另外一個好處就是代碼易于理解。三者的比較PyTorch正在受到越來越多人的追捧。PyTorch是所有的框架中面向對象設計的最優雅的一個。PyTorch的面向對象的接口設計來源于Torch,而Torch的接口設計以靈活易用而著稱。PyTorch繼承了Torch的衣缽,尤其是API的設計和模塊的接口都與Torch高度一致。PyTorch的設計最符合人們的思維,它讓用戶盡可能地專注于實現自己的想法,即所思即所得,不需要考慮太多關于框架本身的束縛。PyTorch提供了完整的文檔,循序漸進的指南,作者親自維護的論壇供用戶交流和求教問題。Facebook人工智能研究院對PyTorch提供了強力支持,作為當今排名前三的深度學習研究機構,FAIR的支持足以確保PyTorch獲得持續的開發更新。同樣的,由于推出時間較短,在Github上并沒有如Caffe或TensorFlow那樣多的代碼實現,使用TensorFlow能找到很多別人的代碼,而對于PyTorch的使用者,可能需要自己完成很多的代碼實現。三者的比較R010203TensorFlow已經成為當今最炙手可熱的深度學習框架,但是由于自身的缺陷,TensorFlow離最初的設計目標還很遙遠。TensorFlow編程接口支持Python和C++。隨著1.0版本的公布,Java、Go、R和HaskellAPI的alpha版本也被支持。此外,TensorFlow還可在GoogleCloud和AWS中運行。TensorFlow還支持Windows7、Windows10和WindowsServer2016。由于TensorFlow使用C++Eigen庫,所以庫可在ARM架構上編譯和優化。這也就意味著用戶可以在各種服務器和移動設備上部署自己的訓練模型,無須執行單獨的模型解碼器或者加載Python解釋器。TensorFlow和Theano擁有相近的設計理念,都是基于計算圖實現自動微分系統。TensorFlow使用數據流圖進行數值計算,圖中的節點代表數學運算,而圖中的邊則代表在這些節點之間傳遞的多維數組。TensorFlow三者的比較01020304過于復雜的系統設計。TensorFlow代碼量龐大,使維護難以完成。對于入門者,TensorFlow的底層運行機制難以掌握,很多時候導致了放棄。頻繁變動的接口。TensorFlow的接口一直處于快速迭代之中,且向后兼容性較差,這導致許多陳舊的開源代碼已經無法在新版運行,同時也間接導致了許多第三方框架出現BUG。至今TensorFlow仍沒有一個統一易用的接口。接口設計過于晦澀難懂,擁有圖、會話、命名空間、PlaceHolder等諸多抽象概念,對普通用戶來說難以理解。同一個功能,TensorFlow提供了多種實現,這些實現良莠不齊,使用中還有細微的區別,很容易將用戶帶入坑中。TensorFlow作為一個復雜的系統,文檔和教程眾多,但缺乏明顯的條理和層次,雖然查找很方便,但用戶卻很難找到一個真正循序漸進的入門教程。TensorFlow的批評三者的比較RPaddlePaddle給我們留下最深的印象就是巨大的本土化優勢。現在的深度學習框架的發展的速度逐漸慢了下來,這也意味著深度學習框架在現階段已經趨近成熟。而我們在使用框架時會發現,框架上的差異逐漸小了,API也越來越相似,甚至框架的遷移也變得容易起來。但是以PaddlePaddle為代表的國產深度學習框架則在發展中不斷尋找著屬于自己的特色。01020304GOALPaddlePaddlePaddlePaddle有著極

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論