曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

關(guān)于TensorFlow的探討

大?。?/span>1.76 MB 人氣: 2017-10-10 需要積分:1
自從TensorFlow半年前發(fā)布以來,我們一直使用它來進(jìn)行日常研究和工程。在此過程中我們也學(xué)習(xí)到了很多知識。是時候?qū)懸恍┬麦w會了!
  因為TensorFlow上沒有很多主觀的文章和有用的文檔,我必須盡可能地使用我能找到的樣例、教程、文檔和代碼片段。
  善
  社區(qū)參與是最重要的。
  當(dāng)涉及到機(jī)器學(xué)習(xí)時,很容易把注意力集中于技術(shù)上(特征、功能、基準(zhǔn)等)。但是優(yōu)秀的程序員都知道,編寫人們愿意使用的代碼要比機(jī)器可以編譯執(zhí)行的代碼要難上許多。所以,對于TensorFlow我最欣賞的一點就是,機(jī)器學(xué)習(xí)社區(qū)的所有人都能意識到這點,他們愿意去嘗試它,而且之中有許多人使用它來編寫有用的東西。解決問題有更多的思路,更多的經(jīng)驗可供借鑒!
  現(xiàn)在大量的開發(fā)者和學(xué)生都對深度學(xué)習(xí)感興趣,因為它們聽說了TensorFlow。谷歌Deepmind最近宣布,他們將會把Torch遷移到TensorFlow上,所以我們可能會在不久的將來看到TensorFlow中引入了強(qiáng)化學(xué)習(xí)模型。當(dāng)社區(qū)擁抱開放,透明API,有用模塊,以及為互聯(lián)網(wǎng)做貢獻(xiàn),前途會一片光明。
  技術(shù)封鎖因素已基本消除。
  當(dāng)我們?nèi)ツ?1月份寫的第一篇評估TensorFlow的文章時,它還存在一些實際和潛在的封鎖因素。我很高興的告訴你們,大多數(shù)這些封鎖因素現(xiàn)在都已經(jīng)消除了。
  支持多GPU。它能正常工作;文檔很簡潔。不過你仍然需要弄清楚如何分解并解決問題,這也很有趣,不是嗎?
  分布式資源訓(xùn)練(比如云)。在v0.8版本中,已經(jīng)支持了分布式訓(xùn)練。
  支持隊列,在運算圖上進(jìn)行數(shù)據(jù)加載和預(yù)處理等操作。
  使用TensorBoard可視化運算圖。在構(gòu)建、調(diào)試新模型時,很容易迷失方向。對我來說,針對我構(gòu)建用于解決困難問題的新框架和模型,要保持心理語境已經(jīng)是相當(dāng)繁重的任務(wù)了,因此對模型有一個完全不同的表示非常有用;TensorBoard的圖形可視化工具在這里非常有用。
  TensorBoard交互式記錄事件日志。在UNIX/Linux下,我喜歡使用命令tail -f 來監(jiān)測命令行任務(wù)的輸出,做快速明智的檢查。TensorFlow的事件日志記錄可以達(dá)到同樣的效果,從圖表中得出時間和匯總,然后TensorBoard隨著時間推移來監(jiān)控輸出(比如學(xué)習(xí)率,損失值,訓(xùn)練/測試精度)。
  模型檢查點。訓(xùn)練模型一段時間。然后停止并進(jìn)行評估。重新載入檢查點繼續(xù)訓(xùn)練。
  性能和GPU內(nèi)存使用量與Theano和其他使用CUDNN的庫相似。早期版本的性能不足似乎是因為使用了CUDNNv2,那么在TensorFlow v0.8(使用CUDNNv4)中有了極大改善。
  一些高品質(zhì)的元框架
  Keras包裝了TensorFlow和Theano的后端。如果你不想深入TensorFlow(或是Theano)的細(xì)節(jié),Keras會是個不錯的參考。
  TensorFlow Slim是構(gòu)建圖像模型不錯的選擇。即使你更喜歡自己寫底層的TensorFlow代碼,對TensorFlow API使用和模型設(shè)計等,Slim是不錯的參考。
  Skflow將TensorFlow方法包裝成了scikit-learn風(fēng)格的API。在我看來,與導(dǎo)入、內(nèi)嵌各種scikit-learn指標(biāo)的Python代碼相比,這么做有點奇怪。
  PrettyTensor提供了具有類似張量行為的東西,有一種可鏈接的語法,你可以快速構(gòu)建特定類型的模型。
  發(fā)布時間表
  維護(hù)一個流行的開源項目是一大挑戰(zhàn),特別是像TensorFlow這樣具有技術(shù)復(fù)雜性的項目。感謝維護(hù)者!我們首先感謝他們整合新特性和測試的策略,以便早期采用者可以在它們形成文檔之前嘗嘗鮮。如果你對發(fā)布細(xì)節(jié)感興趣,看看版本記錄:https://www.tensorflow.org/versions/r0.8/resources/versions.html
  測試相當(dāng)棒!
  測試對驗證功能和臨時觀測運行情況非常有用。當(dāng)你在TensorFlow中發(fā)現(xiàn)一些與你預(yù)期不符的東西,或者你在學(xué)習(xí)某個方法或某些參數(shù)的怪癖行為時,在Github上搜索測試,看看測試是如何做的!
  惡
  與Theano相比仍缺少RNN。
  Theano團(tuán)隊花了多年時間投入了大量精力去優(yōu)化遞歸神經(jīng)網(wǎng)絡(luò)實現(xiàn)。令人高興的是,這個差距正在迅速縮小,在幾個月后,TensorFlow可能是RNN的首選平臺。特別是:
  我們還沒找到優(yōu)雅地處理可變長度序列輸入的方式。用額外的復(fù)雜度來處理,大多數(shù)模型不需要這么做。填補(bǔ)所有序列至一個固定長度在許多情況下效果不錯(特別是使用批處理和GPU),但有些人可能認(rèn)為這不是令人滿意的做法。動態(tài)展開RNN可能是個解決方案,但是tensorflow.python.ops.rnn模塊中的dynamic_rnn實現(xiàn)是新功能,還沒有形成文檔。我們還在進(jìn)行實驗。
  性能和內(nèi)存使用量。雖然很難做出確切的同類比較,但是在在兩個框架中實現(xiàn)許多同樣的模型給我們的印象是,對于RNN,在給定的GPU上,Theano可能要快一些而且使用更少的內(nèi)存,也許是因為有逐點操作。TensorFlow在多GPU上和“編譯”時間上更勝一籌。
  缺少數(shù)據(jù)攝取權(quán)威樣例。
  TensorFlow文檔和樣例集中于使用一些著名的學(xué)術(shù)數(shù)據(jù)集來演示各種特性和功能。這完全有道理,按事情輕重緩急來處理是一件好事。但現(xiàn)實世界的問題很少能夠替代這些數(shù)據(jù)集。在學(xué)習(xí)一個新的深度學(xué)習(xí)框架時,處理張量輸入和形狀會是一大絆腳石,所以給出一些處理凌亂輸入數(shù)據(jù)(怪異的形狀,填充,分布,標(biāo)記化等)的樣例可以為將來開發(fā)者/工程師解決許多問題。
  文檔可能會不一致
  TensorFlow有許多不錯的教程,而且代碼有很好的注釋(感謝作者)。但是機(jī)器學(xué)習(xí)/深度學(xué)習(xí)是很深而且很廣的領(lǐng)域,而且在新功能和文檔/教程之間會有滯后。一些我們喜歡的教程有:
  Nathan Github上的簡單教程??梢钥焖俨榭礄C(jī)器學(xué)習(xí)的工作原理。如果你熟悉numpy或Theano,你可以從這里開始。
  谷歌Vincent Vanhoucke的Udacity課程。如果你是深度學(xué)習(xí)初學(xué)者,那么從這里開始。
  MNIST官方教程。如果你是深度學(xué)習(xí)初學(xué)者,在學(xué)習(xí)完Udacity課程后,可以看看這里的教程。MNIST是“機(jī)器學(xué)習(xí)果蠅”,有良好的基準(zhǔn)和完整性檢查。
  TensorFlow API文檔。TensorFlow的首選參考。Control-F來搜索!
  不幸的是,尤其對于RNN,在文檔和教程之間還是有概念差距,比如簡單樣例和全面頂尖樣例之間的差距。這對那些同時學(xué)習(xí)概念和框架的開發(fā)者來說的確是一大障礙。例如,Udacity教程和RNN教程使用賓州樹庫數(shù)據(jù)(Penn TreeBank data)來建立語言模型具有很好的說明性,因為它們簡單。它們對于學(xué)習(xí)一個概念是不錯的教程,但是對于現(xiàn)實世界的建模任務(wù)來說又太基礎(chǔ)了。我們意識到TensorFlow RNN教程唯一權(quán)威之處就是就是全面序列-序列模型,它使用多單元RNN(GRU或LSTM),采用了attention,bucketing,和采樣softmax。哇!這就像你學(xué)習(xí)滑雪,不需要從在山坡上訓(xùn)練開始,然后就直接在布滿樹木的山頂上使用雪上特技(危險,可怕對么???)…你可能不應(yīng)該在實現(xiàn)簡單功能后,就實現(xiàn)最復(fù)雜的功能。根據(jù)你正在解決的問題,逐步增加復(fù)雜度。
  
  高品質(zhì)的教程會逐漸提高復(fù)雜度,從簡單的RNN語言模型到能夠?qū)W習(xí)反轉(zhuǎn)詞語的普通序列-序列RNN編碼器-解碼器架構(gòu),到具有attention的神經(jīng)翻譯序列-序列LSTM,然后到具有多單元RNN,bucketing以及所有對初期TensorFlow用戶社區(qū)有極大幫助的技巧。我猜測由于缺乏這種循序漸進(jìn)的樣例可能可以解釋為什么社區(qū)已經(jīng)產(chǎn)生了許多流行的TensorFlow模型,但我們還沒看到許多創(chuàng)新架構(gòu)和聰明的混用。
  如果缺乏文檔,那么就去看測試!通常情況下測試比文檔更具說明性。由于谷歌將此項目開源,你可以在Github上搜索相關(guān)的測試看看作者是如何使用的。
  我們完全能夠理解TensorFlow團(tuán)隊首要專注于功能和特性,其次是文檔…我們可能也會這么做!良好的文檔是一種投資,我見到過最好的文檔是出自非作者之手,因為那至少能夠保證沒接觸過的人能夠理解。如果TensorFlow社區(qū)編寫文檔與開發(fā)新特性同樣急切,那會是件非常棒的事情!
  我們?nèi)匀辉诘却櫛O(jiān)測工具,腦電圖。
  (⊙_☉) 哈哈。
  丑
  異構(gòu)資源利用增加了復(fù)雜性。
  控制力和簡單性之間典型的工程權(quán)衡——如果你希望在操作執(zhí)行上有細(xì)粒度的控制(例如,使用哪些GPU節(jié)點),那么你需要維護(hù)這些約束。在某些情況下,細(xì)粒度控制對最大限度提高性能是必要的。例如,在給GPU輸入數(shù)據(jù)之前,使用多線程獲取并預(yù)處理批量數(shù)據(jù),那么GPU就不會等待這些操作。想了解在CPU上使用異步運行方式輸入數(shù)據(jù)給GPU的細(xì)節(jié),或是為你自己的隊列創(chuàng)建基準(zhǔn),可以看看Luke這篇優(yōu)秀的文章,TensorFlow Data Input (Part 2): Extensions。
  TensorFlow會拱曲GPU。
  同樣,在啟動時,TensorFlow會給自己分配所有可用的GPU內(nèi)存。取決于你使用的情形,這是把雙刃劍。如果你在積極開發(fā)模型,并且本機(jī)有GPU可用,你可能想將GPU分成多分,分給不同應(yīng)用。但是,如果你在云環(huán)境下部署一個模型,你想知道你的模型可以在可用的硬件下運行,而不會與可能與此硬件通訊的其他代碼發(fā)生不可預(yù)測的交互。
  你可以使用類似于下面的代碼片段來設(shè)定每個線程可用GPU內(nèi)存的上限,但是如果在一臺機(jī)器上有多個GPU,我們還不知道用什么方式控制每個GPU的分配。
  設(shè)置選項:
  gpu_options =tf.GPUOptions(per_process_gpu_memory_fraction = 0.5)
  然后將它作為配置傳給會話:
  sess = tf.Session(config = tf.ConfigProto(gpu_options = gpu_options))
  默認(rèn)情況下,Theano與TensorFlow會沖突。
  我們有許多代碼都依賴于Theano,從加載數(shù)據(jù)到各種實用功能。我們也閱讀了許多Theano中實現(xiàn)的研究代碼。但是,如果你在同一范圍內(nèi)導(dǎo)入Theano和TensorFlow,它們將競爭分配GPU內(nèi)存,這會導(dǎo)致壞事發(fā)生。在完全不同的GPU(例如,兩個GPU運行兩個單獨的模型)上執(zhí)行完全不同的環(huán)境,你可以在shell環(huán)境下限制設(shè)備對CUDA的可見性。那么當(dāng)你啟動Python代碼的時候,它將只會看到(并且分配)CUDA能看到的GPU。如果你使用bash,那么這么設(shè)置:
  exportCUDA_VISIBLE_DEVICES=0,1# only the first two GPUs are usable
  注意:上面的CUDA設(shè)備的數(shù)字可能與你的不一樣,查看設(shè)備ID使用nvidia-smi!
  另外,如果你想讓Theano只在CPU上執(zhí)行,你可能想讓數(shù)據(jù)和實用功能這么做,那么你可以在Python代碼中設(shè)置。下面是實現(xiàn)這效果的Python代碼。將它放在所有導(dǎo)入語句的上方:
  import osos.environ[‘THEANO_FLAGS’] = “floatX=float32,device=cpu,fastmath=True,ldflags=-lopenblas”
  當(dāng)然你也可以在代碼里設(shè)定CUDA的環(huán)境標(biāo)志,但對我的模型開發(fā)工作流程來說,記住“每個shell腳本一個GPU”更容易。
  總結(jié)
  在任何框架中實現(xiàn)端到端的工作流要付出一定的努力,TensorFlow也不例外。TensorFlow的一些東西(隊列,某些圖操作,資源分配/上下文管理,圖形可視化)相對于深度學(xué)習(xí)場景來說還比較新,我們?nèi)匀辉趯W(xué)習(xí)利用這些特性的最佳途徑。其他一些東西在其他框架中已經(jīng)存在一段時間了。雖然整體概念相似,但實現(xiàn)細(xì)節(jié)不盡相同。我們感謝所有的谷歌開發(fā)者為實現(xiàn)良好抽象(例如隊列中的流式數(shù)據(jù))而付出的努力。
  開放工具最好的地方就是,社區(qū)人員為解決一個問題實現(xiàn)了一個非常聰明的技巧或創(chuàng)新方式。盡管大多數(shù)人還在學(xué)習(xí)TensorFlow,我認(rèn)為這種情況發(fā)生的可能性會水漲船高!展望下一個時代!
?

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?