TensorFlow 正準備發(fā)布 2.0 版。本文中,我們將會預覽 TensorFlow 高級 API 的發(fā)展方向,并解答一些常見問題。
Keras是一個頗受歡迎的高級 API,專用于構(gòu)建和訓練深度學習模型。此 API 可用于快速原型設計、頂尖研究與實際生產(chǎn)。TensorFlow 現(xiàn)已支持 Keras,但在 2.0 版中,我們正致力將 Keras 更緊密地集成至 TensorFlow 平臺的其余組件。
通過將 Keras 打造為 TensorFlow 的高級 API,我們旨在幫助機器學習新手開發(fā)者們更輕松地開啟 TensorFlow 入門之旅。單個高級 API 可減少混淆,使我們更加專注于為研究人員提供高級功能。
我們希望您能像我們一樣,盡情享受此款 API 的使用體驗!
Keras 具備以下幾項關(guān)鍵優(yōu)勢:
人性化:Keras 界面簡單、一致,已針對常見用例進行優(yōu)化。Keras 能夠就用戶錯誤提供清晰且可處理的反饋,不僅便于用戶了解錯誤消息,而且通常還能提供實用建議。
模塊化與可組合性:Keras 模型由可配置的構(gòu)建基塊相連組合而成,幾乎不存在任何限制。Keras 的部分組件可重復利用,用戶將無需采用甚至了解框架提供的全部內(nèi)容。例如,您無需通過 Keras 模型開展訓練便可使用層或優(yōu)化器。
易于擴展:您可以通過編寫自定義構(gòu)建基塊來展現(xiàn)新的研究思路,包括構(gòu)建新層、損失函數(shù)以及 [在此處插入您的想法] 以開發(fā)頂尖創(chuàng)意。
初學者和專家通用:深度學習開發(fā)者背景不同、經(jīng)驗水平各異,而無論您是剛剛?cè)腴T,還是擁有多年經(jīng)驗,Keras 均可提供切合您需求的 API。
綜上所述,無論是學習機器學習、研究、應用開發(fā)抑或部署,Keras 均能在各類用例中簡化工作流程并提高工作效率。
首先,我們會解答現(xiàn)已提出的幾個問題。其次,我們將深入了解 TensorFlow 隨附的此版 Keras 將能為您實現(xiàn)哪些功能。
常見問題解答
Keras 是否為一個獨立的庫?
其實,更應將 Keras 視為一種 API 規(guī)范。Keras 的參考實現(xiàn)一直作為獨立的開放源代碼項目進行維護,具體可于此網(wǎng)站找到:www.keras.io。該項目獨立于 TensorFlow,并擁有一個活躍的貢獻者與用戶社區(qū)。TensorFlow 包括 Keras API 的完整實現(xiàn)(位于tf.keras 模塊),且此 API 具備針對 TensorFlow 的增強功能。
Keras 只是 TensorFlow 或其他庫的包裝器嗎?
不,這是一個常見誤解(但可以理解)。Keras 是一種用于定義和訓練機器學習模型的API 標準。Keras 與特定實現(xiàn)無關(guān):Keras API 可用于 TensorFlow、MXNet、TypeScript、JavaScript、CNTK、Theano、PlaidML、Scala、CoreML 和其他庫的實現(xiàn)。
TensorFlow 內(nèi)置的 Keras 版本與 keras.io 提供的版本有何不同?
TensorFlow 包括 Keras API 的具體實現(xiàn)(位于tf.keras模塊),且此 API 具備針對 TensorFlow 的增強功能。這些功能包括:支持Eager Execution以便進行直觀調(diào)試和快速迭代、支持 TensorFlow SavedModel 模型交換格式,以及為分布式訓練(包括 TPU 上的訓練)提供集成支持。
在使用 tf.kerasModel SubclassingAPI 時,Eager Execution 功能尤為有用。此 API 是受Chainer的啟發(fā)開發(fā)而成,可讓您命令式地編寫模型的正向傳遞。tf.keras 緊密集成于 TensorFlow 生態(tài)系統(tǒng),同時也支持:
tf.data:可助您構(gòu)建高性能輸入管道。若您有意嘗試,則可使用 NumPy 格式的數(shù)據(jù)訓練模型,或使用 tf.data 來擴大規(guī)模和提升性能。
分布策略:該策略用于在各類計算配置中開展分布式訓練,包括遍布于眾多機器上的 GPU 和 TPU。
導出模型:利用 tf.keras API 創(chuàng)建的模型能夠以 TensorFlowSavedModel格式進行序列化,并能借助TensorFlow Serving或通過其他語言綁定(Java、Go、Rust、C# 等)提供給用戶使用。
導出的模型可通過TensorFlow Lite部署至移動和嵌入式設備,同時也適用于TensorFlow.js(注意:您也可使用同樣常見的 Keras API 直接在 JavaScript 中開發(fā)模型)。
特征列:用于有效表示及分類結(jié)構(gòu)化數(shù)據(jù)。
此外,tf.keras 還可支持其他正在開發(fā)的內(nèi)容。
如何安裝 tf.keras?是否還需通過 pip 安裝 Keras?
tf.keras 內(nèi)附于 TensorFlow 中。您無需單獨安裝 Keras。例如,您可以在Colab筆記本中運行如下代碼:
!pip install tensorflowimport tensorflow as tfDense = tf.keras.layers.Dense
現(xiàn)在您已能使用 tf.keras。如果您不熟悉如何導入,可以查看近期發(fā)布的部分 教程 獲取示例(https://www.tensorflow.org/tutorials/)。
您提到 TensorFlow 可為初學者和專家提供不同的 API 模式。這些模式看起來如何?
TensorFlow 開發(fā)者的經(jīng)驗水平千差萬別,既有首次學習機器學習的學生,也有機器學習專家和研究人員。恰巧,TensorFlow 的優(yōu)點之一便是能提供多個 API 以支持不同的工作流程和目標。而這也是 TensorFlow 集成 Keras 的主要設計目標,即讓用戶能夠選擇對自己更有用處的 Keras 組件,而無需采用整個框架。
Sequential API
如果您正在學習機器學習,建議您先從 tf.kerasSequential API開始。該款 API 直觀、簡潔,且適用于實踐中 95% 的機器學習問題。如果使用此 API,您大約只需 10 行代碼便可編寫出首個神經(jīng)網(wǎng)絡。
通過幾行代碼訓練首個神經(jīng)網(wǎng)絡的示例(https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/_index.ipynb)
最常見的模型定義方法是構(gòu)建層圖,這與我們在深度學習中通常使用的心智模式相對應。最簡單的模型類型是層堆棧。您可以使用 Sequential API 定義此類模型,如下所示:
model = tf.keras.Sequential()model.add(layers.Dense(64, activation=’relu’))model.add(layers.Dense(64, activation=’relu’))model.add(layers.Dense(10, activation=’softmax’))Such a model can then be compiled and trained in a few lines:model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘a(chǎn)ccuracy’])model.fit(x_train, y_train, epochs=5)model.evaluate(x_test, y_test)
您可以在 “學習和使用機器學習” 部分找到更多使用 Sequential API 的示例,(參考鏈接:tensorflow.org/tutorials)。
獲取教程,了解如何使用 Sequential API 在 Fashion MNIST 數(shù)據(jù)集上訓練首個神經(jīng)網(wǎng)絡(https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/keras/basic_classification.ipynb)
Functional API
當然,序貫模型只是簡單的層堆棧,并不能表示任意模型。您可使用Functional API構(gòu)建更高級的模型,此 API 可幫助您定義復雜的拓撲結(jié)構(gòu),包括多輸入和多輸出模型、共享層模型以及采用殘差連接的模型。
使用 Functional API 構(gòu)建模型時,層可供調(diào)用(在張量上),還可返回張量以作為輸出。這些輸入和輸出張量可用于定義模型。例如:
inputs = tf.keras.Input(shape=(32,))# A layer instance is callable on a tensor, and returns a tensor.x = layers.Dense(64, activation=’relu’)(inputs)x = layers.Dense(64, activation=’relu’)(x)predictions = layers.Dense(10, activation=’softmax’)(x)# Instantiate the model given inputs and outputs.model = tf.keras.Model(inputs=inputs, outputs=predictions)
此類模型也可使用以上同種簡單命令進行編譯和訓練。您可在此處 (https://www.tensorflow.org/guide/keras#functional_api)了解有關(guān) Functional API 的更多內(nèi)容。
Model Subclassing API
可使用Model Subclassing API構(gòu)建可完全自定義的模型。在類方法主體中,您可采用此模式命令式地定義正向傳遞。例如:
class MyModel(tf.keras.Model):
def __init__(self): super(MyModel, self).__init__() # Define your layers here. self.dense_1 = layers.Dense(32, activation=’relu’) self.dense_2 = layers.Dense(num_classes, activation=’sigmoid’)
def call(self, inputs): # Define your forward pass here, # using layers you previously defined in `__init__` x = self.dense_1(inputs) return self.dense_2(x)
此類模型更加靈活,但也更難調(diào)試。這三類模型均可使用簡單的編譯與調(diào)整命令(如前文所示)進行編譯和訓練,您也可自行編寫自定義訓練循環(huán),以實現(xiàn)完全控制。
例如:
model = MyModel()
with tf.GradientTape() as tape: logits = model(images, training=True) loss_value = loss(logits, labels)
grads = tape.gradient(loss_value, model.variables)optimizer.apply_gradients(zip(grads, model.variables))
如需 Model Subclassing 模式的更多相關(guān)示例,請查看下方鏈接或訪問tensorflow.org/tutorials(參閱 “研究與實驗” 部分)。
通過 Model Subclassing API 實現(xiàn)的基于注意力機制的神經(jīng)機器翻譯
通過 Model Subclassing API 實現(xiàn)的GAN(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/dcgan.ipynb)
如果以上三種模式均不適用我的研究,該怎么辦?
如果您發(fā)現(xiàn) tf.keras 不適用于自身應用領(lǐng)域,我們還提供其他多種途徑。您可以:
單獨使用 Keras 模型定義中的 tf.keras.layers,然后自行編寫梯度和訓練代碼。您還可單獨或獨立使用 tf.keras.optimizers、tf.keras.initializers、tf.keras.losses 或 tf.keras.metrics。
此外,您也可完全忽略 tf.keras,并使用較低層級的 TensorFlow、Python 和AutoGraph獲取您期望的結(jié)果。
這完全由您決定!請注意,tf.layers 中的非面向?qū)ο髮訉⒈粭売茫?tf.contrib.*(包括 tf.contrib.slim 和 tf.contrib.learn 等高級 API)將無法在 TensorFlow 2.0 中使用。
Estimator 有何變化?
Estimator在 Google 內(nèi)部以及更廣泛的 TensorFlow 社區(qū)中應用甚廣。我們已將數(shù)種模型打包為預創(chuàng)建的 Estimator,包括線性分類器、DNN 分類器、DNN 線性組合分類器(亦即廣度與深度模型)和梯度提升樹。這些模型已投入生產(chǎn)并得到廣泛部署;基于此,TensorFlow 2.0 中將會添加 Estimator API(包括預創(chuàng)建的 Estimator)。
對于使用預創(chuàng)建 Estimator 的用戶而言,新版中重點開發(fā)的 Keras 和 Eager Execution 對其產(chǎn)生的影響微乎其微。我們可以更改預創(chuàng)建 Estimator 的實現(xiàn)方式,但會保持 API 界面不變。我們還將繼續(xù)添加作為預創(chuàng)建 Estimator 實現(xiàn)的模型的 Keras 版本,同時還會擴展 Keras,以更好地滿足大規(guī)模生產(chǎn)需求。
換言之,如果您在開發(fā)自定義架構(gòu),我們建議您使用 tf.keras 而非 Estimator 來構(gòu)建模型。如果您在構(gòu)建需要借助 Estimator 的基礎(chǔ)架構(gòu),則可通過model_to_estimator()來轉(zhuǎn)換模型,而我們會努力確保 Keras 在整個 TensorFlow 生態(tài)系統(tǒng)中順利運行。
向 TensorFlow 2.0 進軍!
我們希望您能像我們一樣,盡情享受 tf.keras 的使用體驗!未來數(shù)月內(nèi),TensorFlow 團隊將專注提升開發(fā)者的使用體驗。在此期間,我們會提供相關(guān)文檔和教程。我們期待您分享看法和反饋,并通過 GitHub Issue 和 PR 為項目作出貢獻。感謝大家!
-
深度學習
+關(guān)注
關(guān)注
73文章
5492瀏覽量
120977 -
tensorflow
+關(guān)注
關(guān)注
13文章
328瀏覽量
60499 -
keras
+關(guān)注
關(guān)注
2文章
20瀏覽量
6080
原文標題:標準化 Keras:TensorFlow 2.0 高級 API 指南
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論