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

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

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

一項名為“AutoGraph”的TensorFlow新功能

Tensorflowers ? 來源:未知 ? 作者:李倩 ? 2018-08-15 11:07 ? 次閱讀

今天,我們將介紹一項名為 “AutoGraph” 的 TensorFlow 新功能。AutoGraph 可以將 Python 代碼(包括控制流、print() 和其他 Python 原生功能)轉(zhuǎn)換為純 TensorFlow 圖代碼。

要在不使用即時執(zhí)行的情況下編寫 TensorFlow 代碼,您需要進行一些元編程,即編寫一個用于創(chuàng)建圖的程序,然后再執(zhí)行該圖。這種方式可能會令人困惑,特別是對于新開發(fā)者而言。一些特別棘手的情況涉及更復(fù)雜的模型,例如使用 if 和 while 的模型,或者具有 print() 等副作用或接受結(jié)構(gòu)化輸入的模型。

那么,我們?yōu)槭裁葱枰獔D呢?圖允許各種優(yōu)化,如移除常見的子表達式和融合內(nèi)核。此外,由于圖形成了一種獨立于平臺的計算模型,可簡化分布式訓練和針對各種環(huán)境的部署。這對于多個 GPU 或 TPU 上的分布式訓練或者通過TensorFlow Lite在移動或物聯(lián)網(wǎng)等其他平臺上分發(fā)模型尤為重要。

下面這個簡單示例顯示了您可能要添加到圖的運算:

1def huber_loss(a):

2if tf.abs(a) <= delta: ? ?

3loss = a * a / 2

4else:

5loss = delta * (tf.abs(a) - delta / 2)

6return loss

如果使用即時執(zhí)行,也可以滿足要求,但是由于 Python 解釋器開銷或錯過程序優(yōu)化機會,這樣可能會很慢。

要準備好執(zhí)行圖,您需要進行重寫以使用類似 tf.cond() 的語句,但這可能比較繁瑣并且難以實現(xiàn)。AutoGraph 可以為您自動執(zhí)行此轉(zhuǎn)換,既保持了即時編程的簡易性,同時又獲得了圖執(zhí)行的性能優(yōu)勢。

在本例中,我們可以使用 autograph.convert() 裝飾函數(shù),AutoGraph 將自動生成可生成圖的代碼。

使用 AutoGraph 時,由于裝飾器的原因,以下代碼:

1@autograph.convert()

2def huber_loss(a):

3if tf.abs(a) <= delta: ? ?

4loss = a * a / 2

5else:

6loss = delta * (tf.abs(a) - delta / 2)

7return loss

在執(zhí)行時變?yōu)橐韵麓a。

1def tf__huber_loss(a):

2with tf.name_scope('huber_loss'):

3

4def if_true():

5with tf.name_scope('if_true'):

6loss = a * a / 2

7 return loss,

8

9def if_false():

10with tf.name_scope('if_false'):

11 loss = delta * (tf.abs(a) - delta / 2)

12 return loss,

13 loss = ag__.utils.run_cond(tf.less_equal(tf.abs(a), delta), if_true,

14if_false)

15 return loss

然后,您可以將這些代碼視為 TensorFlow 運算進行調(diào)用:

1with tf.Graph().as_default():

2x_tensor = tf.constant(9.0)

3

4# The converted function works like a regular op: tensors in, tensors out.

5huber_loss_tensor = huber_loss(x_tensor)

6

7with tf.Session() as sess:

8print('TensorFlow result: %2.2f\n' % sess.run(huber_loss_tensor))

如您所見,AutoGraph 填補了即時執(zhí)行與圖之間的差距。AutoGraph 接收即時風格的 Python 代碼并將其轉(zhuǎn)換為生成圖的代碼。

AutoGraph 不僅僅是一組有用的宏,它還使用源代碼轉(zhuǎn)換來允許替換 Python 語言的任意部分,包括控制流、函數(shù)應(yīng)用和賦值、生成模板代碼,以及重構(gòu)慣用 Python 以便輕松轉(zhuǎn)換成圖。

使用任何編譯器,都會對錯誤消息的可讀性產(chǎn)生擔憂;為此,AutoGraph 設(shè)置為創(chuàng)建錯誤消息和堆疊追蹤,以顯示原始源代碼中的錯誤源,而不是僅顯示對生成代碼的引用。

可運行示例

那么,AutoGraph 可以為我們做什么呢?以下是一些代碼示例,現(xiàn)在可以直接轉(zhuǎn)換為圖代碼而無需任何更改。如果您想實際運行所有這些操作,我們提供了一個筆記本,您可以在Colab中打開或在GitHub中查看。

注:GitHub 鏈接https://github.com/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb

接下來,我們使用循環(huán)和分支來檢查Collatz 猜想。請注意,出于多樣性考慮,我們將不使用裝飾器,而使用 AutoGraph 的 .to_graph() 函數(shù)將其轉(zhuǎn)換為圖。

1def collatz(a):

2counter = 0

3while a != 1:

4if a % 2 == 0:

5a = a // 2

6else:

7a = 3 * a + 1

8counter = counter + 1

9return counter

10

11graph_mode_collatz = autograph.to_graph(collatz)

12# The code is human-readable, too

13print(autograph.to_code(collatz))

14

15collatz_tensor = graph_mode_collatz(tf.constant(n))

AutoGraph 可以支持任意的嵌套控制流,例如:

1def f(n):

2if n >= 0:

3while n < 5: ? ?

4n += 1

5print(n)

6return n

AutoGraph 允許在循環(huán)內(nèi)向數(shù)組追加元素。為此,我們將使用一些 AutoGraph 輔助工具,set_element_type 和 stack。

1def f(n):

2z = []

3# We ask you to tell us the element dtype of the list

4autograph.set_element_type(z, tf.int32)

5for i in range(n):

6z.append(i)

7# when you're done with the list, stack it

8# (this is just like np.stack)

9return autograph.stack(z)

我們還支持 break、continue,甚至 print 和 assert 等語句。轉(zhuǎn)換后,此代碼段的 Python assert 轉(zhuǎn)換為使用適當?shù)?tf.Assert 的圖。

1def f(x):

2assert x != 0, 'Do not pass zero!'

3return x * x

能夠輕松向圖添加循環(huán)和控制流等,這意味著可以輕松將訓練循環(huán)轉(zhuǎn)移到圖中。您可以在此筆記本中找到相關(guān)示例,其中,我們接受一個 RNN 訓練循環(huán)并用一個 sess.run() 調(diào)用執(zhí)行。在需要將整個訓練循環(huán)傳遞給加速器而不是通過 CPU 控制器管理訓練的情況下,這樣做十分有用。

注:筆記本鏈接

https://colab.research.google.com/github/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb#scrollTo=4LfnJjm0Bm0B

AutoGraph 開啟了構(gòu)建和訓練模型的新思路。我們期待根據(jù)開發(fā)者社區(qū)的建議為 AutoGraph 添加更多功能,因此歡迎您提交問題并給出建議!

圖性能與即時執(zhí)行

即時執(zhí)行非常簡單易用,但圖的速度通常要更快。雖然二者的比較基準較為復(fù)雜(并且取決于應(yīng)用和硬件配置),但在這個簡單的示例中,我們可以看到,從即時切換到大量使用 if 和 while 的 AutoGraph 代碼時,速度有了顯著提升。

最終,AutoGraph 允許您在加速器硬件(如 GPU 和Cloud TPU)上使用動態(tài)和流控制較多的模型,這在基于大量數(shù)據(jù)訓練大型模型時十分必要。

我們剛剛開始著手分析性能。如果您發(fā)現(xiàn)某個圖語句的運行速度低于預(yù)期,請?zhí)峤粏栴}!

AutoGraph 和即時執(zhí)行

雖然使用即時執(zhí)行時,您仍然可以通過tf.contrib.eager.defun對部分代碼使用圖執(zhí)行,但這要求您使用 tf.cond() 等 TensorFlow 圖運算。將來,AutoGraph 將與 defun 無縫集成,允許用簡單的即時式 Python 語言編寫圖代碼。實現(xiàn)此功能后,您可以通過選擇性地將即時代碼轉(zhuǎn)換為圖片段來使用 AutoGraph 加速熱點。

結(jié)論

AutoGraph 是一款新工具,可幫您輕松構(gòu)建能夠在 TensorFlow 圖中輕松運行的直觀、復(fù)雜的模型。此工具目前為 contrib 中的實驗性工具,但我們希望盡快將它加入到核心 TensorFlow 中。

跟我們分享您的 AutoGraph 使用體驗!如果您有任何反饋、建議或想法,請?zhí)峤粏栴}并向TensorFlow 開發(fā)者群組發(fā)送消息。

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

    關(guān)注

    2911

    文章

    44810

    瀏覽量

    375052
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60559

原文標題:AutoGraph 將 Python 轉(zhuǎn)換為 TensorFlow 圖

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

收藏 人收藏

    評論

    相關(guān)推薦

    下圖中的與打開文件相連的枚舉常量是自己一項一項編輯...

    下圖中的與打開文件相連的枚舉常量是自己一項一項編輯的還是自動就有的?
    發(fā)表于 03-17 21:39

    51單片機的個引腳是否只能執(zhí)行一項功能?

    51單片機的個引腳是否只能執(zhí)行一項功能?比如說,控制蜂鳴器的引腳如果用來控制蜂鳴器的話,還可以用作其他的功能來控制其他元件嗎?單片機控制步進電機時,可以另外用電源給步進電機供電嗎?還
    發(fā)表于 06-22 18:03

    AppleWatchSeries4兩新功能獲FDA的許可

    據(jù)外媒報道,當?shù)貢r間9月12日,蘋果公司宣布,Apple Watch Series 4的兩新功能獲得了美國食品與藥品管理局(FDA)的許可。其中一項被稱為心電圖(EKG)的心臟監(jiān)測功能
    發(fā)表于 09-17 14:32 ?1443次閱讀

    捷豹F-Pace展開一項名為GLOSA的V2X功能測試

    捷豹路虎集團近日宣布,已在其旗下的捷豹F-Pace車型展開一項名為GLOSA的V2X功能測試,GLOSA全稱為Green Light Optimal Speed Advisory,從其命名可得知,該系統(tǒng)并不會介入車輛的控制,僅提
    的頭像 發(fā)表于 11-22 10:17 ?5471次閱讀

    科技巨頭公司結(jié)盟,,共同建立一項名為“計算快速鏈接”的新行業(yè)標準

    據(jù)報道,英特爾與微軟、阿里巴巴、思科、戴爾EMC、Facebook、谷歌、惠普和華為宣布成立聯(lián)盟,共同建立一項名為“計算快速鏈接”(Compute Express Link,以下簡稱CXL)的新行業(yè)標準,以便為數(shù)據(jù)中心中央處理單元(CPU)和加速芯片之間提供超快速互連。
    的頭像 發(fā)表于 03-28 10:01 ?3123次閱讀

    特斯拉打盹模式新功能,可設(shè)置鬧鐘和空調(diào)系統(tǒng)

    據(jù)外媒報道,特斯拉車主很快就能享受到一項名為“打盹模式”(Nap Mode)的新功能,這項新功能近期將通過車機軟件OTA更新推送給車主。
    的頭像 發(fā)表于 01-02 17:07 ?6947次閱讀

    Facebook正在測試一項名為“校園”的新功能

    據(jù)報道,F(xiàn)acebook正在測試一項名為“校園”的新功能,大學生可以使用其大學ID登錄并與大學中的其他人建立聯(lián)系。學生可以寫下他們的預(yù)期畢業(yè)年份,專業(yè)和輔修學位,甚至還可以輸入宿舍編號以與他人聯(lián)系。
    的頭像 發(fā)表于 04-22 14:26 ?1751次閱讀

    Netflix向電話應(yīng)用程序添加了一項新功能

    最近,Netflix向電話應(yīng)用程序添加了一項新功能,可讓您鎖定屏幕。這些新的屏幕鎖定控件有助于防止您不小心跳到節(jié)目或電影的上個或下個部分。
    的頭像 發(fā)表于 04-23 14:39 ?1873次閱讀

    Facebook直在努力為WhatApp引入系列新功能

    多設(shè)備支持并不是一項新功能。去年我們第次聽說了它。從那時起,跟蹤WhatsApp開發(fā)的博客WABetaInfo多次報告了該公司在開發(fā)一項功能
    的頭像 發(fā)表于 07-29 17:00 ?1802次閱讀

    cnvrg.io是第個集成MIG的ML平臺,這是一項突破性的新功能

    cnvrg.io用于機器學習的AI OS宣布將NVIDIA多實例GPU(MIG)技術(shù)與其數(shù)據(jù)科學平臺進行了原生集成。cnvrg.io是第個集成MIG的ML平臺,這是一項突破性的新功能
    的頭像 發(fā)表于 09-16 16:53 ?2564次閱讀

    WhatsApp正在開發(fā)一項新功能,它將引入自動刪除對話中發(fā)送的圖像

    正如WABeta Info的專家告訴我們的那樣,WhatsApp正在開發(fā)一項新功能,它將引入自動刪除對話中發(fā)送的圖像,視頻和GIF的功能。在測試版WhatsApp Beta Android
    的頭像 發(fā)表于 09-23 16:01 ?1747次閱讀

    WhatsApp正在開發(fā)一項新功能

    WhatsApp正在開發(fā)一項新功能,該功能將使用戶能夠共享消失得無影無蹤的媒體文件。本周,我們將了解有關(guān)此功能的更多詳細信息。對于初學者來說,即將到期的媒體
    的頭像 發(fā)表于 09-30 10:22 ?1797次閱讀

    Google帶來一項新功能,用戶可以將照片內(nèi)容通知互聯(lián)網(wǎng)巨頭

    Google Photos Android應(yīng)用程序的最新更新帶來了一項新功能。借助此功能,用戶可以將其照片內(nèi)容通知互聯(lián)網(wǎng)巨頭。
    的頭像 發(fā)表于 11-13 14:12 ?1521次閱讀

    Zoom推出一項軟件新功能

    據(jù)外媒報道,視頻會議軟件廠商Zoom推出了一項新的功能——“At-Risk?Meeting?Notifier”:當在線視頻遇到Zoombombing攻擊產(chǎn)生風險時,新增的功能就會像會議發(fā)起人發(fā)出提醒。?
    的頭像 發(fā)表于 12-06 09:03 ?2012次閱讀

    華為公布一項名為“鈉電池復(fù)合正極材料及其應(yīng)用”的發(fā)明專利

    近日,華為于4月2日公布一項名為“鈉電池復(fù)合正極材料及其應(yīng)用”的發(fā)明專利,該專利技術(shù)可實現(xiàn)復(fù)合正極材料包括內(nèi)核和包覆內(nèi)核的包覆層,內(nèi)核包括層狀鈉正極活性材料,包覆層材料的脫鈉電勢高于內(nèi)核。
    的頭像 發(fā)表于 04-07 10:54 ?1156次閱讀