好書快翻--《Python深度學習第二版》第三章 Keras和TensorFlow簡介

博主有話說:首先感謝您閱讀這篇博客!博主做大數據技術,平時喜歡閱讀英文原版大數據技術書籍,並翻譯成中文,分享出來。如要及時看到翻譯的章節,請關注博主微信公衆號 登峯大數據,微信號  bigdata_work 

本章包括:

  • 詳解TensorFlow、Keras和它們之間的關係

  • 建立一個深度學習的工作空間

  • 核心深度學習概念如何轉化爲Keras和TensorFlow的概述

這一章的目的是給出在實踐使用深度學習的一切相關知識。我們將快速介紹Keras (Keras .io)和TensorFlow (TensorFlow .org),這兩個基於python的深度學習工具將貫穿全書。你會學習如何建立一個深入學習的工作空間,有TensorFlow, Keras,和GPU的支持。最後,在第2章中,與Keras和TensorFlow的第一次接觸的基礎上,我們將回顧神經網絡的核心組件以及它們如何轉化爲Keras和TensorFlow api。

在本章結束時,您將準備好轉向實際的、真實的應用程序—從第4章開始。

3.1 TensorFlow是什麼?

TensorFlow是一個基於python的免費開源機器學習平臺,主要由谷歌開發。與NumPy非常相似,TensorFlow的主要目的是使工程師和研究人員能夠在數值張量上操作數學表達式。但是TensorFlow在以下幾個方面遠遠超出了NumPy的範圍:

  • 它可以自動計算任何可微分表達式的梯度(正如您在第2章中看到的),這使得它非常適合於機器學習。

  • 它不僅可以在CPU上運行,還可以在gpu和TPUs上運行,這是一種高度並行的硬件加速器。

  • TensorFlow中定義的計算可以很容易地分佈在許多機器上。

  • TensorFlow程序可以導出到其他運行時環境,如c++、JavaScript(用於基於瀏覽器的應用程序)或TFLite(用於在移動設備或嵌入式設備上運行的應用程序)等。這使得TensorFlow應用程序易於在實際環境中部署。

一定要記住TensorFlow不僅僅是一個庫(library)。它還是一個平臺,擁有一個龐大的組件生態系統,有些是由谷歌開發的,有些是由第三方開發的。例如,有用於強化學習研究的TF-Agents,用於工業強度的機器學習工作流管理的TFX,用於生產部署的TF-Serving,有用於預訓練模型的TF-Hub存儲庫……這些組件一起涵蓋了非常廣泛的場景,從前沿研究到大規模生產應用程序。

TensorFlow的計算能力相當強:例如,橡樹嶺國家實驗室(Oak Ridge National Lab)的科學家利用它在IBM Summit超級計算機的27,000個gpu上訓練了一個1.1 ExaFLOP的極端天氣預報模型。同樣地,谷歌使用TensorFlow開發了非常計算密集型的深度學習應用程序,比如國際象棋和圍棋代理AlphaZero。對於您自己的模型,如果您有預算,您可以實際地在一個小的TPU Pod或租用在谷歌雲或AWS上的一個大的gpu集羣上擴展到大約10petaflops(每秒千萬億次浮點運算)。到2019年,這仍將是頂級超級計算機峯值計算能力的1%左右!

3.2 Keras是什麼?

Keras是一個基於TensorFlow的Python深度學習API,它提供了一種方便的方式來定義和訓練任何類型的深度學習模型。Keras最初是爲了研究而開發的,目的是實現快速深度學習實驗。

通過TensorFlow, Keras可以在不同類型的硬件(見圖1)上運行——GPU、TPU或普通CPU——並且可以無縫地擴展到數千臺機器上。

圖3.1 Keras和TensorFlow: TensorFlow是一個底層張量計算平臺,Keras是一個高級深度學習API

Keras以優先考慮開發人員體驗而聞名。它是針對人類的API,而不是針對機器的。它遵循了減少認知負荷的最佳實踐:它提供了一致和簡單的工作流,最小化了通用用例所需的操作數量,並且在用戶出錯時提供了清晰和可操作的反饋。這使得Keras作爲一個初學者很容易學習,作爲一個專家使用起來也很高效的API。

截至2019年底,Keras擁有超過37萬名用戶,其中包括學術研究人員、工程師、初創公司和大公司的數據科學家,以及研究生和業餘愛好者。Keras被用於谷歌、Netflix、Uber、CERN、NASA、Yelp、Instacart、Square,以及成百上千的初創公司,這些公司在每個行業都在解決各種各樣的問題。Keras也是Kaggle(機器學習競賽網站)上一個流行的框架,在該網站上,大多數深度學習競賽都是使用Keras模型獲勝的。

因爲Keras有一個龐大而多樣化的用戶羣,它並不會強迫你遵循單一的方法來建立和訓練模型。相反,它支持各種不同的工作流,從非常高的層次到非常低的層次,對應於不同的用戶配置文件。例如,可以有一組方法來構建模型,也有一組方法來訓練它們,每一種方法都代表了可用性和靈活性之間的某種平衡。在第5章中,我們將詳細地回顧這一系列工作流中的一部分。您可以像使用Scikit-Learn一樣使用Keras—只需調用fit()並讓框架完成它的工作—或者您可以像使用NumPy一樣使用它—完全控制每一個小細節。

這意味着一旦你成爲了一名專家,你現在開始學習的所有東西仍然是相關的。您可以很容易地開始,然後逐漸深入到工作流程中,在那裏您可以從零開始編寫越來越多的邏輯。當你從學生變成研究人員,或者從數據科學家變成深度學習工程師時,你不必切換到一個完全不同的框架。

這種哲學與Python本身的哲學沒有什麼不同!有些語言只提供一種編寫程序的方法——例如,面向對象編程或函數式編程。與此同時,Python是一種多範式語言:它提供了一組可能的使用模式,這些模式可以很好地協同工作。這使得Python適合於各種非常不同的場景:系統管理、數據科學、機器學習工程、web開發……或者只是學習如何編程。同樣,您可以將Keras看作是深度學習的Python:一種用戶友好的深度學習語言,爲不同的用戶配置文件提供各種工作流。

3.3 Keras和TensorFlow:簡史

Keras比TensorFlow早8個月。它在2015年3月發佈,而TensorFlow在2015年11月發佈。您可能會問,如果Keras是構建在TensorFlow之上的,那麼在TensorFlow發佈之前,它是如何存在的呢?Keras最初是建立在Theano之上的,Theano是另一個提供自動微分和GPU支持的張量操作庫——這是同類庫中最早的一個。由蒙特利爾大學蒙特利爾學習算法研究所(MILA)開發的Theano在很多方面都是TensorFlow的先驅。它首創了使用靜態計算圖形進行自動區分,並將代碼編譯到CPU和GPU的想法。

2015年末,在TensorFlow發佈之後,Keras被重構爲一個多後端架構:Keras可以與Theano或TensorFlow一起使用,在兩者之間進行切換就像更改環境變量一樣簡單。到2016年9月,TensorFlow已經達到了技術成熟的水平,可以將其作爲Keras的默認後端選項。2017年,Keras增加了兩個新的後端選項:CNTK(由微軟開發)和MXNet(由亞馬遜開發)。如今,Theano和CNTK都處於開發階段,而MXNet在亞馬遜之外並沒有被廣泛使用。Keras又回到了TensorFlow之上的單一後端API。

Keras和TensorFlow多年來一直保持着共生關係。在2016年和2017年,Keras以開發TensorFlow應用程序的用戶友好方式而聞名,它將新用戶引入了TensorFlow生態系統。到2017年底,大多數TensorFlow用戶通過Keras或與Keras結合使用。在2018年,TensorFlow的領導層選擇了Keras作爲TensorFlow的官方高級API。因此,Keras API在TensorFlow 2.0中處於前沿和中心位置,該2.0於2019年9月發佈——對TensorFlow和Keras進行了廣泛的重新設計,考慮了四年多的用戶反饋和技術進步。

至此,您必須開始在實踐中運行Keras和TensorFlow代碼。讓我們開始吧。

3.4建立深度學習工作空間

在開始開發深度學習應用程序之前,需要設置開發環境。強烈建議您在現代的NVIDIA GPU上而不是在計算機的CPU上運行深度學習代碼,儘管這並不是必須的。一些應用程序——特別是使用卷積網絡的圖像處理——在CPU上的速度會慢得令人難以忍受,甚至是一個快速的多核CPU。甚至對於可以在CPU上實際運行的應用程序,使用最新的GPU通常也可以將速度提高1 、 5或10倍。

要在GPU上進行深度學習,你有三個選擇:

  • 購買並安裝物理NVIDIA GPU在您的工作站上。

  • 在谷歌雲平臺或AWS EC2上使用GPU實例。

  • 使用來自Colaboratory的免費GPU運行環境,這是谷歌提供的託管notebook服務(有關“notebook”的詳細信息,請參閱下一節)。

Colaboratory是入門學習時可使用的最簡單的方法,因爲它不需要購買硬件,也不需要安裝軟件—只需在瀏覽器中打開一個選項卡並開始編碼。這是我們推薦用於運行本書中的代碼示例的選項。然而,Colaboratory的免費版本只適用於小工作量。如果你想擴大規模,你將不得不使用第一或第二種選擇。

如果你還沒有可以用於深度學習的GPU(最新的高端NVIDIA GPU),那麼在雲上運行深度學習實驗是一種簡單、低成本的方式,因爲你可以轉移到更大的工作負載上,而不需要購買任何額外的硬件。如果您正在使用Jupyter notebooks進行開發,在雲中運行的體驗與在本地運行沒有什麼不同。

但是,如果你是深度學習的重度使用者,這種設置從長期來看是不可持續的。雲環境並不便宜:到2019年底,在谷歌雲上使用P100GPU,需要支付每小時1.46美元。與此同時,一個可靠的消費級GPU將花費你大約1500到2500美元,這是一個相當穩定的價格,即使這些GPU的規格在不斷改進。如果您經常使用深度學習,可以考慮使用一個或多個gpu設置一個本地工作站。

另外,無論您是在本地運行還是在雲中運行,最好使用Unix工作站。雖然在Windows上使用Keras在技術上是可行的,但我們不建議這樣做。如果你是一個Windows用戶,你想在自己的工作站上進行深度學習,讓一切運行起來的最簡單的解決方案是在你的機器上設置一個Ubuntu雙啓動。這可能看起來很麻煩,但從長遠來看,使用Ubuntu會節省你很多時間和避免很多麻煩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章