每年的9月和10月,都是各大手機(jī)廠商旗艦機(jī)型紛至沓來的時刻。今年也不例外,只不過,今年華為壓軸發(fā)布的新旗艦華為Mate 10系列,相比其他手機(jī)產(chǎn)品要更為出彩,鶴立雞群。因為華為Mate 10帶來的,不僅是外觀設(shè)計和工藝上的升級,更通過全球首款移動AI芯片,推動智能手機(jī)向“智慧手機(jī)”進(jìn)化。
10月16日在德國慕尼黑發(fā)布后,國外的權(quán)威科技媒體也在第一時間對華為Mate 10系列關(guān)注,并進(jìn)行了評測。
隸屬于英國第六大媒體公司Future plc公司的線上科技媒體Techradar認(rèn)為,華為Mate 10采用了雙面玻璃材質(zhì),外觀視覺體驗不錯。Mate 10 Pro版的無邊框OLED屏幕更加迷人一些。現(xiàn)實(shí)效果上與iPhone X、三星Galaxy Note 8并駕齊驅(qū)同樣優(yōu)秀。
在操作系統(tǒng)方面,華為Mate 10是華為第一款搭載安卓8.0(奧利奧)系統(tǒng)的手機(jī)。不過,華為Mate 10系列并沒有使用原生系統(tǒng),而是采用了基于其開發(fā)的EMUI 8.0。
新的系統(tǒng)在界面上進(jìn)行了更多美化,還將安卓8.0上一些用途不大的程序進(jìn)行清理。Techradar試用后認(rèn)為EMUI 8.0的諸多改進(jìn),提升了原生安卓系統(tǒng)的交互效率。
Techradar也對華為Mate 10的全新徠卡雙攝進(jìn)行了體驗。Techradar感受到2000萬像素黑白攝像頭和1200萬像素彩色攝像頭組合的神奇。兩個攝像頭協(xié)同工作,都擁有f/1.6的光圈,對夜間拍照效果的提升明顯——解決了很多手機(jī)拍照的難題。
華為將人工智能技術(shù)應(yīng)用到了拍照里面,能夠通過傳感器檢測運(yùn)動,還能夠根據(jù)被拍攝對象自動選擇場景模式,智能對相機(jī)的拍攝參數(shù)進(jìn)行優(yōu)化。目前已經(jīng)有了13種場景供選擇,像景色、食物、貓、狗等等。
美國著名的評測機(jī)構(gòu)Android Authority也上手了華為Mate 10。
Android Authority認(rèn)為,華為Mate 10順應(yīng)現(xiàn)在的人工智能趨勢,采用了大量的人工智能技術(shù),最主要的就是搭載麒麟970處理器。這是一款嵌入了神經(jīng)網(wǎng)絡(luò)處理器NPU的人工智能芯片。
華為還與微軟合作,在麒麟970芯片的接口上開發(fā)出了隨行翻譯器。華為Mate 10可以不進(jìn)能夠翻譯文本和語音,更可以通過相機(jī)調(diào)用NPU,對拍攝到的文字和標(biāo)志進(jìn)行實(shí)時的識別、翻譯。為了讓更多的開發(fā)者調(diào)用AI運(yùn)算能力,麒麟970支持Google TensorFlow Lite和Facebook Caffe2開發(fā)框架,通過NPU使應(yīng)用具備機(jī)器學(xué)習(xí)能力。這意味著華為Mate 10將擁有更多的AI應(yīng)用,使用戶體驗到智慧生活。
美國的新興科技新聞評論網(wǎng)站Digital Trends也在體驗后,對華為Mate 10做出了評價。它認(rèn)為華為Mate 10的全玻璃后殼看起來更為成熟。背面的“反光條紋”,橫框雙攝像頭,起到了很好的裝飾作用。
華為Mate 10和華為Mate 10 Pro也采用了流行的全面屏,屏幕占比極高。不僅視覺上漂亮,而且手感也極佳。Mate 10 Pro版的屏幕更高一些,為18:9比例,可以顯示更多行的內(nèi)容。
在防水能力方面,華為Mate 10 Pro做到了和iPhone 8或者Galaxy Note 8一樣的IP67防水。Mate10支持生活防水功能。
Digital Trends對華為Mate 10系列的人工智能有深刻體會。正在看電影或游戲時,如果收到通知,手機(jī)會建議進(jìn)行分屏模式。這樣就能在看電影或打游戲的同時查看通知。它還有護(hù)眼模式,當(dāng)用戶長時間在暗光環(huán)境時,華為Mate系列會自動將屏幕調(diào)低,變得更柔和,實(shí)現(xiàn)護(hù)眼。
科技網(wǎng)站Stuff也認(rèn)為華為Mate 10系列拿到了AI的先機(jī)。麒麟970有專門的NPU用于處理AI相關(guān)應(yīng)用,比CPU內(nèi)核快25倍。這些巨大的優(yōu)勢,是十分可信的,因為NPU之于AI就像GPU專門處理圖形一樣。
總體來說,外媒對華為Mate 10系列的工藝、攝像、性能等方面的評價均為正面。最令他們印象深刻的是華為Mate 10系列的人工智能能力,麒麟970的應(yīng)用使其在AI方面具備極大的優(yōu)勢。有媒體認(rèn)為,華為在手機(jī)人工智能方面的工作是開創(chuàng)性的,是AI人工智能手機(jī)的引路人。
選自pyimagesearch
作者:Adrian Rosebrock
參與:王子嘉、張倩
隨著 TensorFlow 2.0 的發(fā)布,不少開發(fā)者產(chǎn)生了一些疑惑:作為 Keras 用戶,TensorFlow 2.0 的發(fā)布跟我有關(guān)系嗎?TensorFlow 中的 tf.keras 和 Keras 有什么區(qū)別?我該用哪一個訓(xùn)練神經(jīng)網(wǎng)絡(luò)?在本文中,作者給出的答案是:你應(yīng)該在以后所有的深度學(xué)習(xí)項目和實(shí)驗中都使用 tf.keras。
通過本教程,你可以了解 Keras 和 tf.keras 之間的區(qū)別,以及 TensorFlow 2.0 的新特性。本教程的靈感來自于上周二我在 PyImageSearch 閱讀器上收到的一封郵件。
一位名叫 Jeremiah 的讀者問道:
你好,Adrian,我看到 TensorFlow 2.0 在幾天前發(fā)布了。
而且 TensorFlow 開發(fā)人員似乎正在推廣 Keras,或者應(yīng)該叫 tf.keras,希望將它作為 TensorFlow 2.0 中的推薦高級 API。
但是我覺得 Keras 包應(yīng)該是自己獨(dú)立的呀?
我在訓(xùn)練自己的網(wǎng)絡(luò)時,會糾結(jié)于該使用哪個「Keras」。
其次,有必要升級到 TensorFlow 2.0 嗎?
我在深度學(xué)習(xí)博客中看到了一些有關(guān) TensorFlow 2.0 的教程,但是對于剛剛提到的那些困惑,我不知道該從何處著手去解決。你能給我一些啟示嗎?
其實(shí),TensorFlow 2.0 發(fā)布之后,許多像 Jeremiah 這樣的深度學(xué)習(xí)從業(yè)人員都在撓頭:
從 TensorFlow 1.x 到 TensorFlow 2.0 的過渡或多或少都會有點(diǎn)困難,至少在開始階段是這樣。但是如果你對它有足夠多的了解,你的過渡期將會極其輕松。
在本教程剩余的內(nèi)容里,我將討論 Keras 與 tf.keras 的相似之處,以及 TensorFlow 2.0 中值得注意的功能。
Keras vs tf.keras:在 TensorFlow 2.0 中它們的區(qū)別是什么?
在本教程的第一部分,我們會討論 Keras 和 TensorFlow 之間錯綜復(fù)雜的歷史,包括它們是如何相互促進(jìn)、共同成長、彼此滋養(yǎng),從而達(dá)到今天這么受歡迎的程度。
然后,我將說明為什么你應(yīng)該在以后所有的深度學(xué)習(xí)項目和實(shí)驗中都使用 tf.keras。
再后面,我會講述「計算后端」的概念以及 TensorFlow 的流行度如何使其成為 Keras 最流行的后端,從而為 Keras 集成到 TensorFlow 的 tf.keras 子模塊中鋪平了道路。
最后,我會介紹一些 Keras 用戶應(yīng)該關(guān)心的、流行的 TensorFlow 2.0 特性,包括:
TensorFlow 2.0 包含了一個完整的生態(tài)系統(tǒng),包括 TensorFlow Lite(用于移動和嵌入式設(shè)備)和用于開發(fā)生產(chǎn)機(jī)器學(xué)習(xí)流水線的 TensorFlow Extended(用于部署生產(chǎn)模型)。
Keras 與 TensorFlow 錯綜復(fù)雜的關(guān)系
圖 1:Keras 與 TensorFlow 有一段極其復(fù)雜的歷史,讀完這章,你就可以了解到由 Cliff 筆記記錄的它們的愛情故事。你還會知道,在 TensorFlow 2.0 中,你應(yīng)該使用 tf.keras,而不是單獨(dú)的 keras 包。
Keras 和 TensorFlow 之間復(fù)雜糾纏的關(guān)系就像一對高中情侶的愛情故事,他們約會、分手,但最終找到了一個共處的方式。這個故事很長,有很多細(xì)節(jié),有時甚至?xí)幸恍┟堋Ec其回憶完整的愛情故事,不如來回顧一下 Cliffs 的筆記:
當(dāng)時沒有太多的深度學(xué)習(xí)庫可用——那時候比較流行的庫是 Torch、Theano 和 Caffe。這些庫的問題是,用這些庫就像在實(shí)驗的時候用匯編或者 C++編程一樣——乏味、耗時、效率低下。另一方面,Keras 非常容易使用,這可以讓研究人員和開發(fā)人員的實(shí)驗迭代更快。
為了訓(xùn)練你自己的自定義神經(jīng)網(wǎng)絡(luò),Keras 需要一個后端。后端是一個計算引擎——它可以構(gòu)建網(wǎng)絡(luò)的圖和拓?fù)浣Y(jié)構(gòu),運(yùn)行優(yōu)化器,并執(zhí)行具體的數(shù)字運(yùn)算。要理解后端的概念,可以試想你需要從頭開始構(gòu)建一個網(wǎng)站。你可以使用 PHP 編程語言和 SQL 數(shù)據(jù)庫。這個 SQL 數(shù)據(jù)庫就是是后端。你可以使用 MySQL,PostgreSQL 或者 SQL Server 作為你的數(shù)據(jù)庫;但是,用于與數(shù)據(jù)庫交互的 PHP 代碼是不會變的(當(dāng)然,前提是使用某種可以封裝數(shù)據(jù)庫層的 MVC 范例)。從本質(zhì)上講,PHP 并不關(guān)心正在使用哪個數(shù)據(jù)庫,只要它符合 PHP 的規(guī)則即可。
Keras 也是如此。你可以把后臺看作是你的數(shù)據(jù)庫,Keras 是你用來訪問數(shù)據(jù)庫的編程語言。你可以把后端替換成任何你喜歡的后端,只要它遵守某些規(guī)則,你的代碼就不需要更改。因此,你可以把 Keras 看作是一組用來簡化深度學(xué)習(xí)操作的封裝(abstraction)。(注:雖然 Keras 總是啟用快速原型,但它對研究人員來說不夠靈活。這種情況在 TensorFlow 2.0 中有所改變,本文后面將對此進(jìn)行詳細(xì)介紹)
一開始,在 v1.1.0 之前,Keras 的默認(rèn)后端都是 Theano。與此同時,Google 發(fā)布了 TensorFlow,這是一個用于機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)訓(xùn)練的符號數(shù)學(xué)庫。Keras 開始支持 TensorFlow 作為后端。漸漸地,TensorFlow 成為最受歡迎的后端,這也就使得 TensorFlow 從 Keras v1.1.0 發(fā)行版開始成為 Keras 的默認(rèn)后端。
一般來說,一旦 TensorFlow 成為了 Keras 的默認(rèn)后端,TensorFlow 和 Keras 的使用量會一起增長——沒有 TensorFlow 的情況下就無法使用 Keras,所以如果你在系統(tǒng)上安裝了 Keras,那么你也得安裝 TensorFlow。
同樣的,TensorFlow 用戶也越來越被高級 Keras API 的簡單易用所吸引。tf.keras 是在 TensorFlow v1.10.0 中引入的,這是將 keras 直接集成到 TensorFlow 包中的第一步。
tf.keras 軟件包與你通過 pip 安裝的 keras 軟件包(即 pip install keras)是分開的,過去是這樣,現(xiàn)在也是。為了確保兼容性,原始的 keras 包沒有被包含在 tensorflow 中,因此它們的開發(fā)都很有序。
然而,這種情況正在改變——當(dāng)谷歌在 2019 年 6 月發(fā)布 TensorFlow 2.0 時,他們宣布 Keras 現(xiàn)在是 TensorFlow 的官方高級 API,用于快速簡單的模型設(shè)計和訓(xùn)練。隨著 Keras 2.3.0 的發(fā)布,F(xiàn)rancois 聲明:
如你所見,Keras 與 TensorFlow 之間的有著悠久又錯綜復(fù)雜的歷史。
但是,對于 Keras 用戶來說,讀完這一部分需要了解到,你應(yīng)該在未來的項目中開始使用 TensorFlow 2.0 和 tf.keras 了。
在未來的項目中開始使用 tf.keras
圖 2:TensorFlow 2.0 中,Keras 和 tf.keras 有什么區(qū)別呢
2019 年 9 月 17 日,Keras v2.3.0 正式發(fā)布,在這個版本中 Francois Chollet(Keras 的創(chuàng)建者和首席維護(hù)者)聲明:
Keras v2.3.0 是 Keras 第一個與 tf.keras 同步的版本,也將是最后一個支持除 TensorFlow 以外的后端(即 Theano,CNTK 等)的主要版本。最重要的是,深度學(xué)習(xí)從業(yè)人員應(yīng)該開始使用 TensorFlow 2.0 和 tf.keras 軟件包了。
對于大多數(shù)項目來說,你只需要改變一下你的 import 部分:
在 import 部分加上 tensorflow 作為前綴:
如果你使用的是自定義的訓(xùn)練 loop 或 Sessions,則必須要改動一下代碼才能使用新的 GradientTape 功能,但是總的來說,這個改動相當(dāng)容易。
為了幫助你(自動地)將代碼從 keras 更新為 tf.keras,Google 發(fā)布了一個名為 tf_upgrade_v2 的腳本。顧名思義,這個腳本可以分析你的代碼并報告需要改動的行,該腳本甚至可以替你完成升級過程。
TensorFlow 2.0 中更多自動更新代碼的信息,請參考此鏈接:https://www.tensorflow.org/guide/upgrade。
Keras 的計算后端
圖 3:Keras 支持哪些計算后端?直接在 TensorFlow 中使用 Keras 對 Keras 來說意味著什么?
正如我在本文前面提到的,Keras 依賴于計算后端這一概念。在構(gòu)建模型圖、數(shù)值計算等過程里,計算后端承擔(dān)了所有的「重活」。
而 Keras 作為一個基于這個計算引擎之上的封裝,幫助深度學(xué)習(xí)的開發(fā)人員與實(shí)踐者更簡單地實(shí)現(xiàn)并訓(xùn)練他們的模型。
一開始,Keras 將 Theano 作為它首選的計算后端——然后它又支持了其他的一些后端,包括 CNTK 和 mxnet 等等。
然而,目前最流行的后端是 TensorFlow,而且它也最終成為了 Keras 的默認(rèn)計算后端
隨著越來越多的 TensorFlow 用戶開始使用 Keras 的簡易高級 API,越來越多的 TensorFlow 開發(fā)人員開始考慮將 Keras 項目納入 TensorFlow 中作為一個單獨(dú)模塊,并將其命名為 tf.keras。TensorFlow v1.10 是 TensorFlow 第一個在 tf.keras 中包含一個 keras 分支的版本。
現(xiàn)在 TensorFlow 2.0 已發(fā)布,keras 和 tf.keras 已經(jīng)處于同步狀態(tài),這意味著盡管 keras 和 tf.keras 仍是獨(dú)立的兩個項目,但是開發(fā)人員應(yīng)該開始使用 tf.keras,因為 keras 軟件包僅支持錯誤修復(fù)。
正如 Keras 的創(chuàng)建者和維護(hù)者 Francois Chollet 所說:
這也是 Keras 支持多個后端的最后一個主要版本。長期來看,我們建議用戶考慮開始將 TensorFlow 2.0 中的 Keras 代碼切換為 tf.keras。
它實(shí)現(xiàn)了與 Keras 2.3.0 相同的 API(因此這個改變應(yīng)該像更改 Keras 導(dǎo)入語句一樣容易),但是對 TensorFlow 用戶來說,它具有許多優(yōu)勢,例如對 eager execution、distribution、TPU 訓(xùn)練的支持,以及通常來說對底層的 TensorFlow 與頂層概念(如「層」和「模型」)之間更好的集成度。
它也會得到更好的維護(hù)。
如果你同時是 Keras 和 TensorFlow 用戶,那就該開始考慮將代碼切換到 TensorFlow 2.0 和 tf.keras 了。
TensorFlow 2.0 中的 Sessions 與 Eager Execution
圖 4:Eager excution 是一種更具 Python 風(fēng)格的動態(tài)計算圖處理方式。TensorFlow 2.0 開始支持 eager execution(與 Pytorch 一樣)。你可以在 TensorFlow 2.0 與 tf.keras 中使用 eager execution 與 sessions。
在 tf.keras 使用 Keras API 的 TensorFlow 1.10+用戶應(yīng)該對在訓(xùn)練模型時創(chuàng)建一個 Session 很熟悉:
創(chuàng)建一個 Session 對象,并要求提前構(gòu)建整個模型圖確實(shí)有點(diǎn)麻煩,所以 TensorFlow 2.0 引入了 eager execution 的概念,這樣一來代碼被簡化為:
eager execution 的好處是不需要提前構(gòu)建整個模型圖了。
相反,運(yùn)算會被立刻執(zhí)行(即 eager execution),這也使得模型的構(gòu)建以及調(diào)試變得更容易。
有關(guān) eager execution 的更多細(xì)節(jié),以及在 TensorFlow 2.0 中的使用方法,見此鏈接:
https://medium.com/coding-blocks/eager-execution-in-tensorflow-a-more-pythonic-way-of-building-models-e461810618c8
如果你知道 eager execution 與 sessions 的對比,以及它對模型訓(xùn)練速度的影響,見此鏈接:
https://github.com/sayakpaul/tf - 2.0 - hacks/tree/master/speed%20comparison%20between%20tf%201.x%20and%20tf%202.0。
TensorFlow 2.0 中的自動求導(dǎo)與 GradientTape
圖 5:TensorFlow 2.0 是如何更好地處理自定義層和損失函數(shù)的?答案就是自動求導(dǎo)和 GradientTape。(圖源:https://twitter.com/fchollet/status/1158907168721997824)
如果你是個需要自定義網(wǎng)絡(luò)層和損失函數(shù)的研究人員,那么你可能不喜歡 TensorFlow 1.x(理應(yīng)如此)。
至少可以說,TensorFlow 1.x 的自定義實(shí)現(xiàn)是很笨拙的——要改進(jìn)的地方還有很多。
隨著 TensorFlow 2.0 的發(fā)布,情況開始發(fā)生變化——現(xiàn)在實(shí)現(xiàn)你自己的自定義損失函數(shù)要容易得多。其中一種使其變得簡單的方法是使用自動求導(dǎo)和 GradientTape。要利用 GradientTape,我們需要做的就是創(chuàng)建我們的模型架構(gòu):
定義我們的損失函數(shù)以及優(yōu)化器:
創(chuàng)建負(fù)責(zé)執(zhí)行單個批更新的函數(shù):
然后就可以訓(xùn)練模型了:
GradientTape 魔法為我們在后臺進(jìn)行導(dǎo)數(shù)的計算,使處理自定義損失和層變得容易得多。
說到自定義層和模型的實(shí)現(xiàn),請務(wù)必閱讀下一節(jié)。
TensorFlow 2.0 中的模型和層子類化
TensorFlow 2.0 和 tf.keras 為我們提供了三種獨(dú)立的方法來實(shí)現(xiàn)我們自己的自定義模型:
序列化和函數(shù)化的示例都已經(jīng)在 Keras 中存在很長時間了,但是許多深度學(xué)習(xí)從業(yè)者依然不了解子類化功能。
下周我將針對這三種方法撰寫專門的教程,但目前來說,先讓我們看一下如何使用 TensorFlow 2.0、tf.keras 與模型子類化功能實(shí)現(xiàn)一個基于 LeNet 架構(gòu)的簡單 CNN。
注意 LeNet 類是如何成為 Model 的子類的。LeNet 的構(gòu)造函數(shù)(即 init)定義了模型內(nèi)部的每個單獨(dú)層。然后,call 方法實(shí)現(xiàn)了前向傳遞,這使得你能夠根據(jù)需要自定義前向傳遞的過程。
使用模型子類化的好處是你的模型:
而且,由于你的網(wǎng)絡(luò)架構(gòu)繼承了 Model 類,因此你仍然可以調(diào)用.fit()、. compile()和.evaluate()之類的方法,從而保證了大家熟悉的簡易 Keras API 的使用。
如果你想了解有關(guān) LeNet 的更多信息,可以參考:
https://www.pyimagesearch.com/2016/08/01/lenet-convolutional-neural-network-in-python/
TensorFlow 2.0 開始支持更優(yōu)的多 GPU 與分布式訓(xùn)練
圖 6:TensorFlow 2.0 在多 GPU 訓(xùn)練上是否更好了呢?是的,你只需要一個 MirroredStrategy。(圖源:https://jhui.github.io/2017/03/07 tensorflow - gpu/)
TensorFlow 2.0 和 tf.keras 利用 MirroredStrategy 來提供更好的多 GPU 和分布式訓(xùn)練。
如 TensorFlow 2.0 文檔中所說,「MirroredStrategy 支持在一臺機(jī)器的多個 GPU 上進(jìn)行同步、分布式訓(xùn)練」。
如果要使用多臺機(jī)器(每臺機(jī)器可能有多個 GPU),則應(yīng)使用 MultiWorkerMirroredStrategy。或者,如果你使用 Google 的云進(jìn)行訓(xùn)練,可以試試 TPUStrategy。
不過現(xiàn)在,假設(shè)你正在使用一臺具有多個 GPU 的機(jī)器,并且想在訓(xùn)練時同時使用所有 GPU,你可以先創(chuàng)建你的 MirroredStrategy:
然后你需要聲明你的模型架構(gòu),并在 strategy 的 scope 內(nèi)進(jìn)行編譯:
然后你就可以在那里調(diào)用.fit 來訓(xùn)練模型了。
基于你有多個 GPU,TensorFlow 會為你考慮如何使用多 GPU 進(jìn)行訓(xùn)練的。
TF2.0 是一個生態(tài)系統(tǒng),它包含了 TF 2.0、TF LITE、TFX、量化和部署
圖 7:TensorFlow 2.0 生態(tài)系統(tǒng)中有什么新特性嗎?我應(yīng)該用 Keras 還是 tf.keras?
TensorFlow 2.0 不僅僅是一個計算引擎和用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)庫,它還有很多其他功能。
我們可以使用 TensorFlow Lite (TF Lite) 來訓(xùn)練、優(yōu)化和量化那些專門為資源受限的設(shè)備(如智能手機(jī)和 Raspberry Pi, Google Coral 等其他嵌入式設(shè)備)設(shè)計的模型。
或者,如果你需要將模型部署到生產(chǎn)環(huán)境中,可以使用 TensorFlow Extended (TFX),這是一個用于模型部署的端到端平臺。一旦你的研究和實(shí)驗完成,你就可以利用 TFX 為生產(chǎn)準(zhǔn)備模型,并使用谷歌的生態(tài)系統(tǒng)擴(kuò)展你的模型。
有了 TensorFlow 2.0,我們在研究、實(shí)驗、模型準(zhǔn)備、量化和生產(chǎn)部署之間架起了高效的橋梁。
我真的對 TensorFlow 2.0 的發(fā)布及其對深度學(xué)習(xí)圈的影響感到非常興奮。
總結(jié)
學(xué)習(xí)完本教程,你應(yīng)該學(xué)到了關(guān)于 Keras、tf.keras 和 TensorFlow 2.0 的知識。
第一個要點(diǎn)是,使用 keras 軟件包的深度學(xué)習(xí)從業(yè)人員應(yīng)該開始在 TensorFlow 2.0 中使用 tf.keras。
你不僅體驗到了 TensorFlow 2.0 帶來的加速和優(yōu)化,而且還知道了 keras 包的最新版本(v2.3.0)將成為支持多個后端和特性的最后一個版本。未來,keras 軟件包將只進(jìn)行 bug 修復(fù)。
以后的項目中,你應(yīng)該認(rèn)真考慮使用 tf.keras 和 TensorFlow 2.0。
第二個收獲應(yīng)該是 TensorFlow 2.0 不僅是 GPU 加速的深度學(xué)習(xí)庫。
你不僅能夠使用 TensorFlow 2.0 和 tf.keras 來訓(xùn)練自己的模型,還可以:
就我自己來說,我已經(jīng)開始將原始的 keras 代碼更新成 tf.keras 的版本了。我建議你也這么做。
原文鏈接:https://www.pyimagesearch.com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0/