備受廣大開發(fā)者歡迎的深度學習框架Keras,正式更新了3.0版本,實現(xiàn)了對PyTorch和JAX的支持,同時性能提升,還能輕松實現(xiàn)大規(guī)模分布式訓(xùn)練。
經(jīng)過5個月的公開Beta測試,深度學習框架Keras 3.0終于面向所有開發(fā)者推出。
全新的Keras 3對Keras代碼庫進行了完全重寫,可以在JAX、TensorFlow和PyTorch上運行,能夠解鎖全新大模型訓(xùn)練和部署的新功能。
「Keras之父」François Chollet在最新版本發(fā)布之前,也是做了多次預(yù)告。目前,有250+萬的開發(fā)者都在使用Keras框架。
在 JAX、TensorFlow 和 PyTorch 上運行 Keras
通過新的 Keras 分發(fā) API 解鎖任意數(shù)量的設(shè)備和主機的訓(xùn)練運行
開發(fā)者甚至可以將Keras用作低級跨框架語言,以開發(fā)自定義組件,例如層、模型或指標。
只需一個代碼庫,這些組件便可用在JAX、TensorFlow、PyTorch中的原生工作流。
最初的Keras可以在Theano、TensorFlow、CNTK,甚至MXNet上運行。
2018年,由于Theano和CNTK已停止開發(fā),TensorFlow似乎成為了唯一可行的選擇,于是,Keras將開發(fā)重點放在了TensorFlow上。
根據(jù)2023年StackOverflow開發(fā)者調(diào)查,和2022年Kaggle機器學習和數(shù)據(jù)科學調(diào)查等顯示,
TensorFlow擁有55%到60%的市場份額,是ML在生產(chǎn)領(lǐng)域的首選。
而PyTorch擁有40%到45%的市場份額,是ML在研究領(lǐng)域的首選。
與此同時,JAX雖然市場份額要小得多,但已被Google DeepMind、Midjourney、Cohere等生成式AI領(lǐng)域的頂級參與者所接受。
于是,開發(fā)團隊對Keras代碼庫進行了完全重寫,新誕生的Keras 3.0基于模塊化后端架構(gòu)進行了重構(gòu),有能力在任意框架上運行。
同時新的Keras也保證了兼容性,比如在使用TensorFlow后端時,你可以簡單地使用 import keras_core as keras 來替換from tensorflow import keras
——現(xiàn)有的代碼將毫無問題地運行,而且由于 XLA 編譯,通常性能略有提高。
Keras vs. TensorFlow
小編在這里給大家舉一個例子,說明如何從TensorFlow的代碼轉(zhuǎn)換成Keras的形式。
TensorFlow Core Implementation
相比之下,我們可以清楚地看到Keras帶來的簡潔性。
TensorFlow可以對每個變量進行更精細的控制,而Keras提供了易用性和快速原型設(shè)計的能力。
對于一些開發(fā)者來說,Keras省去了開發(fā)中的一些麻煩,降低了編程復(fù)雜性,節(jié)省了時間成本。
Keras最大的優(yōu)勢在于,通過出色的UX、API設(shè)計和可調(diào)試性可實現(xiàn)高速開發(fā)。
而且,它還是一個經(jīng)過實戰(zhàn)考驗的框架,并為世界上一些最復(fù)雜、最大規(guī)模的ML系統(tǒng)提供支持,比如Waymo自動駕駛車、YouTube推薦引擎。
那么,使用新的多后端Keras 3還有哪些額外的優(yōu)勢呢?
在基準測試中,發(fā)現(xiàn)JAX通常在GPU、TPU和CPU上提供最佳的訓(xùn)練和推理性能,但結(jié)果因模型而異,因為非XLA TensorFlow在GPU上偶爾會更快。
它能夠動態(tài)選擇為模型提供最佳性能的后端,而無需對代碼進行任何更改,這意味著開發(fā)者可以以最高效率進行訓(xùn)練和服務(wù)。
任何Keras 3模型都可以作為PyTorch模塊實例化,可以作為 TensorFlow SavedModel 導(dǎo)出,也可以作為無狀態(tài) JAX 函數(shù)實例化。
這意味著開發(fā)者可以將Keras 3模型與PyTorch生態(tài)系統(tǒng)包,全系列TensorFlow部署和生產(chǎn)工具(如TF-Serving,TF.js和TFLite)以及JAX大規(guī)模TPU訓(xùn)練基礎(chǔ)架構(gòu)一起使用。使用 Keras 3 API 編寫一個 model.py ,即可訪問 ML 世界提供的一切。
Keras 3包含一個全新的分布式 API,即keras.distribution 命名空間,目前已在JAX后端實現(xiàn)(即將在TensorFlow和PyTorch后端實現(xiàn))。
通過它,可以在任意模型尺度和聚類尺度上輕松實現(xiàn)模型并行、數(shù)據(jù)并行以及兩者的組合。由于它能將模型定義、訓(xùn)練邏輯和分片配置相互分離,因此使分發(fā)工作流易于開發(fā)和維護。
想要發(fā)布預(yù)訓(xùn)練模型?想讓盡可能多的人能夠使用它嗎?如果你在純TensorFlow或PyTorch中實現(xiàn)它,它將被大約一半的社區(qū)使用。
如果你在Keras 3中實現(xiàn)了它,那么任何人都可以立即使用它,無論他們選擇的框架是什么(即使他們自己不是Keras用戶)。在不增加開發(fā)成本的情況下實現(xiàn)2倍的影響。
Keras 3 / fit() / evaluate() predict() 例程與 tf.data.Dataset 對象、PyTorch DataLoader 對象、NumPy 數(shù)組、Pandas 數(shù)據(jù)幀兼容——無論你使用什么后端。你可以在 PyTorch DataLoader 上訓(xùn)練 Keras 3 + TensorFlow 模型,也可以在tf.data.Dataset上訓(xùn)練Keras 3 + PyTorch模型。
預(yù)訓(xùn)練模型
現(xiàn)在,開發(fā)者即可開始使用Keras 3的各種預(yù)訓(xùn)練模型。
所有40個Keras應(yīng)用程序模型( keras.applications 命名空間)在所有后端都可用。KerasCV和KerasNLP中的大量預(yù)訓(xùn)練模型也適用于所有后端。
跨框架開發(fā)
Keras 3能夠讓開發(fā)者創(chuàng)建在任何框架中都相同的組件(如任意自定義層或預(yù)訓(xùn)練模型),它允許訪問適用于所有后端的 keras.ops 命名空間。
Keras 3包含NumPy API的完整實現(xiàn),——不是「類似 NumPy」,而是真正意義上的 NumPy API,具有相同的函數(shù)和參數(shù)。比如 ops.matmul、ops.sum、ops.stack、ops.einsum 等函數(shù)。
Keras 3還包含NumPy中沒有的,一組特定于神經(jīng)網(wǎng)絡(luò)的函數(shù),例如 ops.softmax, ops.binary_crossentropy, ops.conv等。
另外,只要開發(fā)者使用的運算,全部來自于keras.ops ,那么自定義的層、損失。
在Keras中,Sequential 和 Model 類是模型構(gòu)建的核心,為組裝層和定義計算圖提供了一個框架。
Sequential 是層的線性堆棧。它是Model 的子類,專為簡單情況而設(shè)計,模型由具有一個輸入和一個輸出的線性層堆棧組成。
自動前向傳遞:當向Sequential模型添加層時,Keras會自動將每一層的輸出連接到下一層的輸入,從而創(chuàng)建前向傳遞,而無需手動干預(yù)。
內(nèi)部狀態(tài)管理:Sequential管理層的狀態(tài)(如權(quán)重和偏置)和計算圖。調(diào)用compile時,它會通過指定優(yōu)化器、損失函數(shù)和指標來配置學習過程。
訓(xùn)練和推理:Sequential類提供了fit、evaluate和predict等方法,分別用于訓(xùn)練、評估和預(yù)測模型。這些方法在內(nèi)部處理訓(xùn)練循環(huán)和推理過程。
Model類與函數(shù)式API一起使用,提供了比Sequential更大的靈活性。它專為更復(fù)雜的架構(gòu)而設(shè)計,包括具有多個輸入或輸出、共享層和非線性拓撲的模型。
層圖:Model允許創(chuàng)建層圖,允許一個層連接到多個層,而不僅僅是上一個層和下一個層。
顯式輸入和輸出管理:在函數(shù)式API中,可以顯式定義模型的輸入和輸出。相比于Sequential,可以允許更復(fù)雜的架構(gòu)。
連接靈活性:Model類可以處理具有分支、多個輸入和輸出以及共享層的模型,使其適用于簡單前饋網(wǎng)絡(luò)以外的廣泛應(yīng)用。
狀態(tài)和訓(xùn)練管理:Model類管理所有層的狀態(tài)和訓(xùn)練過程,同時提供了對層的連接方式,以及數(shù)據(jù)在模型中的流動方式的更多控制。
Model 類和 Sequential類都依賴于以下機制:
層注冊:在這些模型中添加層時,層會在內(nèi)部注冊,其參數(shù)也會添加到模型的參數(shù)列表中。
自動微分:在訓(xùn)練過程中,Keras使用后端引擎(TensorFlow等)提供的自動微分來計算梯度。這一過程對用戶而言是透明的。
后端執(zhí)行:實際計算(如矩陣乘法、激活等)由后端引擎處理,后端引擎執(zhí)行模型定義的計算圖。
序列化和反序列化:這些類包括保存和加載模型的方法,其中涉及模型結(jié)構(gòu)和權(quán)重的序列化。
從本質(zhì)上講,Keras中的Model和Sequential類抽象掉了定義和管理計算圖所涉及的大部分復(fù)雜性,使用戶能夠?qū)W⒂谏窠?jīng)網(wǎng)絡(luò)的架構(gòu),而不是底層的計算機制。
Keras 自動處理各層如何相互連接、數(shù)據(jù)如何在網(wǎng)絡(luò)中流動以及如何進行訓(xùn)練和推理操作等錯綜復(fù)雜的細節(jié)。





暫無評論,快來評論吧!