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

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

TensorFlow開源模型解析

大?。?/span>0.6 MB 人氣: 2017-09-29 需要積分:1

  你知道你可以使用 TensorFlow 來描述圖像、理解文本和生成藝術(shù)作品嗎?來這個(gè)演講,你體驗(yàn)到 TensorFlow 在計(jì)算機(jī)視覺、自然語言處理和計(jì)算機(jī)藝術(shù)生成上的最新項(xiàng)目。我將分享每個(gè)領(lǐng)域內(nèi)我最偏愛的項(xiàng)目、展示你可以在家嘗試的實(shí)時(shí)演示以及分享你可以進(jìn)一步學(xué)習(xí)的教育資源。這個(gè)演講不需要特定的機(jī)器學(xué)習(xí)背景。

  

  在進(jìn)入正題之前,Gordon先談了談他對(duì)可復(fù)現(xiàn)的研究(reproducible research)的看法。他說我們現(xiàn)在理所當(dāng)然地認(rèn)為我們可以使用深度學(xué)習(xí)做到很多事情。在2005年的時(shí)候,他用了6個(gè)月時(shí)間試圖使用神經(jīng)網(wǎng)絡(luò)來做基本的圖像分類——識(shí)別分辨細(xì)胞是否感染了疾病。雖然那時(shí)候已經(jīng)有很多不錯(cuò)的軟件庫(kù)可用了,但他們?nèi)匀贿€是要手動(dòng)編寫許多神經(jīng)網(wǎng)絡(luò)代碼。最后,六個(gè)月時(shí)間過去了,這些優(yōu)秀工程師打造的網(wǎng)絡(luò)才開始在二元分類任務(wù)上表現(xiàn)得足夠好一點(diǎn)。

  而今天,你再也不需要這么苦惱了。今天,一個(gè)優(yōu)秀的Python開發(fā)者加一點(diǎn)TensorFlow背景知識(shí),并且愿意使用開源的模型,那么僅需要幾天時(shí)間就能實(shí)現(xiàn)遠(yuǎn)遠(yuǎn)超過之前 6 個(gè)月所能達(dá)到的效果。當(dāng)然,這要?dú)w功于大學(xué)、公司、開發(fā)者等慷慨的分享,這也已經(jīng)為我們的社會(huì)帶來了很大的價(jià)值。

  Gordon舉了一個(gè)例子說明。他說過去8個(gè)月有三種新的醫(yī)學(xué)圖像應(yīng)用都依賴于一種被稱為Inception的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模型,這些應(yīng)用都實(shí)現(xiàn)了非常卓越的表現(xiàn),有望在人類的生命健康方面提供方便實(shí)用的幫助。

  既然深度學(xué)習(xí)這么有用?那么深度學(xué)習(xí)是怎么工作的呢?首先我們先來看看一個(gè)可以將圖像分類為「貓」或「狗」的模型。通過這個(gè)模型,我們可以看到深度學(xué)習(xí)與Gordon在2005年的工作有什么不同。

  Gordon解釋說,在2005年時(shí),為了開發(fā)圖像分類器,他編寫了Python代碼來提取圖像的特征。首先他需要構(gòu)思這個(gè)圖像分類器需要怎樣的特征(比如:線、形狀、顏色),甚至還可能需要OpenCV這樣的庫(kù)來做人臉檢測(cè)

  而使用深度學(xué)習(xí)時(shí),可以直接為模型輸入原始像素,讓模型自己去尋找分類所需的特征。“深度學(xué)習(xí)”之所以被稱為“深度”,是因?yàn)樗哂卸鄠€(gè)層,數(shù)據(jù)在這些層中進(jìn)行處理,最后得到分類結(jié)果。

  TensorFlow是由谷歌設(shè)計(jì)的一個(gè)深度學(xué)習(xí)框架,擁有很多優(yōu)點(diǎn),包括快速靈活可擴(kuò)展的開源機(jī)器學(xué)習(xí)庫(kù)、可用于研究和生產(chǎn)、可以運(yùn)行在 CPU、GPU、TPU、安卓、iOS樹莓派硬件和系統(tǒng)上。

  

  Gordon將在這個(gè)演講中為我們主要解讀以下 4 個(gè)重要研究:

  

  此外,Gordon還提到了一些其它使用TensorFlow實(shí)現(xiàn)的研究成果:

  

  谷歌的這些研究中有一些仍然是當(dāng)前最佳的,但他們?nèi)匀婚_源了相關(guān)的代碼,任何人都可以免費(fèi)嘗試復(fù)現(xiàn)這些結(jié)果。那谷歌為什么還要開源呢?畢竟有的研究是非常具有商業(yè)價(jià)值的。Gordon 說:“一個(gè)重要的理由是可以激勵(lì)別人繼續(xù)推進(jìn)你的想法?!蓖瑫r(shí),這也能幫助降低開發(fā)者的進(jìn)入門檻,能讓更多人參與進(jìn)來。

  要實(shí)現(xiàn)可復(fù)現(xiàn)的(reproducible)開源,你需要共享你的代碼和數(shù)據(jù)集。代碼方面,要做到可復(fù)現(xiàn),你應(yīng)該共享你所有的代碼,包括訓(xùn)練、推理和驗(yàn)證的代碼。數(shù)據(jù)集方面,你應(yīng)該說明你所用的數(shù)據(jù)集,你對(duì)數(shù)據(jù)集的處理方式等等。最好能提供一個(gè)試用數(shù)據(jù)集(toy dataset),讓人們可以輕松驗(yàn)證你的模型。

  預(yù)訓(xùn)練的檢查點(diǎn)(pretrained checkpoint)也很重要。pretrained checkpoint 是為了保存模型訓(xùn)練過程中一些列狀態(tài),這樣其他研究者就可以完全復(fù)制之前的研究過程,從而避免被隨機(jī)化(在深度學(xué)習(xí)中極為常見)等其他因素干擾。

  Gordon還談到了Docker。很多時(shí)候,你的開發(fā)環(huán)境需要大量的依賴包。通過共享一個(gè)Docker容器,你可以讓其他人快速嘗試你的想法。

  開發(fā)深度學(xué)習(xí)模型,當(dāng)然可以選擇自己寫代碼。在TensorFlow中,你可以輕松編寫代碼,實(shí)現(xiàn)模型。這里給出了兩個(gè)示例:

  

  這段代碼使用Keras+TensorFlow的組合。Keras是用來構(gòu)建神經(jīng)網(wǎng)絡(luò)的API,它具有簡(jiǎn)單高效的特性,允許初學(xué)者輕松地建立神經(jīng)網(wǎng)絡(luò)模型;同時(shí),Keras也可以使用TensorFlow作為運(yùn)行的后端,極大地加速了開發(fā)與訓(xùn)練的過程。

  

  首先我們使用Keras中的Sequential類初始化一個(gè)用于存放任意層網(wǎng)絡(luò)的模型,我們可以簡(jiǎn)單地認(rèn)為這個(gè)類創(chuàng)建了一個(gè)杯子,我們的任務(wù)就是用適當(dāng)?shù)膬?nèi)容將這個(gè)杯子填滿。接著在代碼中不斷地調(diào)用add方法按照順序添加我們需要的神經(jīng)網(wǎng)絡(luò)層 (layer)。我們可以看到短短的幾行代碼便可以創(chuàng)建一個(gè)MNIST神經(jīng)網(wǎng)絡(luò)分類器。你只需要專注于以下幾個(gè)方面:將數(shù)據(jù)按照神經(jīng)網(wǎng)絡(luò)的輸入(代碼中為一行 model.add(Dense(512, activation=’relu’, input_shape=(784,)))格式處理好,選擇適當(dāng)?shù)募せ詈瘮?shù)(不僅是relu,你也可以嘗試tanh或是softmax來快速比較不同激活函數(shù)對(duì)神經(jīng)網(wǎng)絡(luò)結(jié)果的影響),是否添加Dropout層來減輕學(xué)習(xí)過程中的過擬合現(xiàn)象。

  當(dāng)模型構(gòu)建好之后,我們便可以快速地使用compile方法來編譯模型,其中的損失函數(shù)loss、優(yōu)化方法optimizer均可以自由選擇。最后,使用類似于sklearn機(jī)器學(xué)習(xí)工具包中的fit方法即可開始訓(xùn)練我們的模型。

  

  TensorFlow有一個(gè)非常出色可視化工具TensorBoard,可以協(xié)助你的開發(fā)。

  

  除了自己動(dòng)手開發(fā),你也可以利用別人寫好的代碼,這也是開源的好處,也是本演講所關(guān)注的重點(diǎn)。

非常好我支持^.^

(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ī)定!

      ?