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

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

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

TF動(dòng)態(tài)圖處理速度大幅提升!

DPVg_AI_era ? 來(lái)源:未知 ? 作者:李倩 ? 2018-07-20 10:07 ? 次閱讀

TensorFlow發(fā)布重大功能改進(jìn)AutoGraph,能自動(dòng)將Python代碼轉(zhuǎn)換為TensorFlow Graph,TF動(dòng)態(tài)圖處理速度大幅提升!

今天,TensorFlow團(tuán)隊(duì)發(fā)布新功能“AutoGraph”,能自動(dòng)將Python代碼(包括控制流,print () 和其他Python原生特征)轉(zhuǎn)換為純TensorFlow圖代碼(pure TensorFlow graph code)。

不使用Eager Execution編寫TensorFlow代碼需要進(jìn)行一些元編程(metaprogramming) ——先編寫一個(gè)創(chuàng)建圖(Graph)的程序,稍后再執(zhí)行這個(gè)Graph。這可能令人困惑,尤其是對(duì)開發(fā)者新手來(lái)說(shuō)。一些特別棘手的情況涉及更復(fù)雜的模型,比如要使用 if 和 while 的模型,或者有 print () 等副作用或接受結(jié)構(gòu)化輸入的模型。

為什么我們需要Graph呢?Graph允許各種優(yōu)化,例如刪除常見的子表達(dá)式和融合內(nèi)核(fusing kernel)。再者,Graph簡(jiǎn)化了分布式訓(xùn)練和部署到各種環(huán)境的過(guò)程,因?yàn)樗鼈冃纬闪霜?dú)立于平臺(tái)的模型計(jì)算過(guò)程。這對(duì)于模型在多個(gè)GPU或TPU上的分布式訓(xùn)練尤為重要,如果你通過(guò)TensorFlow Lite、移動(dòng)端、物聯(lián)網(wǎng)等其他平臺(tái)分發(fā)模型,Graph也很重要。

下面是一個(gè)很簡(jiǎn)單的、你可能希望添加到Graph里的操作:

defhuber_loss(a):iftf.abs(a)<=?delta:????loss?=?a?*?a?/?2??else:????loss?=?delta?*?(tf.abs(a)?-?delta?/?2)??return?loss

通過(guò)Eager Execution,只是能做到這一點(diǎn),但是由于Python解釋器開銷(interpreter overheads)或錯(cuò)過(guò)的程序優(yōu)化機(jī)會(huì),此類操作可能會(huì)很慢。

為了準(zhǔn)備執(zhí)行Graph,你需要重寫這個(gè)以使用像 tf.cond () 這樣的結(jié)構(gòu),但那樣實(shí)現(xiàn)起來(lái)可能會(huì)耗時(shí)耗力而且很困難。AutoGraph可以為自動(dòng)執(zhí)行此類轉(zhuǎn)換,將動(dòng)態(tài)圖編程的簡(jiǎn)易性保持很低的同時(shí),獲得基于Graph執(zhí)行的性能優(yōu)勢(shì)。

在示例中,我們可以使用 autograph.convert () 來(lái)修飾函數(shù),AutoGraph將自動(dòng)生成 graph-ready 的代碼。

使用AutoGraph,這段代碼:

@autograph.convert()defhuber_loss(a):iftf.abs(a)<=?delta:????loss?=?a?*?a?/?2??else:????loss?=?delta?*?(tf.abs(a)?-?delta?/?2)??return?loss

在執(zhí)行時(shí)將變成這種樣子:

deftf__huber_loss(a):withtf.name_scope('huber_loss'):defif_true():withtf.name_scope('if_true'):loss=a*a/2returnloss,defif_false():withtf.name_scope('if_false'):loss=delta*(tf.abs(a)-delta/2)returnloss,loss=ag__.utils.run_cond(tf.less_equal(tf.abs(a),delta),if_true,if_false)returnloss

你可以直接調(diào)用代碼,就像TensorFlow op一樣:

withtf.Graph().as_default():x_tensor=tf.constant(9.0)#Theconvertedfunctionworkslikearegularop:tensorsin,tensorsout.huber_loss_tensor=huber_loss(x_tensor)withtf.Session()assess:print('TensorFlowresult:%2.2f '%sess.run(huber_loss_tensor))

綜上,AutoGraph填補(bǔ)了Eager Execution和Graph之間的空白。AutoGraph 將你的 eager-style Python 代碼自動(dòng)轉(zhuǎn)換為動(dòng)態(tài)圖生成(graph-generating)代碼。

AutoGraph不僅僅是一組有用的宏指令(macro); 它涵蓋Python語(yǔ)言的任何部分(利用源代碼轉(zhuǎn)換),包括控制流、函數(shù)應(yīng)用程序和賦值、生成模板代碼以及重構(gòu)常用的Python讓它易于轉(zhuǎn)換為圖形。

對(duì)于任何編譯器,都會(huì)擔(dān)心報(bào)錯(cuò)信息的可讀性; 為此,AutoGraph創(chuàng)建了報(bào)錯(cuò)消息和堆棧跟蹤,用來(lái)顯示原始源代碼中的錯(cuò)誤源,而不僅僅是顯示對(duì)生成的代碼的參考。

可運(yùn)行的例子

那么,AutoGraph可以為你做什么呢? 以下是一些代碼示例,它可以直接轉(zhuǎn)換為圖形代碼而無(wú)需任何更改。 如果你想查看完整的代碼,我們有一個(gè)notebook,你可以在Colab或GitHub上查看。

在這里,我們使用循環(huán)和分支檢測(cè)Collatz猜想。 注意,我們使用AutoGraph的.to_graph()函數(shù)將其轉(zhuǎn)換為圖形的原因,是為了多樣性而不是為了裝飾。

defcollatz(a):counter=0whilea!=1:ifa%2==0:a=a//2else:a=3*a+1counter=counter+1returncountergraph_mode_collatz=autograph.to_graph(collatz)#Thecodeishuman-readable,tooprint(autograph.to_code(collatz))collatz_tensor=graph_mode_collatz(tf.constant(n))

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

deff(n):ifn>=0:whilen

AutoGraph允許你將元素追加到循環(huán)內(nèi)的數(shù)組中。 為了達(dá)到這個(gè)要求,我們使用一些AutoGraph助手,例如set_element_type和stack。

deff(n):z=[]#Weaskyoutotellustheelementdtypeofthelistautograph.set_element_type(z,tf.int32)foriinrange(n):z.append(i)#whenyou'redonewiththelist,stackit#(thisisjustlikenp.stack)returnautograph.stack(z)

我們還支持像break,continue,甚至print和assert這樣的結(jié)構(gòu)。 轉(zhuǎn)換后,該片段的Python將轉(zhuǎn)換為圖形(使用恰當(dāng)?shù)膖f.Assert)。

deff(x):assertx!=0,'Donotpasszero!'returnx*x

能夠輕松地添加循環(huán),控制流程以及更多圖表意味著可以輕松地將訓(xùn)練循環(huán)移動(dòng)到圖形中。 這個(gè)例子可以在這個(gè)notebook中找到,我們采用RNN訓(xùn)練循環(huán)并用一個(gè)sess.run()調(diào)用執(zhí)行它。 在需要將整個(gè)訓(xùn)練循環(huán)傳遞給加速器而不是通過(guò)CPU控制器管理訓(xùn)練的情況下,這可能是很有用的。

AutoGraph開辟了構(gòu)建和訓(xùn)練模型的新思路。我們期待根據(jù)開發(fā)者社區(qū)的建議為AutoGraph添加更多功能,所以請(qǐng)?zhí)岢瞿愕慕ㄗh和問(wèn)題吧!

AutoGraph和Eager Execution

在使用eager execution時(shí),你仍然可以通過(guò)tf.contrib.eager.defun對(duì)代碼的某些部分使用圖執(zhí)行。這要求你使用TensorFlow圖形操作,如tf.cond()。 將來(lái),AutoGraph將與defun無(wú)縫集成,以允許在簡(jiǎn)單的eager 風(fēng)格的Python中創(chuàng)作圖形代碼。 當(dāng)該實(shí)現(xiàn)可用時(shí),你可以通過(guò)選擇性地將eager代碼轉(zhuǎn)換為graph fragments來(lái)使用AutoGraph加速熱點(diǎn)。

結(jié)論

AutoGraph是一款工具,可讓你輕松構(gòu)建直觀,復(fù)雜的模型,在TensorFlow圖中輕松運(yùn)行。 這是一個(gè)現(xiàn)在在contrib中的實(shí)驗(yàn)工具,但我們希望盡快將其轉(zhuǎn)移到核心TensorFlow中。

告訴我們您使用AutoGraph的經(jīng)歷! 如果你有反饋,建議或想法,請(qǐng)?zhí)峤粏?wèn)題并向TensorFlow開發(fā)人員小組發(fā)送消息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
  • Graph
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    9021
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84079

原文標(biāo)題:【TensorFlow重大升級(jí)】自動(dòng)將Python代碼轉(zhuǎn)為TF Graph,大幅簡(jiǎn)化動(dòng)態(tài)圖處理!

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    在網(wǎng)上看到泰克,rigol,安泰信測(cè)試1M的信號(hào)的動(dòng)態(tài)圖,大....

    我在網(wǎng)上看到了一張動(dòng)態(tài)圖,里邊有泰克,rigol,安泰信的測(cè)試動(dòng)態(tài)圖。然后我就測(cè)試了一下我手頭上的青島漢泰的臺(tái)式示波器DSO5202B,不會(huì)制作動(dòng)態(tài)圖,只能是截圖讓大家看看了,求告訴測(cè)試方法是否正確??稍后上圖
    發(fā)表于 01-15 11:00

    lab如何加入動(dòng)態(tài)圖,。。。。。。。

    lab如何加入動(dòng)態(tài)圖,。。。。。。。lab如何加入動(dòng)態(tài)圖,。。。。。。。lab如何加入動(dòng)態(tài)圖,。。。。。。。
    發(fā)表于 10-30 10:33

    matlab用plot畫動(dòng)態(tài)圖

    matlab用plot畫動(dòng)態(tài)圖時(shí),總是一閃一閃的,圖形還不連續(xù),大家有什么辦法讓它連續(xù)畫出動(dòng)態(tài)圖
    發(fā)表于 08-23 11:26

    用LEON3開源軟核處理器怎么才可以設(shè)計(jì)一個(gè)動(dòng)態(tài)圖像邊緣檢測(cè)

      本文介紹了基于LEON3開源軟核處理器的動(dòng)態(tài)圖像邊緣檢測(cè)SoC設(shè)計(jì)?! ?shí)驗(yàn)結(jié)果表明該SoC系統(tǒng)工作正常,可以實(shí)現(xiàn)每秒22~25幀,最佳分辨率為400×240和640×480的動(dòng)態(tài)圖像邊緣檢測(cè)
    發(fā)表于 02-22 07:50

    請(qǐng)問(wèn)為什么動(dòng)態(tài)圖對(duì)滑動(dòng)手勢(shì)沒有反應(yīng)?

    因此,假設(shè)我們?cè)O(shè)置了一個(gè)包含以下內(nèi)容的滑動(dòng)容器:普通容器包含例如一個(gè)盒子動(dòng)態(tài)圖當(dāng)我們運(yùn)行時(shí),首先會(huì)顯示普通容器。輕掃后,它將轉(zhuǎn)到動(dòng)態(tài)圖。但是當(dāng)我們滑動(dòng)動(dòng)態(tài)圖的時(shí)候,它不會(huì)去到正常的容器。為什么這樣?如果我將
    發(fā)表于 12-30 07:30

    使用動(dòng)態(tài)圖時(shí)X軸的值增加了怎么解決?

    嗨,我的問(wèn)題是,當(dāng)我使用動(dòng)態(tài)圖時(shí),當(dāng)它在X軸上結(jié)束時(shí),不幸的是X值增加了如何解決這個(gè)問(wèn)題并從頭開始重新啟動(dòng)X軸?
    發(fā)表于 01-05 06:13

    使用STM32F469I-Disco板動(dòng)態(tài)圖顯示數(shù)據(jù)沒有響應(yīng)怎么辦?

    我使用 STM32F469I-Disco 和 TouchGFX 對(duì)我的項(xiàng)目進(jìn)行了很好的設(shè)置。一切都運(yùn)作良好。但是,我想使用動(dòng)態(tài)圖顯示數(shù)據(jù)。如果我選擇不同于滾動(dòng)模式的模式,一切都會(huì)更新得很好。但是當(dāng)
    發(fā)表于 01-05 06:40

    基于門限方案的動(dòng)態(tài)圖軟件水印算法

    針對(duì)動(dòng)態(tài)圖水印魯棒性和恢復(fù)率較低的問(wèn)題,提出基于門限方案的動(dòng)態(tài)圖水印算法——AB算法。在軟件水印中引入密鑰共享思想,實(shí)驗(yàn)結(jié)果證明,該算法能有效彌補(bǔ)CT算法的缺陷,阻
    發(fā)表于 04-03 08:36 ?15次下載

    機(jī)械原理動(dòng)態(tài)圖大全介紹

    本文檔內(nèi)容介紹了基于機(jī)械原理動(dòng)態(tài)圖大全介紹。
    發(fā)表于 09-19 15:27 ?92次下載

    動(dòng)態(tài)圖和線程關(guān)系的混合軟件水印算法分析

    針對(duì)單一動(dòng)態(tài)圖水印算法以及線程水印存在的不足,為了提高軟件水印的安全性,提出一種基于動(dòng)態(tài)圖和線程關(guān)系的混合軟件水印算法。首先采用動(dòng)態(tài)圖水印算法將子生成代碼嵌入到程序中,然后充分利用線
    發(fā)表于 11-03 10:09 ?0次下載
    <b class='flag-5'>動(dòng)態(tài)圖</b>和線程關(guān)系的混合軟件水印算法分析

    基于快照的大規(guī)模動(dòng)態(tài)圖相似節(jié)點(diǎn)查詢算法

    的大規(guī)模動(dòng)態(tài)圖泛相似節(jié)點(diǎn)查詢處理算法。具體包括:動(dòng)態(tài)演進(jìn)過(guò)程的快照集表示,即演進(jìn)動(dòng)態(tài)圖;
    發(fā)表于 12-23 10:11 ?0次下載
    基于快照的大規(guī)模<b class='flag-5'>動(dòng)態(tài)圖</b>相似節(jié)點(diǎn)查詢算法

    你在電廠工作那么多年,但電廠各類設(shè)備原理動(dòng)態(tài)圖你了解過(guò)嗎?

    了解電廠各類設(shè)備原理動(dòng)態(tài)圖你準(zhǔn)備好了嗎?
    的頭像 發(fā)表于 07-05 09:25 ?2.3w次閱讀
    你在電廠工作那么多年,但電廠各類設(shè)備原理<b class='flag-5'>動(dòng)態(tài)圖</b>你了解過(guò)嗎?

    只有工程師能看懂的動(dòng)態(tài)圖你能看懂幾個(gè)?

    本文檔的主要內(nèi)容詳細(xì)介紹的是只有工程師能看懂的動(dòng)態(tài)圖你能看懂幾個(gè)?
    的頭像 發(fā)表于 05-18 09:55 ?5850次閱讀
    只有工程師能看懂的<b class='flag-5'>動(dòng)態(tài)圖</b>你能看懂幾個(gè)?

    最完整的汽車零部件和結(jié)構(gòu)的工作原理動(dòng)態(tài)圖合集

    本文檔的主要內(nèi)容詳細(xì)介紹的是最完整的汽車零部件和結(jié)構(gòu)的工作原理動(dòng)態(tài)圖合集。
    的頭像 發(fā)表于 09-14 17:58 ?1.3w次閱讀

    18張電氣自動(dòng)化控制實(shí)操原理動(dòng)態(tài)圖

    今天給大家分享電氣控制原理動(dòng)態(tài)圖,動(dòng)態(tài)圖能很好地表現(xiàn)電氣設(shè)備運(yùn)作的瞬時(shí)動(dòng)態(tài),比文字生動(dòng)一些,但又比視頻簡(jiǎn)單明了,能讓各位一眼就看出其操作原理,今天的動(dòng)包含了PLC、按鈕開關(guān)、繼電器、
    的頭像 發(fā)表于 01-16 17:59 ?1.1w次閱讀
    18張電氣自動(dòng)化控制實(shí)操原理<b class='flag-5'>動(dòng)態(tài)圖</b>