一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

關(guān)于TensorFlow的探討

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

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

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

      ?