0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入了解TensorFlow隨附的此版Keras將能為您實(shí)現(xiàn)哪些功能

Tensorflowers ? 來源:lq ? 2018-12-18 13:38 ? 次閱讀

TensorFlow 正準(zhǔn)備發(fā)布 2.0 版。本文中,我們將會(huì)預(yù)覽 TensorFlow 高級(jí) API 的發(fā)展方向,并解答一些常見問題。

Keras是一個(gè)頗受歡迎的高級(jí) API,專用于構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。此 API 可用于快速原型設(shè)計(jì)、頂尖研究與實(shí)際生產(chǎn)。TensorFlow 現(xiàn)已支持 Keras,但在 2.0 版中,我們正致力將 Keras 更緊密地集成至 TensorFlow 平臺(tái)的其余組件。

通過將 Keras 打造為 TensorFlow 的高級(jí) API,我們旨在幫助機(jī)器學(xué)習(xí)新手開發(fā)者們更輕松地開啟 TensorFlow 入門之旅。單個(gè)高級(jí) API 可減少混淆,使我們更加專注于為研究人員提供高級(jí)功能。

我們希望您能像我們一樣,盡情享受此款 API 的使用體驗(yàn)!

Keras 具備以下幾項(xiàng)關(guān)鍵優(yōu)勢(shì):

人性化:Keras 界面簡(jiǎn)單、一致,已針對(duì)常見用例進(jìn)行優(yōu)化。Keras 能夠就用戶錯(cuò)誤提供清晰且可處理的反饋,不僅便于用戶了解錯(cuò)誤消息,而且通常還能提供實(shí)用建議。

模塊化與可組合性:Keras 模型由可配置的構(gòu)建基塊相連組合而成,幾乎不存在任何限制。Keras 的部分組件可重復(fù)利用,用戶將無需采用甚至了解框架提供的全部?jī)?nèi)容。例如,您無需通過 Keras 模型開展訓(xùn)練便可使用層或優(yōu)化器。

易于擴(kuò)展:您可以通過編寫自定義構(gòu)建基塊來展現(xiàn)新的研究思路,包括構(gòu)建新層、損失函數(shù)以及 [在此處插入您的想法] 以開發(fā)頂尖創(chuàng)意。

初學(xué)者和專家通用:深度學(xué)習(xí)開發(fā)者背景不同、經(jīng)驗(yàn)水平各異,而無論您是剛剛?cè)腴T,還是擁有多年經(jīng)驗(yàn),Keras 均可提供切合您需求的 API。

綜上所述,無論是學(xué)習(xí)機(jī)器學(xué)習(xí)、研究、應(yīng)用開發(fā)抑或部署,Keras 均能在各類用例中簡(jiǎn)化工作流程并提高工作效率。

首先,我們會(huì)解答現(xiàn)已提出的幾個(gè)問題。其次,我們將深入了解 TensorFlow 隨附的此版 Keras 將能為您實(shí)現(xiàn)哪些功能。

常見問題解答

Keras 是否為一個(gè)獨(dú)立的庫?

其實(shí),更應(yīng)將 Keras 視為一種 API 規(guī)范。Keras 的參考實(shí)現(xiàn)一直作為獨(dú)立的開放源代碼項(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 或其他庫的包裝器嗎?

不,這是一個(gè)常見誤解(但可以理解)。Keras 是一種用于定義和訓(xùn)練機(jī)器學(xué)習(xí)模型的API 標(biāo)準(zhǔn)。Keras 與特定實(shí)現(xiàn)無關(guān):Keras API 可用于 TensorFlow、MXNet、TypeScript、JavaScript、CNTK、Theano、PlaidML、Scala、CoreML 和其他庫的實(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ā)開發(fā)而成,可讓您命令式地編寫模型的正向傳遞。tf.keras 緊密集成于 TensorFlow 生態(tài)系統(tǒng),同時(shí)也支持:

tf.data:可助您構(gòu)建高性能輸入管道。若您有意嘗試,則可使用 NumPy 格式的數(shù)據(jù)訓(xùn)練模型,或使用 tf.data 來擴(kuò)大規(guī)模和提升性能。

分布策略:該策略用于在各類計(jì)算配置中開展分布式訓(xùn)練,包括遍布于眾多機(jī)器上的 GPU 和 TPU。

導(dǎo)出模型:利用 tf.keras API 創(chuàng)建的模型能夠以 TensorFlowSavedModel格式進(jìn)行序列化,并能借助TensorFlow Serving或通過其他語言綁定(Java、Go、Rust、C# 等)提供給用戶使用。

導(dǎo)出的模型可通過TensorFlow Lite部署至移動(dòng)和嵌入式設(shè)備,同時(shí)也適用于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 中。您無需單獨(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é)者和專家提供不同的 API 模式。這些模式看起來如何?

TensorFlow 開發(fā)者的經(jīng)驗(yàn)水平千差萬別,既有首次學(xué)習(xí)機(jī)器學(xué)習(xí)的學(xué)生,也有機(jī)器學(xué)習(xí)專家和研究人員。恰巧,TensorFlow 的優(yōu)點(diǎn)之一便是能提供多個(gè) API 以支持不同的工作流程和目標(biāo)。而這也是 TensorFlow 集成 Keras 的主要設(shè)計(jì)目標(biāo),即讓用戶能夠選擇對(duì)自己更有用處的 Keras 組件,而無需采用整個(gè)框架。

Sequential API

如果您正在學(xué)習(xí)機(jī)器學(xué)習(xí),建議您先從 tf.kerasSequential API開始。該款 API 直觀、簡(jiǎn)潔,且適用于實(shí)踐中 95% 的機(jī)器學(xué)習(xí)問題。如果使用此 API,您大約只需 10 行代碼便可編寫出首個(gè)神經(jīng)網(wǎng)絡(luò)。

通過幾行代碼訓(xùn)練首個(gè)神經(jīng)網(wǎng)絡(luò)的示例(https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/_index.ipynb)

最常見的模型定義方法是構(gòu)建層圖,這與我們?cè)谏疃葘W(xué)習(xí)中通常使用的心智模式相對(duì)應(yīng)。最簡(jiǎn)單的模型類型是層堆棧。您可以使用 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)

您可以在 “學(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)

此類模型也可使用以上同種簡(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)建可完全自定義的模型。在類方法主體中,您可采用此模式命令式地定義正向傳遞。例如:

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)試。這三類模型均可使用簡(jiǎn)單的編譯與調(diào)整命令(如前文所示)進(jìn)行編譯和訓(xùn)練,您也可自行編寫自定義訓(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)查看下方鏈接或訪問tensorflow.org/tutorials(參閱 “研究與實(shí)驗(yàn)” 部分)。

通過 Model Subclassing API 實(shí)現(xiàn)的基于注意力機(jī)制的神經(jīng)機(jī)器翻譯

通過 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,然后自行編寫梯度和訓(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)將無法在 TensorFlow 2.0 中使用。

Estimator 有何變化?

Estimator在 Google 內(nèi)部以及更廣泛的 TensorFlow 社區(qū)中應(yīng)用甚廣。我們已將數(shù)種模型打包為預(yù)創(chuàng)建的 Estimator,包括線性分類器、DNN 分類器、DNN 線性組合分類器(亦即廣度與深度模型)和梯度提升樹。這些模型已投入生產(chǎn)并得到廣泛部署;基于此,TensorFlow 2.0 中將會(huì)添加 Estimator API(包括預(yù)創(chuàng)建的 Estimator)。

對(duì)于使用預(yù)創(chuàng)建 Estimator 的用戶而言,新版中重點(diǎn)開發(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)需求。

換言之,如果您在開發(fā)自定義架構(gòu),我們建議您使用 tf.keras 而非 Estimator 來構(gòu)建模型。如果您在構(gòu)建需要借助 Estimator 的基礎(chǔ)架構(gòu),則可通過model_to_estimator()來轉(zhuǎn)換模型,而我們會(huì)努力確保 Keras 在整個(gè) TensorFlow 生態(tài)系統(tǒng)中順利運(yùn)行。

向 TensorFlow 2.0 進(jìn)軍!

我們希望您能像我們一樣,盡情享受 tf.keras 的使用體驗(yàn)!未來數(shù)月內(nèi),TensorFlow 團(tuán)隊(duì)將專注提升開發(fā)者的使用體驗(yàn)。在此期間,我們會(huì)提供相關(guān)文檔和教程。我們期待您分享看法和反饋,并通過 GitHub Issue 和 PR 為項(xiàng)目作出貢獻(xiàn)。感謝大家!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5437

    瀏覽量

    120794
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    328

    瀏覽量

    60444
  • keras
    +關(guān)注

    關(guān)注

    2

    文章

    20

    瀏覽量

    6074

原文標(biāo)題:標(biāo)準(zhǔn)化 Keras:TensorFlow 2.0 高級(jí) API 指南

文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入了解示波器

    深入了解示波器
    發(fā)表于 11-14 22:32

    深入了解LabVIEW FPGA資料分享

    深入了解LabVIEW FPGA
    發(fā)表于 05-27 08:35

    示波器的深入了解

    示波器的深入了解 引言自然界運(yùn)行著各種形式的正弦波,比如海浪、地震、聲波、爆破、空氣中傳播的聲音,或者身體運(yùn)轉(zhuǎn)的自然節(jié)律。物理世界里,能
    發(fā)表于 11-04 11:53 ?52次下載
    示波器的<b class='flag-5'>深入了解</b>

    深入了解示波器入門手冊(cè)

    深入了解示波器入門手冊(cè)
    發(fā)表于 03-27 17:43 ?241次下載
    <b class='flag-5'>深入了解</b>示波器入門手冊(cè)

    深入了解電感與磁珠的異同

    模擬電子的相關(guān)知識(shí)學(xué)習(xí)教材資料——深入了解電感與磁珠的異同
    發(fā)表于 09-27 15:19 ?0次下載

    KerasTensorFlow究竟哪個(gè)會(huì)更好?

    Keras 依然作為一個(gè)庫,與 TensorFlow 分開,進(jìn)行獨(dú)立操作,所以仍存在未來兩者會(huì)分開的可能性;然而,我們知道 Google 官方同時(shí)支持 KerasTensorFlow
    的頭像 發(fā)表于 10-11 10:05 ?2.1w次閱讀

    TensorFlowKeras哪個(gè)更好用?

    作為一個(gè)庫,Keras 仍然可以單獨(dú)使用,因此未來兩者可能會(huì)分道揚(yáng)鑣。不過,因?yàn)楣雀韫俜街С?KerasTensorFlow,所以似乎不太可能出現(xiàn)這種情況。
    的頭像 發(fā)表于 10-31 09:40 ?1.1w次閱讀

    最新tf.keras指南,TensorFlow官方出品

    TensorFlow 1.x以靜態(tài)圖為主,網(wǎng)上主流的TF代碼編寫主要是面向過程的(函數(shù)為主),在引入tf.keras之后,TensorFlow官方就開始推薦tf.keras里各種面向?qū)?/div>
    的頭像 發(fā)表于 03-29 11:28 ?4138次閱讀

    深入了解Android Studio的最新功能

    的應(yīng)用。接下來,我們將會(huì)為詳細(xì)介紹此版本的代表功能與改進(jìn),并帶一窺我們?yōu)槲磥戆姹镜?Android Studio 所開發(fā)的最新功能。
    的頭像 發(fā)表于 01-25 11:27 ?2578次閱讀
    <b class='flag-5'>深入了解</b>Android Studio的最新<b class='flag-5'>功能</b>

    帶你深入了解示波器

    帶你深入了解示波器
    發(fā)表于 02-07 14:26 ?19次下載

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

    電動(dòng)牙刷作為一款便捷、時(shí)尚的消費(fèi)電子產(chǎn)品,深得很多用戶的喜愛。知道電動(dòng)牙刷是怎么工作的嗎?它里面有用到哪些分立器件產(chǎn)品?本文帶深入了解電動(dòng)牙刷的構(gòu)造及原理。
    發(fā)表于 06-05 11:51 ?2459次閱讀
    <b class='flag-5'>深入了解</b>電動(dòng)牙刷的構(gòu)造及原理

    深入了解安全光柵

    深入了解安全光柵
    的頭像 發(fā)表于 06-25 13:53 ?1102次閱讀
    <b class='flag-5'>深入了解</b>安全光柵

    深入了解 GaN 技術(shù)

    深入了解 GaN 技術(shù)
    的頭像 發(fā)表于 12-06 17:28 ?5977次閱讀
    <b class='flag-5'>深入了解</b> GaN 技術(shù)

    基于TensorFlowKeras的圖像識(shí)別

    TensorFlowKeras最常見的用途之一是圖像識(shí)別/分類。通過本文,您將了解如何使用Keras達(dá)到這一目的。定義如果您不了解圖像識(shí)別
    的頭像 發(fā)表于 01-13 08:27 ?732次閱讀
    基于<b class='flag-5'>TensorFlow</b>和<b class='flag-5'>Keras</b>的圖像識(shí)別

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 KerasTensorFlow簡(jiǎn)介 Keras
    的頭像 發(fā)表于 07-05 09:36 ?387次閱讀