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

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

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

TensorFlow 2.0最佳實(shí)踐及主要變化

電子工程師 ? 來(lái)源:lq ? 2019-02-18 09:34 ? 次閱讀

為提高 TensorFlow 的工作效率,TensorFlow 2.0 進(jìn)行了多項(xiàng)更改,包括刪除了多余的 API,使API 更加一致統(tǒng)一,例如統(tǒng)一的 RNNs (循環(huán)神經(jīng)網(wǎng)絡(luò)),統(tǒng)一的優(yōu)化器,并且Python 運(yùn)行時(shí)更好地集成了 Eager execution 。

許多 RFC 已經(jīng)對(duì) TensorFlow 2.0 的這些更改給出了解釋。本指南基于您對(duì) TensorFlow 1.x 有一定的了解的前提,為您介紹在 TensorFlow 2.0 中的開(kāi)發(fā)有什么不同。

API 整理

在 TensorFlow 2.0 中,有許多 1.X 的 API 被刪除或移動(dòng)了。也有部分 1.X 的 API 被 2.0 版本的等價(jià) API 所替代:tf.summary,tf.keras.metrics 和 tf.keras.optimizers。自動(dòng)應(yīng)用這些重命名,最簡(jiǎn)單的方法是使用 TensorFlow 2.0 升級(jí)腳本。

Eager execution

TensorFlow 1.X 要求用戶(hù)通過(guò)調(diào)用 tf.* API 手動(dòng)的將抽象語(yǔ)法樹(shù)(圖)拼接在一起。然后,它要求用戶(hù)將一組輸出張量和輸入張量傳遞給 session.run() 調(diào)用,來(lái)手動(dòng)編譯抽象語(yǔ)法樹(shù)。相比之下,TensorFlow 2.0 executes eagerly(如正常使用 Python 一樣)在 2.0 的版本中,其 graphs(抽象語(yǔ)法樹(shù))和 sessions 在實(shí)現(xiàn)的細(xì)節(jié)上應(yīng)該是一樣的。

不再有全局變量

TensorFlow 1.X 非常依賴(lài)于隱式全局命名空間。當(dāng)你調(diào)用 tf.Variable 時(shí),它會(huì)被放入默認(rèn)圖中,即使你忘記了指向它的 Python 變量它也會(huì)留在那里。這時(shí),您可以恢復(fù)該 tf.Variable(),但前提是您得知道它已創(chuàng)建的名稱(chēng)。如果您無(wú)法控制變量的創(chuàng)建,很難做到這一點(diǎn)。因此,各種機(jī)制以及尋找用戶(hù)創(chuàng)建變量的框架不斷涌現(xiàn),試圖幫助用戶(hù)再次找到他們的變量。

TensorFlow 2.0 取消了所有這些機(jī)制(Variables 2.0 RFC),支持默認(rèn)機(jī)制:跟蹤變量! 如果你不再用到某個(gè) tf.Variable,它就會(huì)被回收。

Functions, not sessions

session.run() 的調(diào)用幾乎類(lèi)似于函數(shù)調(diào)用:指定輸入和要調(diào)用的函數(shù),然后返回一組輸出。在 TensorFlow 2.0 中,您可以使用 tf.function() 來(lái)修飾 Python 函數(shù)以將其標(biāo)記為 JIT( Just-In-Time )編譯,以便 TensorFlow 將其作為單個(gè)圖運(yùn)行(Functions 2.0 RFC)。

這種機(jī)制使得 TensorFlow 2.0 擁有圖模式的許多優(yōu)點(diǎn):

性能:該函數(shù)可以被優(yōu)化,例如節(jié)點(diǎn)修剪,內(nèi)核融合等

可移植性:該函數(shù)可以導(dǎo)出 / 重新導(dǎo)入(SavedModel 2.0 RFC),允許用戶(hù)重用和將 TensorFlow 函數(shù)作為模塊共享

# TensorFlow 1.X

outputs = session.run(f(placeholder), feed_dict={placeholder: input})# TensorFlow 2.0

outputs = f(input)

由于能夠自由地穿插 Python 和 TensorFlow 代碼,您能夠充分利用 Python 的表現(xiàn)力。而且,可移植的 TensorFlow 在沒(méi)有 Python 解釋器的情況下也可執(zhí)行。比如:mobile,C ++ 和 JS。避免用戶(hù)在添加 @tf.function 時(shí)重寫(xiě)代碼,AutoGraph 會(huì)將 Python 構(gòu)造的一個(gè)子集轉(zhuǎn)換成 TensorFlow 等價(jià)物。

TensorFlow 2.0 常用的建議

將代碼重構(gòu)為更小的函數(shù)

TensorFlow 1.X 中的常見(jiàn)使用模式是 “kitchen sink” 策略,即預(yù)先列出所有可能計(jì)算的并集,然后通過(guò) session.run() 計(jì)算選定的張量。在 TensorFlow 2.0 中,用戶(hù)應(yīng)該根據(jù)需求將代碼重構(gòu)為更小的函數(shù)。通常情況下,沒(méi)有必要用 tf.function 來(lái)修飾這些較小的函數(shù);僅使用 tf.function 來(lái)修飾高級(jí)計(jì)算 — 例如,使用只有一個(gè)步驟的訓(xùn)練或使用模型的正向傳遞,將代碼重構(gòu)為更小的函數(shù)。

使用 Keras 層和模型來(lái)管理變量

Keras 模型和層提供了方便的變量和 trainable_variables 屬性,以遞歸方式收集所有因變量。這使得本地化管理變量非常方便。

Keras 層 / 模型繼承自 tf.train.Checkpointable 并與 @ tf.function 集成,這使得直接檢查點(diǎn)或從 Keras 對(duì)象導(dǎo)出 SavedModel 成為可能。您不一定要使用 Keras 的 fit() API 來(lái)集成。

結(jié)合 tf.data.Datasets 和 @tf.function

在迭代適合內(nèi)存的訓(xùn)練數(shù)據(jù)時(shí),可以使用常規(guī)的 Python 循環(huán)。除此之外,tf.data.Dataset 則是從磁盤(pán)傳輸訓(xùn)練數(shù)據(jù)的最好方法。數(shù)據(jù)集是可迭代的(不是迭代器),工作方式與其他 Python 循環(huán)類(lèi)似。如果您想使用 AutoGraph 的等效圖操作替換 Python 循環(huán),可以通過(guò)將代碼包裝在 tf.function() 中,充分利用數(shù)據(jù)集異步預(yù)取 / 流功能來(lái)實(shí)現(xiàn)。

@tf.function

def train(model, dataset, optimizer):

for x, y in dataset:

with tf.GradientTape() as tape:

prediction = model(x)

loss = loss_fn(prediction, y)

gradients = tape.gradients(loss, model.trainable_variables)

optimizer.apply_gradients(gradients, model.trainable_variables)

如果您使用 Keras.fit() API,則無(wú)需擔(dān)心數(shù)據(jù)集迭代。

model.compile(optimizer=optimizer, loss=loss_fn)

model.fit(dataset)

利用 AutoGraph 和 Python 控制流程

AutoGraph 提供了一種將依賴(lài)于數(shù)據(jù)的控制流轉(zhuǎn)換為圖模式等價(jià)的方法,如 tf.cond 和 tf.while_loop。

數(shù)據(jù)相關(guān)控制流常見(jiàn)出現(xiàn)于序列模型中。tf.keras.layers.RNN 包裝了 RNN 單元,允許您靜態(tài)或動(dòng)態(tài)地展開(kāi)循環(huán)神經(jīng)網(wǎng)絡(luò)。為了演示,您可以重新實(shí)現(xiàn)動(dòng)態(tài)展開(kāi),如下所示:

class DynamicRNN(tf.keras.Model):

def __init__(self, rnn_cell):

super(DynamicRNN, self).__init__(self)

self.cell = rnn_cell

def call(self, input_data):

# [batch, time, features] -> [time, batch, features]

input_data = tf.transpose(input_data, [1, 0, 2])

outputs = tf.TensorArray(tf.float32, input_data.shape[0])

state = self.cell.zero_state(input_data.shape[1], dtype=tf.float32)

for i in tf.range(input_data.shape[0]):

output, state = self.cell(input_data[i], state)

outputs = outputs.write(i, output)

return tf.transpose(outputs.stack(), [1, 0, 2]), state

使用 tf.metrics 聚合數(shù)據(jù),使用 tf.summary 記錄數(shù)據(jù)

一套完整的 tf.summary 接口即將發(fā)布。您可以使用以下命令訪問(wèn) tf.summary 的 2.0 版本:

fromtensorflow.python.ops importsummary_ops_v2

有關(guān)詳細(xì)信息,請(qǐng)參閱文末鏈接:

https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/effective_tf2.md

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

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61967
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84077
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    327

    瀏覽量

    60413

原文標(biāo)題:我們期待的TensorFlow 2.0還有哪些變化?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C編程最佳實(shí)踐.doc

    C編程最佳實(shí)踐.doc
    發(fā)表于 08-17 14:37

    TensorFlow 20的這些變化你知道嗎

    我們期待的TensorFlow 20還有哪些變化?
    發(fā)表于 04-08 14:31

    最佳天線實(shí)踐、布局指南以及天線調(diào)試程序

    有限的硬幣型電池)獲得的無(wú)線射程主要取決于天線的設(shè)計(jì)、塑料外殼以及良好的PCB布局。對(duì)于芯片和電源相同但布局和天線設(shè)計(jì)實(shí)踐不同的系統(tǒng),它們的RF(射頻)范圍變化超過(guò)50%也是正常的。本應(yīng)用筆記介紹了
    發(fā)表于 05-21 08:51

    Dockerfile的最佳實(shí)踐

    ”微服務(wù)一條龍“最佳指南-“最佳實(shí)踐”篇:Dockerfile
    發(fā)表于 07-11 16:22

    變量聲明最佳實(shí)踐

    所以我們開(kāi)始編寫(xiě)32位和16位代碼,并過(guò)渡到MPLAB X和XC編譯器。我想到的一個(gè)主題是聲明變量的最佳實(shí)踐。常規(guī)IpType。h或類(lèi)型。h pr STDIN。或It8或字節(jié)char等任何想法,走哪條路?
    發(fā)表于 09-30 12:01

    虛幻引擎的紋理最佳實(shí)踐

    紋理是游戲不可或缺的一部分。 這是一個(gè)藝術(shù)家可以直接控制的領(lǐng)域,以提高游戲的性能。 本最佳實(shí)踐指南介紹了幾種紋理優(yōu)化,這些優(yōu)化可以幫助您的游戲運(yùn)行得更流暢、看起來(lái)更好。 最佳實(shí)踐系列指
    發(fā)表于 08-28 06:39

    TensorFlow2.0 版本將來(lái)臨

    TensorFlow 2.0 的一部分,我們將停止分發(fā) tf.contrib。我們將在未來(lái)幾個(gè)月與 contrib 模塊的所有者合作制定詳細(xì)的遷移計(jì)劃,包括如何在我們的社區(qū)頁(yè)面和文檔中宣傳您的 TensorFlow 擴(kuò)展。
    的頭像 發(fā)表于 08-15 09:01 ?5423次閱讀

    TensorFlow安裝手冊(cè)之如何利用pip安裝 TensorFlow

    關(guān)于 TensorFlow 安裝,有很多方法可以實(shí)踐。本文將為大家詳細(xì)介紹如何利用 pip 安裝 TensorFlow
    的頭像 發(fā)表于 10-28 10:57 ?1.3w次閱讀

    機(jī)器學(xué)習(xí)框架Tensorflow 2.0的這些新設(shè)計(jì)你了解多少

    總是無(wú)法被撼動(dòng)。而就在即將到來(lái)的2019年,Tensorflow 2.0將正式入場(chǎng),給暗流涌動(dòng)的框架之爭(zhēng)再燃一把火。
    的頭像 發(fā)表于 11-17 11:33 ?3099次閱讀

    TensorFlow 2.0 將包含許多 API 變更

    此外,由于我們棄用了某些模塊(例如 tf.flags 和 tf.contrib),您將無(wú)法通過(guò)切換至 compat.v1 來(lái)實(shí)現(xiàn) TensorFlow 2.0 中的某些變更。升級(jí)使用這些模塊的代碼
    的頭像 發(fā)表于 03-01 09:36 ?5471次閱讀

    TensorFlow 2.0 alpha提供即將發(fā)生的變化的預(yù)覽

    要快速上手 TensorFlow 2.0 Alpha 版,最佳途徑是前往 TensorFlow 的新網(wǎng)站。您可以在 tensorflow.o
    的頭像 發(fā)表于 03-10 10:17 ?2855次閱讀

    圖像傳感器處理和最佳實(shí)踐

    圖像傳感器處理和最佳實(shí)踐
    發(fā)表于 11-15 20:30 ?0次下載
    圖像傳感器處理和<b class='flag-5'>最佳</b><b class='flag-5'>實(shí)踐</b>

    SAN管理最佳實(shí)踐指南

    電子發(fā)燒友網(wǎng)站提供《SAN管理最佳實(shí)踐指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 09:20 ?0次下載
    SAN管理<b class='flag-5'>最佳</b><b class='flag-5'>實(shí)踐</b>指南

    SAN設(shè)計(jì)和最佳實(shí)踐指南

    電子發(fā)燒友網(wǎng)站提供《SAN設(shè)計(jì)和最佳實(shí)踐指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-01 11:02 ?0次下載
    SAN設(shè)計(jì)和<b class='flag-5'>最佳</b><b class='flag-5'>實(shí)踐</b>指南

    Windows 10遷移的最佳實(shí)踐

    電子發(fā)燒友網(wǎng)站提供《Windows 10遷移的最佳實(shí)踐.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 15:37 ?0次下載
    Windows 10遷移的<b class='flag-5'>最佳</b><b class='flag-5'>實(shí)踐</b>