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

Keras和TensorFlow究竟哪個(gè)會(huì)更好?
TensorFlow和Keras哪個(gè)更好用?
最新tf.keras指南,TensorFlow官方出品
深入了解Android Studio的最新功能

深入了解電動(dòng)牙刷的構(gòu)造及原理

基于TensorFlow和Keras的圖像識(shí)別

評(píng)論