tensorflow該如何理解

tensorflow該如何理解,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

在做網(wǎng)站、網(wǎng)站設(shè)計(jì)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報(bào)的無錫營銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)十載了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

一、什么是tensorflow?

    TensorFlow? 是一個(gè)采用數(shù)據(jù)流圖(data flow graphs),用于數(shù)值計(jì)算的開源軟件庫。節(jié)點(diǎn)(Nodes)在圖中表示數(shù)學(xué)操作,圖中的線(edges)則表示在節(jié)點(diǎn)間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量(tensor)。它靈活的架構(gòu)讓你可以在多種平臺上展開計(jì)算,例如臺式計(jì)算機(jī)中的一個(gè)或多個(gè)CPU(或GPU),服務(wù)器,移動設(shè)備等等。TensorFlow 最初由Google大腦小組(隸屬于Google機(jī)器智能研究機(jī)構(gòu))的研究員和工程師們開發(fā)出來,用于機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的研究,但這個(gè)系統(tǒng)的通用性使其也可廣泛用于其他計(jì)算領(lǐng)域。

 1. 數(shù)據(jù)流圖是什么?

    數(shù)據(jù)流圖用“結(jié)點(diǎn)”(nodes)和“線”(edges)的有向圖來描述數(shù)學(xué)計(jì)算?!肮?jié)點(diǎn)” 一般用來表示施加的數(shù)學(xué)操作,但也可以表示數(shù)據(jù)輸入(feed in)的起點(diǎn)/輸出(push out)的終點(diǎn),或者是讀取/寫入持久變量(persistent variable)的終點(diǎn)?!熬€”表示“節(jié)點(diǎn)”之間的輸入/輸出關(guān)系。這些數(shù)據(jù)“線”可以輸運(yùn)“size可動態(tài)調(diào)整”的多維數(shù)據(jù)數(shù)組,即“張量”(tensor)。張量從圖中流過的直觀圖像是這個(gè)工具取名為“Tensorflow”的原因。一旦輸入端的所有張量準(zhǔn)備好,節(jié)點(diǎn)將被分配到各種計(jì)算設(shè)備完成異步并行地執(zhí)行運(yùn)算。

  總結(jié):數(shù)據(jù)流圖,就是一個(gè)帶權(quán)的有向圖(自己的理解)

2. tensorflow的特性    

   高度的靈活性

   TensorFlow 不是一個(gè)嚴(yán)格的“神經(jīng)網(wǎng)絡(luò)”庫。只要你可以將你的計(jì)算表示為一個(gè)數(shù)據(jù)流圖,你就可以使用Tensorflow。你來構(gòu)建圖,描寫驅(qū)動計(jì)算的內(nèi)部循環(huán)。我們提供了有用的工具來幫助你組裝“子圖”(常用于神經(jīng)網(wǎng)絡(luò)),當(dāng)然用戶也可以自己在Tensorflow基礎(chǔ)上寫自己的“上層庫”。定義順手好用的新復(fù)合操作和寫一個(gè)python函數(shù)一樣容易,而且也不用擔(dān)心性能損耗。當(dāng)然萬一你發(fā)現(xiàn)找不到想要的底層數(shù)據(jù)操作,你也可以自己寫一點(diǎn)c++代碼來豐富底層的操作。

   真正的可移植性(Portability)

    Tensorflow 在CPU和GPU上運(yùn)行,比如說可以運(yùn)行在臺式機(jī)、服務(wù)器、手機(jī)移動設(shè)備等等。想要在沒有特殊硬件的前提下,在你的筆記本上跑一下機(jī)器學(xué)習(xí)的新想法?Tensorflow可以辦到這點(diǎn)。準(zhǔn)備將你的訓(xùn)練模型在多個(gè)CPU上規(guī)?;\(yùn)算,又不想修改代碼?Tensorflow可以辦到這點(diǎn)。想要將你的訓(xùn)練好的模型作為產(chǎn)品的一部分用到手機(jī)app里?Tensorflow可以辦到這點(diǎn)。你改變主意了,想要將你的模型作為云端服務(wù)運(yùn)行在自己的服務(wù)器上,或者運(yùn)行在Docker容器里?Tensorfow也能辦到。Tensorflow就是這么拽 :)

    將科研和產(chǎn)品聯(lián)系在一起

過去如果要將科研中的機(jī)器學(xué)習(xí)想法用到產(chǎn)品中,需要大量的代碼重寫工作。那樣的日子一去不復(fù)返了!在Google,科學(xué)家用Tensorflow嘗試新的算法,產(chǎn)品團(tuán)隊(duì)則用Tensorflow來訓(xùn)練和使用計(jì)算模型,并直接提供給在線用戶。使用Tensorflow可以讓應(yīng)用型研究者將想法迅速運(yùn)用到產(chǎn)品中,也可以讓學(xué)術(shù)性研究者更直接地彼此分享代碼,從而提高科研產(chǎn)出率。

   自動求微分

基于梯度的機(jī)器學(xué)習(xí)算法會受益于Tensorflow自動求微分的能力。作為Tensorflow用戶,你只需要定義預(yù)測模型的結(jié)構(gòu),將這個(gè)結(jié)構(gòu)和目標(biāo)函數(shù)(objective function)結(jié)合在一起,并添加數(shù)據(jù),Tensorflow將自動為你計(jì)算相關(guān)的微分導(dǎo)數(shù)。計(jì)算某個(gè)變量相對于其他變量的導(dǎo)數(shù)僅僅是通過擴(kuò)展你的圖來完成的,所以你能一直清楚看到究竟在發(fā)生什么。

  多語言支持

    Tensorflow 有一個(gè)合理的c++使用界面,也有一個(gè)易用的python使用界面來構(gòu)建和執(zhí)行你的graphs。你可以直接寫python/c++程序,也可以用交互式的ipython界面來用Tensorflow嘗試些想法,它可以幫你將筆記、代碼、可視化等有條理地歸置好。當(dāng)然這僅僅是個(gè)起點(diǎn)——我們希望能鼓勵你創(chuàng)造自己最喜歡的語言界面,比如Go,Java,Lua,Javascript,或者是R。

性能最優(yōu)化

    比如說你又一個(gè)32個(gè)CPU內(nèi)核、4個(gè)GPU顯卡的工作站,想要將你工作站的計(jì)算潛能全發(fā)揮出來?由于Tensorflow 給予了線程、隊(duì)列、異步操作等以最佳的支持,Tensorflow 讓你可以將你手邊硬件的計(jì)算潛能全部發(fā)揮出來。你可以自由地將Tensorflow圖中的計(jì)算元素分配到不同設(shè)備上,Tensorflow可以幫你管理好這些不同副本。

二、CNN,RNN,LSTM之間的關(guān)系

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network CNN):

     卷積神經(jīng)網(wǎng)絡(luò)(CNN),是一種前饋神經(jīng)網(wǎng)絡(luò),解決了DNN(深度網(wǎng)絡(luò)),NN(神經(jīng)網(wǎng)絡(luò))中出現(xiàn)的過度擬合以及局部最有解問題。CNN是利用圖像的局部信息,將圖像中的固有局部模式(比如人身體的各個(gè)部位)來利用,CNN中的所以上下層神經(jīng)元并不是直接相互連接,而是通過“卷積核”做為中介。同一個(gè)卷積核中的圖是共享的,同時(shí)圖像通過卷積操作后任然保留原來的位置關(guān)系。

       CNN的基本結(jié)構(gòu)包括兩層,其一為特征提取層,每個(gè)神經(jīng)元的輸入與前一層的局部接受域相連,并提取該局部的特征。一旦該局部特征被提取后,它與其它特征間的位置關(guān)系也隨之確定下來;其二是特征映射層,網(wǎng)絡(luò)的每個(gè)計(jì)算層由多個(gè)特征映射組成,每個(gè)特征映射是一個(gè)平面,平面上所有神經(jīng)元的權(quán)值相等。特征映射結(jié)構(gòu)采用影響函數(shù)核小的sigmoid函數(shù)作為卷積網(wǎng)絡(luò)的激活函數(shù),使得特征映射具有位移不變性。此外,由于一個(gè)映射面上的神經(jīng)元共享權(quán)值,因而減少了網(wǎng)絡(luò)自由參數(shù)的個(gè)數(shù)。卷積神經(jīng)網(wǎng)絡(luò)中的每一個(gè)卷積層都緊跟著一個(gè)用來求局部平均與二次提取的計(jì)算層,這種特有的兩次特征提取結(jié)構(gòu)減小了特征分辨率。

      CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形,該部分功能主要由池化層實(shí)現(xiàn)。由于CNN的特征檢測層通過訓(xùn)練數(shù)據(jù)進(jìn)行學(xué)習(xí),所以在使用CNN時(shí),避免了顯式的特征抽取,而隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí);再者由于同一特征映射面上的神經(jīng)元權(quán)值相同,所以網(wǎng)絡(luò)可以并行學(xué)習(xí),這也是卷積網(wǎng)絡(luò)相對于神經(jīng)元彼此相連網(wǎng)絡(luò)的一大優(yōu)勢。卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在語音識別和圖像處理方面有著獨(dú)特的優(yōu)越性,其布局更接近于實(shí)際的生物神經(jīng)網(wǎng)絡(luò),權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡(luò)這一特點(diǎn)避免了特征提取和分類過程中數(shù)據(jù)重建的復(fù)雜度。

RNN循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network RNN):

         循環(huán)神經(jīng)網(wǎng)絡(luò)RNN神經(jīng)網(wǎng)絡(luò)是一種節(jié)點(diǎn)定向連接成環(huán)的人工神經(jīng)網(wǎng)絡(luò)。這種網(wǎng)絡(luò)的內(nèi)部狀態(tài)可以展示動態(tài)時(shí)序行為。不同于前饋神經(jīng)網(wǎng)絡(luò)(CNN)的是,RNN可以利用它內(nèi)部的記憶來處理任意時(shí)序的輸入序列,這讓它可以更容易處理如不分段的手寫識別、語音識別等。在RNN中神經(jīng)元的輸出可以在下一個(gè)時(shí)間戳直接作用到自身,即第i層神經(jīng)元在m時(shí)刻的輸入,除了(i-1)層神經(jīng)元在該時(shí)刻的輸出外,還包括其自身在(m-1)時(shí)刻的輸出。如下圖:

tensorflow該如何理解

       循環(huán)神經(jīng)網(wǎng)絡(luò)的這種結(jié)構(gòu)非常適合處理前后有依賴關(guān)系的數(shù)據(jù)樣本。由于這種鏈?zhǔn)降慕Y(jié)構(gòu),循環(huán)神經(jīng)網(wǎng)絡(luò)與序列和列表緊密相連。因此,RNN適合處理基于時(shí)間的序列,例如:一段連續(xù)的語音,一段連續(xù)的手寫文字。以語言模型為例,根據(jù)給定句子中的前t個(gè)字符,然后預(yù)測第t+1個(gè)字符。假設(shè)我們的句子是“你好世界”,使用前饋神經(jīng)網(wǎng)絡(luò)來預(yù)測:在時(shí)間1輸入“你”,預(yù)測“好”,時(shí)間2向同一個(gè)網(wǎng)絡(luò)輸入“好”預(yù)測“世”。整個(gè)過程如下圖所示:

tensorflow該如何理解

    可以根據(jù)前n個(gè)字符預(yù)測第t+1個(gè)字符。在這里,n=1。同時(shí)可以增大n來使得輸入含有更多信息。但是我們不能任意增大n,因?yàn)檫@樣通常會增在模型的復(fù)雜度,從而導(dǎo)致需要大量數(shù)據(jù)和計(jì)算來訓(xùn)練模型。

LSTM(時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)):

   LSTM(Long Short-Term Memory)是長短期記憶網(wǎng)絡(luò),是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測時(shí)間序列中間隔和延遲相對較長的重要事件。它是一種特殊的RNN類型,可以學(xué)習(xí)長期依賴信息。解決了RNN中出現(xiàn)的序列過長導(dǎo)致優(yōu)化時(shí)出現(xiàn)的圖消散問題。將RNN看成在一個(gè)時(shí)間上傳遞的神經(jīng)網(wǎng)絡(luò),在隱藏層節(jié)點(diǎn)之間加入了互聯(lián)。(本次的驗(yàn)證碼識別就是用了LSTM)

   LSTM在算法中加入了一個(gè)判斷信息有用與否的“處理器”,這個(gè)處理器作用的結(jié)構(gòu)被稱為cell。

   一個(gè)cell當(dāng)中被放置了三扇門,分別叫做輸入門遺忘門輸出門。一個(gè)信息進(jìn)入LSTM的網(wǎng)絡(luò)當(dāng)中,可以根據(jù)規(guī)則來判斷是否有用。只有符合算法認(rèn)證的信息才會留下,不符的信息則通過遺忘門被遺忘。

在標(biāo)準(zhǔn)RNN中,重復(fù)模塊具有簡單的結(jié)構(gòu),例如單tanh層,如下圖所示:

tensorflow該如何理解h(t)一方面用于當(dāng)前層的模型損失計(jì)算,一方面用于下一層h(t+1)計(jì)算。

LSTM的結(jié)構(gòu)比RNN的復(fù)雜得多,如下圖所示:

tensorflow該如何理解LSTM的關(guān)鍵是細(xì)胞狀態(tài),即貫穿圖表頂部的水平線:

tensorflow該如何理解

 LSTM為細(xì)胞狀態(tài)移除或者增加信息,這種精心設(shè)計(jì)的結(jié)構(gòu)叫做門。LSTM有三種門結(jié)構(gòu)。

1、遺忘門

tensorflow該如何理解

      顧名思義,遺忘門決定丟掉細(xì)胞狀態(tài)的哪些信息。根據(jù)h(t-1)和x(t),遺忘門為狀態(tài)C(t-1)輸出一個(gè)介于0到1之間的數(shù)字,0表示“完全丟棄”,1表示”完全接受“。數(shù)學(xué)表達(dá)式為:

tensorflow該如何理解

2、輸入門

tensorflow該如何理解

    輸入門由兩個(gè)部分構(gòu)成:第一部分為sigmoid激活函數(shù),輸出為i(t),決定更新哪些值;第二部分為tanh激活函數(shù),輸出為~C(t)。i(t)與~C(t)相乘后的結(jié)果用于更新細(xì)胞狀態(tài),數(shù)學(xué)表達(dá)式為:

tensorflow該如何理解

3、輸出門

經(jīng)過遺忘門和輸入門,細(xì)胞狀態(tài)更新為:

tensorflow該如何理解

最后,我們應(yīng)該決定輸出是什么。輸出基于上述細(xì)胞狀態(tài),但是需要過濾。輸出門如下圖所示:

tensorflow該如何理解

    首先,使用sigmoid層決定輸出細(xì)胞狀態(tài)的哪些部分。然后,我們令細(xì)胞狀態(tài)通過tanh層,輸出結(jié)果與sigmoid層的輸出結(jié)果相乘。數(shù)學(xué)公式為:

tensorflow該如何理解

LSTM的前向傳播算法:

(1)更新遺忘門輸出:

tensorflow該如何理解 

(2)更新輸入門輸出:

tensorflow該如何理解

(3)更新細(xì)胞狀態(tài):

 tensorflow該如何理解 

(4)更新輸出門輸出: 

tensorflow該如何理解

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

當(dāng)前名稱:tensorflow該如何理解
文章路徑:http://muchs.cn/article8/gppoop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、營銷型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)App設(shè)計(jì)移動網(wǎng)站建設(shè)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)