版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
深度學(xué)習(xí)(一)深度學(xué)習(xí)簡介
深度學(xué)習(xí)是一種基于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)方法。和傳統(tǒng)的機器學(xué)習(xí)方法相比,深度學(xué)習(xí)模型一般需要更豐富的數(shù)據(jù)、更強大的計算資源,同時也能達到更高的準確率。目前,深度學(xué)習(xí)方法被廣泛應(yīng)用于計算機視覺、自然語言處理、強化學(xué)習(xí)等領(lǐng)域。本章將依次進行介紹。本章要點計算機視覺的定義和基本任務(wù)仿生學(xué)和深度學(xué)習(xí)自然語言處理的基本問題傳統(tǒng)方法與神經(jīng)網(wǎng)絡(luò)方法的對比強化學(xué)習(xí)算法簡介強化學(xué)習(xí)的應(yīng)用計算機視覺的定義計算機視覺是使用計算機及相關(guān)設(shè)備對生物視覺的一種模擬。它的主要任務(wù)是通過對采集的圖片或視頻進行處理以獲得相應(yīng)場景的三維信息。計算機視覺是一門關(guān)于如何運用照相機和計算機來獲取我們所需的,被拍攝對象的數(shù)據(jù)與信息的學(xué)問。形象地說,就是給計算機安裝上眼睛(照相機)和大腦(算法),讓計算機能夠感知環(huán)境。計算機視覺的基本任務(wù)計算機視覺的基本任務(wù)包含圖像處理、模式識別或圖像識別、景物分析、圖像理解等。除了圖像處理和模式識別之外,它還包括空間形狀的描述,幾何建模以及認識過程。
實現(xiàn)圖像理解是計算機視覺的終極目標(biāo)。圖像處理技術(shù)圖像處理技術(shù)可以把輸入圖像轉(zhuǎn)換成具有所希望特性的另一幅圖像。例如,可通過處理使輸出圖像有較高的信噪比,或通過增強處理突出圖像的細節(jié),以便于操作員的檢驗。在計算機視覺研究中經(jīng)常利用圖像處理技術(shù)進行預(yù)處理和特征抽取。模式識別技術(shù)模式識別技術(shù)根據(jù)從圖像抽取的統(tǒng)計特性或結(jié)構(gòu)信息,把圖像分成預(yù)定的類別。例如,文字識別或指紋識別。在計算機視覺中模式識別技術(shù)經(jīng)常用于對圖像中的某些部分,例如分割區(qū)域的識別和分類。圖像理解技術(shù)圖像理解技術(shù)是對圖像內(nèi)容信息的理解。給定一幅圖像,圖像理解程序不僅描述圖像本身,而且描述和解釋圖像所代表的景物,以便對圖像代表的內(nèi)容做出決定。計算機視覺的傳統(tǒng)算法在深度學(xué)習(xí)算法出現(xiàn)之前,對于視覺算法來說,大致可以分為以下5個步驟:特征感知,圖像預(yù)處理,特征提取,特征篩選,推理預(yù)測與識別。傳統(tǒng)算法缺乏對特征的重視圖像特征提取需要人力依賴特征算子成功或半成功的例子指紋識別算法基于Haar的人臉檢測算法基于HoG特征的物體檢測仿生學(xué)與深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)示例輸入:圖片輸出:標(biāo)簽視覺系統(tǒng)信息處理機制發(fā)現(xiàn)人:DavidHubel時間:1981意義:證明大腦的可視皮層是分級的。視覺功能劃分抽象:把非常具體的形象的元素抽象出來形成有意義的概念。迭代:把有意義的概念往上迭代,變成更加抽象,人可以感知到的抽象概念。抽象與迭代的過程案例說明人腦感知氣球模擬識別人臉識別摩托車現(xiàn)代深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)(CNN)卷積神經(jīng)網(wǎng)絡(luò)是一種對人腦比較精準的模擬,它模擬了人腦識別圖片時感知圖片中的局部特征,之后將局部特征綜合起來再得到整張圖的全局信息的過程。其卷積層通常是堆疊的,低層的卷積層可以提取到圖片的局部特征,高層的卷積能夠從低層的卷積層中學(xué)到更復(fù)雜的特征,從而實現(xiàn)到圖片的分類和識別。卷積就是兩個函數(shù)之間的相互關(guān)系在計算機視覺里面,可以把卷積當(dāng)作一個抽象的過程,就是把小區(qū)域內(nèi)的信息統(tǒng)計抽象出來?,F(xiàn)代深度學(xué)習(xí)的過程用學(xué)習(xí)好的卷積和對圖像進行掃描,然后每一個卷積和會生成一個掃描的響應(yīng)圖,我們叫responsemap,或者叫featuremap。如果有多個卷積和,就有多個featuremap。也就說從一個最開始的輸入圖像(RGB三個通道)可以得到256個通道的featuremap,因為有256個卷積和,每個卷積和代表一種統(tǒng)計抽象的方式?,F(xiàn)代深度學(xué)習(xí)的過程池化操作。池化操作在統(tǒng)計上的概念更明確,就是一個對一個小區(qū)域內(nèi)求平均值或者求最大值的統(tǒng)計操作。帶來的結(jié)果是,如果之前輸入有兩個通道的,或者256通道的卷積的響應(yīng)featuremap,每一個featuremap都經(jīng)過一個求最大的一個池化層,會得到一個比原來featuremap更小的256的featuremap?,F(xiàn)代深度學(xué)習(xí)的過程LeNet網(wǎng)絡(luò)LeNet網(wǎng)絡(luò)輸入圖像是大小為32×32像素的灰度圖,第一層經(jīng)過了一組卷積和,生成了6個28X28的featuremap,然后經(jīng)過一個池化層,得到6個14X14的featuremap,然后再經(jīng)過一個卷積層,生成了16個10X10的卷積層,再經(jīng)過池化層生成16個5×5的featuremap。這16個大小為5×5的featuremap再經(jīng)過3個全連接層,即可得到最后的輸出結(jié)果。輸出就是標(biāo)簽空間的輸出?,F(xiàn)代深度學(xué)習(xí)AlexNet網(wǎng)絡(luò)AlexNet是基于LeNet的改進,它可以被看作LeNet的放大版。AlexNet的輸入是一個大小為224X224像素的圖片,輸入圖像在經(jīng)過若干個卷積層和若干個池化層后,最后經(jīng)過兩個全連接層泛化特征,得到最后的預(yù)測結(jié)果。AlexNet的特征:在第一層,都是一些填充的塊狀物和邊界等特征;中間的層開始學(xué)習(xí)一些紋理特征;而在接近分類器的高層,則可以明顯看到的物體形狀的特征。最后的一層,即分類層,不同物體的主要特征已經(jīng)被完全提取出來?,F(xiàn)代深度學(xué)習(xí)AlexNet網(wǎng)絡(luò)自然語言自然語言,區(qū)別于計算機所使用的機器語言和程序語言,是指人類用于日常交流的語言。而自然語言處理的目的卻是要讓計算機來理解和處理人類的語言。自然語言的一個句子背后往往包含著不直接表述出來的常識和邏輯。這使得計算機在試圖處理自然語言的時候不能從字面上獲取所有的信息。因此自然語言處理的難度更大,它的發(fā)展與應(yīng)用相比于計算機視覺也往往呈現(xiàn)出滯后的情況。為了將深度學(xué)習(xí)引入自然語言處理領(lǐng)域,研究者嘗試了許多方法來表示和處理自然語言的表層信息(如詞向量、更高層次、帶上下文信息的特征表示等),也嘗試過許多方法來結(jié)合常識與直接感知(如知識圖譜、多模態(tài)信息等)。這些研究都富有成果,其中的許多都已應(yīng)用于現(xiàn)實中,甚至用于社會管理、商業(yè)、軍事的目的。自然語言處理的基本問題自然語言處理主要研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法,其主要任務(wù)包括:語言建模:計算一個句子在一個語言中出現(xiàn)的概率。中文分詞:將中文句子恰當(dāng)?shù)厍蟹譃閱蝹€的詞。句法分析:通過明確句子內(nèi)兩個或多個詞的關(guān)系來了解整個句子的結(jié)構(gòu)。最終句法分析的結(jié)果是一棵句法樹。情感分類:給出一個句子,判斷這個句子表達的情感。機器翻譯:最常見的是把源語言的一個句子翻譯成目標(biāo)語言的一個句子,最終預(yù)測出來的整個目標(biāo)語言句子必須與給定的源語言句子具有完全相同的含義。閱讀理解:有許多形式。有時候是輸入一個段落,一個問題,生成一個回答,或者在原文中標(biāo)定一個范圍作為回答,有時候是輸出一個分類。傳統(tǒng)方法與神經(jīng)網(wǎng)絡(luò)方法的比較人工參與程度人的參與程度越來越低,但系統(tǒng)的效果越來越好。這是合乎直覺的,因為人對于世界的認識和建??偸瞧娴?、有局限性的。如果可以將自然語言處理系統(tǒng)的構(gòu)建自動化,將其基于對世界的觀測點(即數(shù)據(jù)集),所建立的模型和方法一定會比人類的認知更加符合真實的世界。數(shù)據(jù)量隨著自然語言處理系統(tǒng)中人工參與的程度越來越低,系統(tǒng)的細節(jié)就需要更多的信息來決定,這些信息只能來自于更多的數(shù)據(jù)??山忉屝?/p>
人工參與程度的降低帶來的另一個問題是模型的可解釋性越來越低。在理想狀況下,如果系統(tǒng)非常有效,人們根本不需要關(guān)心黑盒系統(tǒng)的內(nèi)部構(gòu)造,但事實是自然語言處理系統(tǒng)的狀態(tài)離完美還有相當(dāng)?shù)牟罹?。自然語言處理的發(fā)展趨勢從傳統(tǒng)方法和神經(jīng)網(wǎng)絡(luò)方法的對比中,可以看出自然語言處理的模型和系統(tǒng)構(gòu)建是向著越來越自動化、模型越來越通用的趨勢發(fā)展的。一開始,人們試圖減少和去除人類專家知識的參與。因此就有了大量的網(wǎng)絡(luò)參數(shù)、復(fù)雜的架構(gòu)設(shè)計,這些都是通過在概率模型中提供潛在變量,使得模型具有捕捉和表達復(fù)雜規(guī)則的能力。之后,人們覺得每一次為新的自然語言處理任務(wù)設(shè)計一個新的模型架構(gòu)并從頭訓(xùn)練的過程過于煩瑣,于是試圖開發(fā)利用這些任務(wù)底層所共享的語言特征。在這一背景下,遷移學(xué)習(xí)逐漸發(fā)展?,F(xiàn)在人們希望神經(jīng)網(wǎng)絡(luò)的架構(gòu)都可以不需要設(shè)計,而是根據(jù)具體的任務(wù)和數(shù)據(jù)來搜索得到。這一新興領(lǐng)域方興未艾,可以預(yù)見隨著研究的深入,自然語言處理的自動化程度一定會得到極大提高。強化學(xué)習(xí)什么是強化學(xué)習(xí)強化學(xué)習(xí)是機器學(xué)習(xí)的一個重要分支,它與非監(jiān)督學(xué)習(xí)、監(jiān)督學(xué)習(xí)并列為機器學(xué)習(xí)的三類主要學(xué)習(xí)方法。強化學(xué)習(xí)強調(diào)如何基于環(huán)境行動,以取得最大化的預(yù)期利益,所以強化學(xué)習(xí)可以被理解為決策問題。它是多學(xué)科多領(lǐng)域交叉的產(chǎn)物,其靈感來自于心理學(xué)的行為主義理論,即有機體如何在環(huán)境給予的獎勵或懲罰的刺激下,逐步形成對刺激的預(yù)期,產(chǎn)生能獲得最大利益的習(xí)慣性行為。強化學(xué)習(xí)的應(yīng)用范圍非常廣泛,各領(lǐng)域?qū)λ难芯恐攸c各有不同。強化學(xué)習(xí)監(jiān)督學(xué)習(xí)是通過帶有標(biāo)簽或?qū)?yīng)結(jié)果的樣本訓(xùn)練得到一個最優(yōu)模型,再利用這個模型將所有的輸入映射為相應(yīng)的輸出,以實現(xiàn)分類。非監(jiān)督學(xué)習(xí)是在樣本的標(biāo)簽未知的情況下,根據(jù)樣本間的相似性對樣本集進行聚類,使類內(nèi)差距最小化,學(xué)習(xí)出分類器。強化學(xué)習(xí)與監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)強化學(xué)習(xí)的四個元素智能體(agent)智能體是執(zhí)行任務(wù)的客體,只能通過與環(huán)境互動來提升策略。環(huán)境狀態(tài)(state)在每一個時間節(jié)點,agent所處的環(huán)境的表示即為環(huán)境狀態(tài)。行動(action)
在每一個環(huán)境狀態(tài)中,agent可以采取的動作即為行動。反饋(reward)
每到一個環(huán)境狀態(tài),agent就有可能會收到一個reward
反饋。強化學(xué)習(xí)算法的目標(biāo)強化學(xué)習(xí)算法的目標(biāo)就是獲得最多的累計獎勵(正反饋)。以“幼童學(xué)習(xí)走路”為例:幼童需要自主學(xué)習(xí)走路,沒有人指導(dǎo)他應(yīng)該如何完成“走路”,他需要通過不斷的嘗試和外界對他的反饋來學(xué)習(xí)走路。強化學(xué)習(xí)的特征沒有監(jiān)督者,只有一個反饋信號;反饋是延遲的,不是立即生成的;另外,強化學(xué)習(xí)是序列學(xué)習(xí),時間在強化學(xué)習(xí)中具有重要的意義;Agent的行為會影響以后所有的決策。強化學(xué)習(xí)算法簡介強化學(xué)習(xí)主要可以分為Model-Free(無模型的)和Model-based(有模型的)兩大類。Model-Free算法又分成基于概率的和基于價值的。Model-Free和Model-Based如果agent不需要去理解或計算出環(huán)境模型,算法就是Model-Free的;相應(yīng)地,如果需要計算出環(huán)境模型,那么算法就是Model-Based的。兩種方法各有優(yōu)劣。Model-Based方法中,agent可以根據(jù)模型預(yù)測下一步的結(jié)果,并提前規(guī)劃行動路徑。但真實模型和學(xué)習(xí)到的模型是有誤差的,這種誤差會導(dǎo)致agent雖然在模型中表現(xiàn)很好,但是在真實環(huán)境中可能打不到預(yù)期結(jié)果。Model-Free的算法看似隨意,但這恰好更易于研究者們?nèi)崿F(xiàn)和調(diào)整。強化學(xué)習(xí)算法簡介基于概率的算法和基于價值的算法基于概率的算法直接輸出下一步要采取的各種動作的概率,然后根據(jù)概率采取行動。每種動作都有可能被選中,只是可能性不同?;诟怕实乃惴ǖ拇硭惴閜olicy-gradient而基于價值的算法輸出的則是所有動作的價值,然后根據(jù)最高價值來選擇動作,相比基于概率的方法,基于價值的決策部分更為死板——只選價值最高的,而基于概率的,即使某個動作的概率最高,但是還是不一定會選到它?;趦r值的算法的代表算法為Q-Learning。強化學(xué)習(xí)算法的應(yīng)用交互性檢索交互性檢索是在檢索用戶不能構(gòu)建良好的檢索式(關(guān)鍵詞)的情況下,通過與檢索平臺交流互動并不斷修改檢索式,從而獲得較準確檢索結(jié)果的過程。強化學(xué)習(xí)算法的應(yīng)用新聞推薦一次完整的推薦過程包含以下過程:用戶刷新或者下拉,后臺獲取到用戶請求,并根據(jù)用戶的標(biāo)簽召回候選新聞,推薦引擎則對候選新聞進行排序,最終給用戶推出新聞,如此往復(fù),直到用戶關(guān)閉app,停止瀏覽新聞。將用戶持續(xù)瀏覽新聞的推薦過程看成一個決策過程,就可以通過強化學(xué)習(xí)學(xué)習(xí)每一次推薦的最佳策略,從而使得用戶從開始打開app開始到關(guān)閉app這段時間內(nèi)的點擊量最高。小結(jié)本章簡要介紹了深度學(xué)習(xí)的應(yīng)用領(lǐng)域。卷積神經(jīng)網(wǎng)絡(luò)可以模擬人類處理視覺信息的方式提取圖像特征,極大地推動了計算機視覺領(lǐng)域的發(fā)展。自然語言處理是典型的時序信息分析問題,其主要應(yīng)用包括句法分析、情感分類、機器翻譯等。強化學(xué)習(xí)強調(diào)智能體與環(huán)境的交互與決策,具有廣泛的應(yīng)用價值。通過引入深度學(xué)習(xí),模型的函數(shù)擬合能力得到了顯著的提升,從而可以應(yīng)用到一系列高層任務(wù)中。本章列出的三個應(yīng)用領(lǐng)域只是舉例,目前還有許多領(lǐng)域在深度學(xué)習(xí)技術(shù)的推動下進行著變革,有興趣的讀者可以深入了解。TheEnd謝謝!深度學(xué)習(xí)框架簡介和對比(一)深度學(xué)習(xí)框架簡介
深度學(xué)習(xí)采用的是一種“端到端”的學(xué)習(xí)模式,從而在很大程度上減輕了研究人員的負擔(dān)。但是隨著神經(jīng)網(wǎng)絡(luò)的發(fā)展,模型的復(fù)雜度也在不斷提升。即使是在一個最簡單的卷積神經(jīng)網(wǎng)絡(luò)中也會包含卷積層、池化層、激活層、Flatten層、全連接層等。如果每次搭建一個新的網(wǎng)絡(luò)之前都需要重新實現(xiàn)這些層的話,勢必會占用許多時間,因此各大深度學(xué)習(xí)框架應(yīng)運而生??蚣艽嬖诘囊饬x就是屏蔽底層的細節(jié),使研究者可以專注于模型結(jié)構(gòu)。目前較為流行的深度學(xué)習(xí)框架有Caffe、TensorFlow以及Pytorch等。本章將依次進行介紹。本章要點Caffe的特點和概述TensorFlow的特點和概述數(shù)據(jù)流圖PyTorch的特點和概述三者的比較Caffe簡介Caffe,全稱ConvolutionalArchitectureforFastFeatureEmbedding。是一種常用的深度學(xué)習(xí)框架,主要應(yīng)用在視頻、圖像處理方面的應(yīng)用上。caffe是一個清晰,可讀性高,快速的深度學(xué)習(xí)框架。Caffe是第一個主流的工業(yè)級深度學(xué)習(xí)工具,專精于圖像處理。它有很多擴展,但是由于一些遺留的架構(gòu)問題,不夠靈活,且對遞歸網(wǎng)絡(luò)和語言建模的支持很差。對于
基于層的網(wǎng)絡(luò)結(jié)構(gòu),caffe擴展性不好;而用戶如果想要增加層,則需要自己實現(xiàn)(forward,backwardandgradientupdate)Caffe的特點Caffe的基本工作流程是設(shè)計建立在神經(jīng)網(wǎng)絡(luò)的一個簡單假設(shè),所有的計算都是層的形式表示的,網(wǎng)絡(luò)層所做的事情就是輸入數(shù)據(jù),然后輸出計算結(jié)果。以卷積為例,卷積就是輸入一幅圖像,然后和這一層的參數(shù)(filter)做卷積,最終輸出卷積結(jié)果。每層需要兩種函數(shù)計算,一種是forward,從輸入計算到輸出;另一種是backward,從上層給的gradient來計算相對于輸入層的gradient。這兩個函數(shù)實現(xiàn)之后,我們就可以把許多層連接成一個網(wǎng)絡(luò),這個網(wǎng)絡(luò)輸入數(shù)據(jù)(圖像,語音或其他原始數(shù)據(jù)),然后計算需要的輸出(比如識別的標(biāo)簽)。在訓(xùn)練的時候,可以根據(jù)已有的標(biāo)簽計算loss和gradient,然后用gradient來更新網(wǎng)絡(luò)中的參數(shù)。Caffe的特點Caffe是一個清晰而高效的深度學(xué)習(xí)框架,它基于純粹的C++/CUDA架構(gòu),支持命令行、Python和MATLAB接口,可以在CPU和GPU直接無縫切換。它的模型與優(yōu)化都是通過配置文件來設(shè)置,無須代碼。Caffe設(shè)計之初就做到了盡可能的模塊化,允許對數(shù)據(jù)格式、網(wǎng)絡(luò)層和損失函數(shù)進行擴展。Caffe的模型定義是用ProtocolBuffer(協(xié)議緩沖區(qū))語言寫進配置文件的,以任意有向無環(huán)圖的形式。Caffe會根據(jù)網(wǎng)絡(luò)需要正確占用內(nèi)存,通過一個函數(shù)調(diào)用實現(xiàn)CPU和GPU之間的切換。Caffe每一個單一的模塊都對應(yīng)一個測試,使得測試的覆蓋非常方便,同時提供python和matlab接口,用這兩種語法進行調(diào)用都是可行的。Caffe概述Caffe是一種對新手非常友好的深度學(xué)習(xí)框架模型,它的相應(yīng)優(yōu)化都是以文本形式而非代碼形式給出。Caffe中的網(wǎng)絡(luò)都是有向無環(huán)圖的集合,可以直接定義。Caffe概述數(shù)據(jù)及其導(dǎo)數(shù)以blobs的形式在層間流動,Caffe層的定義由2部分組成:層屬性與層參數(shù),如圖所示。圖中前4行是層屬性,定義了層名稱、層類型以及層連接結(jié)構(gòu)(輸入blob和輸出blob);而后半部分是各種層參數(shù)。Blob是用以存儲數(shù)據(jù)的4維數(shù)組。Caffe概述在Caffe模型中,網(wǎng)絡(luò)參數(shù)的定義也非常方便,可以隨意設(shè)置相應(yīng)參數(shù)。感覺上更像是配置服務(wù)器參數(shù)而不像是代碼。TensorFlow簡介TensorFlow是一個采用數(shù)據(jù)流圖(dataflowgraphs)用于數(shù)值計算的開源軟件庫。節(jié)點(Nodes)在圖中表示數(shù)學(xué)操作,圖中的線(edges)則表示在節(jié)點間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量(tensor)。它靈活的架構(gòu)讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務(wù)器,移動設(shè)備等等。TensorFlow最初由Google大腦小組的研究員和工程師們開發(fā)出來,用于機器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的研究,但這個系統(tǒng)的通用性使其也可廣泛用于其他計算領(lǐng)域。數(shù)據(jù)流圖數(shù)據(jù)流圖用“結(jié)點”(nodes)和“線”(edges)的有向圖來描述數(shù)學(xué)計算?!肮?jié)點”一般用來表示施加的數(shù)學(xué)操作,但也可以表示數(shù)據(jù)輸入(feedin)的起點/輸出(pushout)的終點,或者是讀取/寫入持久變量(persistentvariable)的終點?!熬€”表示“節(jié)點”之間的輸入/輸出關(guān)系。這些數(shù)據(jù)“線”可以輸運“size可動態(tài)調(diào)整”的多維數(shù)據(jù)數(shù)組,即“張量”(tensor)。張量從圖中流過的直觀圖像是這個工具取名為“TensorFlow”的原因。一旦輸入端的所有張量準備好,節(jié)點將被分配到各種計算設(shè)備完成異步并行地執(zhí)行運算。數(shù)據(jù)流圖TensorFlow的特點TensorFlow不是一個嚴格的“神經(jīng)網(wǎng)絡(luò)”庫。只要用戶可以將計算表示為一個數(shù)據(jù)流圖就可以使用TensorFlow。用戶負責(zé)構(gòu)建圖,描寫驅(qū)動計算的內(nèi)部循環(huán)。TensorFlow提供有用的工具來幫助用戶組裝“子圖”,當(dāng)然用戶也可以自己在TensorFlow基礎(chǔ)上寫自己的“上層庫”。定義新復(fù)合操作和寫一個Python函數(shù)一樣容易。TensorFlow的可擴展性相當(dāng)強,如果用戶找不到想要的底層數(shù)據(jù)操作,也可以自己寫一些c++代碼來豐富底層的操作。TensorFlow在CPU和GPU上運行,比如說可以運行在臺式機、服務(wù)器、手機移動設(shè)備等等。TensorFlow支持將訓(xùn)練模型自動在多個CPU上規(guī)?;\算,以及將模型遷移到移動端后臺。TensorFlow的特點基于梯度的機器學(xué)習(xí)算法會受益于TensorFlow自動求微分的能力。作為TensorFlow用戶,只需要定義預(yù)測模型的結(jié)構(gòu),將這個結(jié)構(gòu)和目標(biāo)函數(shù)(objectivefunction)結(jié)合在一起,并添加數(shù)據(jù),TensorFlow將自動為用戶計算相關(guān)的微分導(dǎo)數(shù)。計算某個變量相對于其他變量的導(dǎo)數(shù)僅僅是通過擴展你的圖來完成的,所以用戶能一直清楚看到究竟在發(fā)生什么。TensorFlow還有一個合理的c++使用界面,也有一個易用的python使用界面來構(gòu)建和執(zhí)行你的graphs。你可以直接寫python/c++程序,也可以用交互式的ipython界面來用TensorFlow嘗試些想法,它可以幫用戶將筆記、代碼、可視化等有條理地歸置好。TensorFlow概述TensorFlow中Flow,也就是流,是其完成運算的基本方式。流是指一個計算圖或簡單的一個圖,圖不能形成環(huán)路,圖中的每個節(jié)點代表一個操作,如加法、減法等。每個操作都會導(dǎo)致新的張量形成。TensorFlow概述計算圖具有以下屬性:葉子頂點或起始頂點始終是張量。意即,操作永遠不會發(fā)生在圖的開頭,由此可以推斷,圖中的每個操作都應(yīng)該接受一個張量并產(chǎn)生一個新的張量。同樣,張量不能作為非葉子節(jié)點出現(xiàn),這意味著它們應(yīng)始終作為輸入提供給操作/節(jié)點。計算圖總是以層次順序表達復(fù)雜的操作。通過將a+b表示為c,將b+1表示為d,可以分層次組織上述表達式。因此,可以將e寫為:e=(c)x(d)這里c=a+b且d=b+1.以反序遍歷圖形而形成子表達式,這些子表達式組合起來形成最終表達式。TensorFlow概述當(dāng)我們正向遍歷時,遇到的頂點總是成為下一個頂點的依賴關(guān)系,例如沒有a和b就無法獲得c,同樣的,如果不解決c和d則無法獲得e。同級節(jié)點的操作彼此獨立,這是計算圖的重要屬性之一。當(dāng)我們按照圖中所示的方式構(gòu)造一個圖時,很自然的是,在同一級中的節(jié)點,例如c和d,彼此獨立,這意味著沒有必要在計算d之前計算c。因此它們可以并行執(zhí)行。計算圖的并行也是最重要的屬性之一。它清楚地表明,同級的節(jié)點是獨立的,這意味著在c被計算之前不需空閑,可以在計算c的同時并行計算d。TensorFlow充分利用了這個屬性。TensorFlow概述TensorFlow允許用戶使用并行計算設(shè)備更快地執(zhí)行操作。計算的節(jié)點或操作自動調(diào)度進行并行計算。這一切都發(fā)生在內(nèi)部,例如在上圖中,可以在CPU上調(diào)度操作c,在GPU上調(diào)度操作d。下圖展示了兩種分布式執(zhí)行的過程。TensorFlow概述上圖中,第一種是單個系統(tǒng)分布式執(zhí)行,其中單個TensorFlow會話創(chuàng)建單個worker,并且該worker負責(zé)在各設(shè)備上調(diào)度任務(wù)。在第二種系統(tǒng)下,有多個worker,他們可以在同一臺機器上或不同的機器上,每個worker都在自己的上下文中運行。在上圖中,worker進程1運行在獨立的機器上,并調(diào)度所有可用設(shè)備進行計算。TensorFlow概述子圖是主圖的一部分,從屬性2可以說子圖總是表示一個子表達式,因為c是e的子表達式。子圖也滿足最后一個屬性。同一級別的子圖也相互獨立,可以并行執(zhí)行。因此可以在一臺設(shè)備上調(diào)度整個子圖。TensorFlow概述TensorFlow將其所有操作分配到由worker管理的不同設(shè)備上。更常見的是,worker之間交換張量形式的數(shù)據(jù),例如在e=(c)*(d)的圖表中,一旦計算出c,就需要將其進一步傳遞給e,因此Tensor在節(jié)點間前向流動。該流動如下圖所示。TensorFlow概述右圖解釋了子圖的并行執(zhí)行。這里有2個矩陣乘法運算,因為它們都處于同一級別,彼此獨立,這符合最后一個屬性。由于獨立性的緣故,節(jié)點安排在不同的設(shè)備gpu_0和gpu_1上。PyTorch簡介PyTorch具有先進設(shè)計理念的框架,其歷史可追溯到2002年就誕生于紐約大學(xué)的Torch。Torch使用了一種不是很大眾的語言Lua作為接口。Lua簡潔高效,但由于其過于小眾,以至于很多人聽說要掌握Torch必須新學(xué)一門語言就望而卻步,但Lua其實是一門比Python還簡單的語言??紤]到Python在計算科學(xué)領(lǐng)域的領(lǐng)先地位,以及其生態(tài)完整性和接口易用性,幾乎任何框架都不可避免地要提供Python接口。終于,在2017年,Torch的幕后團隊推出了PyTorch。PyTorch不是簡單地封裝LuaTorch提供Python接口,而是對Tensor之上的所有模塊進行了重構(gòu),并新增了最先進的自動求導(dǎo)系統(tǒng),成為當(dāng)下最流行的動態(tài)圖框架。PyTorch的特點PyTorch既可以看作為加入了GPU支持的numpy。TensorFlow與Caffe都是命令式的編程語言,而且是靜態(tài)的,即首先必須構(gòu)建一個神經(jīng)網(wǎng)絡(luò),然后一次又一次使用同樣的結(jié)構(gòu);如果想要改變網(wǎng)絡(luò)的結(jié)構(gòu),就必須從頭開始。但是PyTorch通過一種反向自動求導(dǎo)的技術(shù),可以讓用戶零延遲地任意改變神經(jīng)網(wǎng)絡(luò)的行為。PyTorch的設(shè)計思路是線性、直觀且易于使用的,當(dāng)用戶執(zhí)行一行代碼時,它會忠實地執(zhí)行,所以當(dāng)用戶的代碼出現(xiàn)Bug的時候,可以通過這些信息輕松快捷地找到出錯的代碼,不會讓用戶在Debug的時候因為錯誤的指向或者異步和不透明的引擎浪費太多的時間。PyTorch的代碼相對于TensorFlow而言,更加簡潔直觀,同時對于TensorFlow高度工業(yè)化的底層代碼,PyTorch的源代碼就要友好得多,更容易看懂。深入API,理解PyTorch底層肯定是一件令人高興的事。PyTorch概述PyTorch最大優(yōu)勢是建立的神經(jīng)網(wǎng)絡(luò)是動態(tài)的,可以非常容易的輸出每一步的調(diào)試結(jié)果,相比于其他框架來說,調(diào)試起來十分方便。PyTorch的圖是隨著代碼的運行逐步建立起來的,也就是說使用者并不需要在一開始就定義好全部的網(wǎng)絡(luò)的結(jié)構(gòu),而是可以隨著編碼的進行來一點一點的調(diào)試,相比于TensorFlow和Caffe的靜態(tài)圖而言,這種設(shè)計顯得更加貼近一般人的編碼習(xí)慣。PyTorch概述三者的比較CaffeCaffe的優(yōu)點是簡潔快速,缺點是缺少靈活性。Caffe靈活性的缺失主要是因為它的設(shè)計缺陷。Caffe憑借其易用性、簡潔明了的源碼、出眾的性能和快速的原型設(shè)計獲取了眾多用戶。但是在深度學(xué)習(xí)新時代到來之時,Caffe已經(jīng)表現(xiàn)出明顯的力不從心,諸多問題逐漸顯現(xiàn),包括靈活性缺失、擴展難、依賴眾多環(huán)境難以配置、應(yīng)用局限等。盡管現(xiàn)在在GitHub上還能找到許多基于Caffe的項目,但是新的項目已經(jīng)越來越少。三者的比較Caffe2Caffe的作者在加入FAIR后開發(fā)了Caffe2。Caffe2是一個兼具表現(xiàn)力、速度和模塊性的開源深度學(xué)習(xí)框架。它沿襲了大量的Caffe設(shè)計,可解決多年來在Caffe的使用和部署中發(fā)現(xiàn)的瓶頸問題。Caffe2的設(shè)計追求輕量級,在保有擴展性和高性能的同時,Caffe2也強調(diào)了便攜性。Caffe2從一開始就以性能、擴展、移動端部署作為主要設(shè)計目標(biāo)。Caffe2繼承了Caffe的優(yōu)點,在速度上令人印象深刻。然而盡管已經(jīng)發(fā)布半年多,開發(fā)一年多,Caffe2仍然是一個不太成熟的框架。三者的比較TensorFlowTensorFlow已經(jīng)成為當(dāng)今最炙手可熱的深度學(xué)習(xí)框架,但是由于自身的缺陷,TensorFlow離最初的設(shè)計目標(biāo)還很遙遠。TensorFlow和Theano擁有相近的設(shè)計理念,都是基于計算圖實現(xiàn)自動微分系統(tǒng)。TensorFlow使用數(shù)據(jù)流圖進行數(shù)值計算,圖中的節(jié)點代表數(shù)學(xué)運算,而圖中的邊則代表在這些節(jié)點之間傳遞的多維數(shù)組。TensorFlow編程接口支持Python和C++。隨著1.0版本的公布,Java、Go、R和HaskellAPI的alpha版本也被支持。此外,TensorFlow還可在GoogleCloud和AWS中運行。TensorFlow還支持Windows7、Windows10和WindowsServer2016。由于TensorFlow使用C++Eigen庫,所以庫可在ARM架構(gòu)上編譯和優(yōu)化。這也就意味著用戶可以在各種服務(wù)器和移動設(shè)備上部署自己的訓(xùn)練模型,無須執(zhí)行單獨的模型解碼器或者加載Python解釋器。三者的比較TensorFlow的批評過于復(fù)雜的系統(tǒng)設(shè)計。TensorFlow代碼量龐大,使維護難以完成。對于入門者,TensorFlow的底層運行機制難以掌握,很多時候?qū)е铝朔艞墶nl繁變動的接口。TensorFlow的接口一直處于快速迭代之中,且向后兼容性較差,這導(dǎo)致許多陳舊的開源代碼已經(jīng)無法在新版運行,同時也間接導(dǎo)致了許多第三方框架出現(xiàn)BUG。接口設(shè)計過于晦澀難懂,擁有圖、會話、命名空間、PlaceHolder等諸多抽象概念,對普通用戶來說難以理解。同一個功能,TensorFlow提供了多種實現(xiàn),這些實現(xiàn)良莠不齊,使用中還有細微的區(qū)別,很容易將用戶帶入坑中。TensorFlow作為一個復(fù)雜的系統(tǒng),文檔和教程眾多,但缺乏明顯的條理和層次,雖然查找很方便,但用戶卻很難找到一個真正循序漸進的入門教程。至今TensorFlow仍沒有一個統(tǒng)一易用的接口。三者的比較PyTorchPyTorch是當(dāng)前難得的簡潔優(yōu)雅且高效快速的框架。PyTorch的設(shè)計追求最少的封裝,遵循tensor→variable(autograd)→nn.Module三個由低到高的抽象層次,分別代表高維數(shù)組(張量)、自動求導(dǎo)(變量)和神經(jīng)網(wǎng)絡(luò)(層/模塊),而且這三個抽象之間聯(lián)系緊密,可以同時進行修改和操作。簡潔的設(shè)計帶來的另外一個好處就是代碼易于理解。PyTorch的靈活性不以速度為代價,在許多評測中,PyTorch的速度表現(xiàn)勝過TensorFlow和Keras等框架。三者的比較PyTorchPyTorch正在受到越來越多人的追捧。PyTorch是所有的框架中面向?qū)ο笤O(shè)計的最優(yōu)雅的一個。PyTorch的面向?qū)ο蟮慕涌谠O(shè)計來源于Torch,而Torch的接口設(shè)計以靈活易用而著稱。PyTorch繼承了Torch的衣缽,尤其是API的設(shè)計和模塊的接口都與Torch高度一致。PyTorch的設(shè)計最符合人們的思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法,即所思即所得,不需要考慮太多關(guān)于框架本身的束縛。PyTorch提供了完整的文檔,循序漸進的指南,作者親自維護的論壇供用戶交流和求教問題。Facebook人工智能研究院對PyTorch提供了強力支持,作為當(dāng)今排名前三的深度學(xué)習(xí)研究機構(gòu),F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新。同樣的,由于推出時間較短,在Github上并沒有如Caffe或TensorFlow那樣多的代碼實現(xiàn),使用TensorFlow能找到很多別人的代碼,而對于PyTorch的使用者,可能需要自己完成很多的代碼實現(xiàn)。小結(jié)
本章介紹了三種常用的機器學(xué)習(xí)框架,其中TensorFlow和PyTorch是目前最流行的兩種開源框架。在以往版本的實現(xiàn)中,TensorFlow主要提供靜態(tài)圖構(gòu)建的功能,因此具有較高的運算性能,但是模型的調(diào)試分析成本較高。PyTorch主要提供動態(tài)圖計算的功能,API涉及接近Python原生語法,因此易用性較好,但是在圖優(yōu)化方面不如TensorFlow。這樣的特點導(dǎo)致TensorFlow大量用于AI企業(yè)的模型部署,而學(xué)術(shù)界大量使用PyTorch進行研究。不過目前我們也看到兩種框架正在吸收對方的優(yōu)勢,例如TensorFlow的eager模式就是對動態(tài)圖的一種嘗試。TheEnd謝謝!機器學(xué)習(xí)基礎(chǔ)知識(一)導(dǎo)入
深度學(xué)習(xí)是作為機器學(xué)習(xí)的一個分支發(fā)展而來的,因此有必要介紹機器學(xué)習(xí)的基礎(chǔ)知識。本章首先介紹模型評估與模型參數(shù)選擇,這些知識在深度學(xué)習(xí)中具有相當(dāng)重要的地位。而后,本章簡要介紹了監(jiān)督學(xué)習(xí)與非監(jiān)督學(xué)習(xí)。大多數(shù)基礎(chǔ)的深度學(xué)習(xí)模型都是基于監(jiān)督學(xué)習(xí)的,但是隨著模型復(fù)雜度的提高,模型對數(shù)據(jù)的需求量也日益增加。因此,許多研究者都在嘗試將非監(jiān)督學(xué)習(xí)應(yīng)用到深度學(xué)習(xí)中,以獲得更佳廉價的訓(xùn)練數(shù)據(jù)。本章要點模型評估與模型參數(shù)選擇驗證正則化監(jiān)督學(xué)習(xí)非監(jiān)督學(xué)習(xí)模型評估與模型參數(shù)選擇
模型評估與模型參數(shù)選擇訓(xùn)練集可能存在以下問題:1.訓(xùn)練集樣本太少,缺乏代表性;2.訓(xùn)練集中本身存在錯誤的樣本,即噪聲。如果片面地追求訓(xùn)練誤差的最小化,就會導(dǎo)致模型參數(shù)復(fù)雜度增加,使得模型過擬合。為了選擇效果最佳的模型,防止過擬合的問題,通??梢圆扇〉姆椒ㄓ校菏褂抿炞C集調(diào)參對損失函數(shù)進行正則化驗證模型不能過擬合于訓(xùn)練集,否則將不能在測試集上得到最優(yōu)結(jié)果;但是否能直接以測試集上的表現(xiàn)來選擇模型參數(shù)呢?答案是否定的。因為這樣的模型參數(shù)將會是針對某個特定測試集的,得出來的評價標(biāo)準將會失去其公平性,失去了與其他同類或不同類模型相比較的意義。因此參數(shù)的選擇(即調(diào)參)必須在一個獨立于訓(xùn)練集和測試集的數(shù)據(jù)集上進行,這樣的用于模型調(diào)參的數(shù)據(jù)集被稱為開發(fā)集或驗證集。然而很多時候我們能得到的數(shù)據(jù)量非常有限。這個時候我們可以不顯式地使用驗證集,而是重復(fù)使用訓(xùn)練集和測試集,這種方法稱為交叉驗證。常用的交叉驗證方法有:簡單交叉驗證。K-重交叉驗證。正則化
監(jiān)督學(xué)習(xí)與非監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)回歸回歸問題在生活中非常常見,其最簡單的形式是一個連續(xù)函數(shù)的擬合。如果一個購物網(wǎng)站想要計算出其在某個時期的預(yù)期收益,研究人員會將相關(guān)因素如廣告投放量、網(wǎng)站流量、優(yōu)惠力度等納入自變量,根據(jù)現(xiàn)有數(shù)據(jù)擬合函數(shù),得到在未來某一時刻的預(yù)測值?;貧w問題中通常使用均方損失函數(shù)來作為度量模型效果的指標(biāo),最簡單的求解例子是最小二乘法。監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)分類通常在不平衡類問題中,我們使用F-度量來作為評價模型的指標(biāo)。以二元不平衡分類問題為例,這種分類問題往往是異常檢測,模型的好壞往往取決于能否很好地檢出異常,同時盡可能不誤報異常。定義占樣本少數(shù)的類為正類(Positiveclass),占樣本多數(shù)的為負類(Negativeclass),那么預(yù)測只可能出現(xiàn)4種狀況:將正類樣本預(yù)測為正類(TruePositive,TP)將負類樣本預(yù)測為正類(FalsePositive,FP)將正類樣本預(yù)測為負類(FalseNegative,FN)將負類樣本預(yù)測為負類(TrueNegative,TN)監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)
非監(jiān)督學(xué)習(xí)
非監(jiān)督學(xué)習(xí)
小結(jié)
本章對機器學(xué)習(xí)基礎(chǔ)知識進行了介紹,這部分是理解后續(xù)高級操作的基礎(chǔ),需要讀者認真消化。監(jiān)督學(xué)習(xí)與非監(jiān)督學(xué)習(xí)主要針對數(shù)據(jù)集定義。有監(jiān)督數(shù)據(jù)集需要人工標(biāo)注,成本較為昂貴,但是在訓(xùn)練模型時往往能夠保障效果。無監(jiān)督數(shù)據(jù)集一般不需要過多人工操作,可以通過爬蟲等方式自動大量獲得。由于沒有監(jiān)督信息的約束,需要設(shè)計巧妙的學(xué)習(xí)算法才能有效利用無監(jiān)督數(shù)據(jù)集訓(xùn)練模型,不過大量廉價數(shù)據(jù)可以從另一個方面提高模型性能。模型評估需要根據(jù)模型的訓(xùn)練歷史判斷模型是否處于欠擬合或過擬合狀態(tài)。盡管有一定的規(guī)律作為指導(dǎo),而且有一些工具可以輔助分析,但是模型的評估過程一般需要較為豐富的經(jīng)驗。讀者可以在深度學(xué)習(xí)實驗中有意識地訓(xùn)練自己的模型評估能力。TheEnd謝謝!PyTorch深度學(xué)習(xí)基礎(chǔ)(一)導(dǎo)入
在介紹PyTorch之前,讀者需要先了解Numpy。Numpy是用于科學(xué)計算的框架,它提供了一個N維矩陣對象ndarray,以及初始化、計算ndarray的函數(shù),以及變換ndarray形狀,組合拆分ndarray的函數(shù)。PyTorch的Tensor和Numpy的ndarray十分類似,但是Tensor具備兩個ndarray不具備,但是對于深度學(xué)習(xí)來說非常重要的功能,其一是Tensor能用利用GPU計算,其二是,Tensor在計算時,能夠作為結(jié)點自動的加入到計算圖當(dāng)中,而計算圖可以為其中的每個結(jié)點自動的計算微分.本章要點Tensor對象及其運算Tensor的索引和切片Tensor的變換、拼接和拆分PyTorch的Reduction操作PyTorch的自動微分AutogradTensor對象及其運算Tensor對象是一個維度任意的矩陣,但是一個Tensor中所有元素的數(shù)據(jù)類型必須一致。torch包含的數(shù)據(jù)類型和普遍編程語言的數(shù)據(jù)類型類似,包含浮點型,有符號整型和無符號整形,這些類型既可以定義在CPU上,也可以定義在GPU上。在使用Tensor數(shù)據(jù)類型時,可以通過dtype屬性指定它的數(shù)據(jù)類型,device指定它的設(shè)備(CPU或者GPU)。Tensor對象及其運算通過device指定在GPU上定義變量后,可以在終端上通過nvidia-smi命令查看顯存占用。torch還支持在CPU和GPU之間拷貝變量。Tensor對象及其運算對Tensor執(zhí)行算數(shù)運算符的運算時,是兩個矩陣對應(yīng)元素的運算。torch.mm執(zhí)行的矩陣乘法的計算。Tensor對象及其運算此外,還有一些具有特定功能的函數(shù)。torch.clamp起的是分段函數(shù)的作用,可用于去掉矩陣中過小或者過大的元素;torch.round將小數(shù)部分化整;torch.tanh計算雙曲正切函數(shù),該函數(shù)將數(shù)值映射到(0,1)之間。Tensor對象及其運算除了直接從ndarray或list類型的數(shù)據(jù)中創(chuàng)建Tensor,PyTorch還提供了一些函數(shù)可直接創(chuàng)建數(shù)據(jù),這類函數(shù)往往需要提供矩陣的維度。torch.arange和Python內(nèi)置的range的使用方法基本相同,其第3個參數(shù)是步長。torch.linspace第3個參數(shù)指定返回的個數(shù)。torch.ones返回全0,torch.zeros返回全0矩陣。Tensor對象及其運算Tensor對象及其運算torch.rand返回從[0,1]之間的均勻分布采樣的元素所組成的矩陣,torch.randn返回從正態(tài)分布采樣的元素所組成的矩陣。torch.randint返回指定區(qū)間的均勻分布采樣的隨機整數(shù)所生成的矩陣。Tensor的索引和切片Tensor支持基本的索引和切片操作,不僅如此,它還支持ndarray中的高級索引(整數(shù)索引和布爾索引)操作。Tensor的索引和切片Tensor的索引和切片torch.where(condition,x,y)判斷condition的條件是否滿足,當(dāng)某個元素滿足,則返回對應(yīng)矩陣x相同位置的元素,否則返回矩陣y的元素。Tensor的變換、拼接和拆分PyTorch提供了大量的對Tensor進行操作的函數(shù)或方法,這些函數(shù)內(nèi)部使用指針實現(xiàn)對矩陣的形狀變換,拼接,拆分等操作,使得我們無須關(guān)心Tensor在內(nèi)存的物理結(jié)構(gòu)或者管理指針就可以方便且快速的執(zhí)行這些操作。Tensor.nelement(),Tensor.ndimension(),ndimension.size()可分別用來查看矩陣元素的個數(shù),軸的個數(shù)以及維度,屬性Tensor.shape也可以用來查看Tensor的維度。Tensor的變換、拼接和拆分Tensor的變換、拼接和拆分在PyTorch中,Tensor.reshape和Tensor.view都能被用來更改Tensor的維度。它們的區(qū)別在于,Tensor.view要求Tensor的物理存儲必須是連續(xù)的,否則將報錯,而Tensor.reshape則沒有這種要求。但是,Tensor.view返回的一定是一個索引,更改返回值,則原始值同樣被更改,Tensor.reshape返回的是引用還是拷貝是不確定的。它們的相同之處都接收要輸出的維度作為參數(shù),切輸出的矩陣元素個數(shù)不能改變,可以在維度中輸入-1,PyTorch會自動推斷它的數(shù)值。Tensor的變換、拼接和拆分Tensor的變換、拼接和拆分torch.squeeze和torch.unsqueeze用來給Tensor去掉和添加軸。torch.squeeze去掉維度為1的軸,而torch.unsqueeze用于給Tensor的指定位置添加一個維度為1的軸Tensor的變換、拼接和拆分torch.t和torch.transpose用于轉(zhuǎn)置二維矩陣。這兩個函數(shù)只接收二維Tensor,torch.t是torch.transpose的簡化版。Tensor的變換、拼接和拆分對于高維度Tensor,可以使用permute方法來變換維度。Tensor的變換、拼接和拆分PyTorch提供了torch.cat和torch.stack用于拼接矩陣,不同的是,torch.cat在已有的軸dim上拼接矩陣,給定軸的維度可以不同,而其他軸的維度必須相同。torch.stack在新的軸上拼接,它要求被拼接的矩陣所有維度都相同。Tensor的變換、拼接和拆分Tensor的變換、拼接和拆分除了拼接矩陣,PyTorch還提供了torch.split和torch.chunk用于拆分矩陣。它們的不同之處在于,torch.split傳入的是拆分后每個矩陣的大小,可以傳入list,也可以傳入整數(shù),而torch.chunk傳入的是拆分的矩陣個數(shù)。Tensor的變換、拼接和拆分PyTorch的Reduction操作Reduction運算的特點是它往往對一個Tensor內(nèi)的元素做歸約操作,比如torch.max找極大值,torch.cumsum計算累加,它還提供了dim參數(shù)來指定沿矩陣的哪個維度執(zhí)行操作。PyTorch的Reduction操作PyTorch的Reduction操作PyTorch的Reduction操作PyTorch的自動微分Autograd將Tensor的requires_grad屬性設(shè)置為True時,PyTorch的torch.autograd會自動的追蹤它的計算軌跡,當(dāng)需要計算微分的時候,只需要對最終計算結(jié)果的Tensor調(diào)用backward方法,中間所有計算結(jié)點的微分就會被保存在grad屬性中了。PyTorch的自動微分AutogradPyTorch的自動微分Autograd小結(jié)本章介紹了PyTorch框架的基本使用方法和工作原理。Tensor的中文名為張量,本質(zhì)上是一個多維矩陣。通過后文的介紹讀者將會很自然地理解Tensor在深度學(xué)習(xí)計算中的重要地位,因此本章講述的Tensor基本操作需要重點掌握。另一方面,PyTorch的動態(tài)圖計算依賴于強大的自動微分功能。理解自動微分不會幫助讀者提升編程技能,但是可以使讀者更容易理解PyTorch的底層計算過程,從而理解梯度的反向傳播等操作。TheEnd謝謝!PyTorch深度學(xué)習(xí)基礎(chǔ)
PyTorch深度學(xué)習(xí)基礎(chǔ)
本章要點線性回歸Logistic回歸用PyTorch實現(xiàn)logisticregressionlogisticregression的算法優(yōu)化logisticregression的模型可視化線性回歸
線性回歸
線性回歸線性回歸
線性回歸
線性回歸
線性回歸
線性回歸
Logistic回歸
Logistic回歸
Logistic回歸Logistic函數(shù)圖像Logistic回歸
Logistic回歸
Logistic回歸
用PyTorch實現(xiàn)logisticregression用PyTorch實現(xiàn)logisticregression的代碼主要依賴于三個模塊用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression數(shù)據(jù)準備用PyTorch實現(xiàn)logisticregression數(shù)據(jù)準備17-18行設(shè)置樣本對應(yīng)的標(biāo)簽y,分別用0和1表示不同高斯分布的數(shù)據(jù),也就是正樣本和負樣本。第21行使用cat函數(shù)將x1和x2組合在一起,第22-24行打亂樣本和標(biāo)簽的順序,將數(shù)據(jù)重新隨機排列是十分重要的步驟,否則算法的每次迭代只會學(xué)習(xí)到同一個類別的信息,容易造成模型過擬合。用PyTorch實現(xiàn)logisticregression數(shù)據(jù)準備用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression線性方程用PyTorch實現(xiàn)logisticregression線性方程上面代碼的第一行定義了線性模型的輸入維度D_in和輸出維度D_out,第2-3行實例化了nn.Linear,將線性模型應(yīng)用到數(shù)據(jù)x上,得到計算結(jié)果output。Linear的初始參數(shù)是隨機設(shè)置的,可以調(diào)用Linear.weight和Linear.bias獲取線性模型的參數(shù),第5行打印了輸入變量x,模型參數(shù)weight和bias,計算結(jié)果output的維度。第7-8行定義了我們自己實現(xiàn)的線性模型my_linear,第10行將my_linear的計算結(jié)果和PyTorch的計算結(jié)果output做比較,可以發(fā)現(xiàn)其結(jié)果一致。用PyTorch實現(xiàn)logisticregression激活函數(shù)前文介紹了torch.nn.Linear可用于實現(xiàn)線性模型,除此之外,它還提供了機器學(xué)習(xí)當(dāng)中常用的激活函數(shù),logistcregression用于二分類問題時,使用sigmoid函數(shù)將線性模型的計算結(jié)果映射到0和1之間,得到的計算結(jié)果作為樣本為正類的置信概率。torch.nn.Sigmoid()提供了這一函數(shù)的計算,在使用時,將Sigmoid類實例化,再將需要計算的變量作為參數(shù)傳遞給實例化的對象。用PyTorch實現(xiàn)logisticregression激活函數(shù)作為練習(xí),第4-6行手動實現(xiàn)sigmoid函數(shù),第8行通過PyTorch驗證我們的實現(xiàn)結(jié)果,其結(jié)果一致。用PyTorch實現(xiàn)logisticregression損失函數(shù)logisticregression使用交叉熵作為損失函數(shù)。PyTorch的torch.nn提供了許多標(biāo)準的損失函數(shù),我們可以直接使用torch.nn.BCELoss計算二值交叉熵損失。第1-2行調(diào)用了BCELoss來計算我們實現(xiàn)的logisticregression模型的輸出結(jié)果sigmoid(output)和數(shù)據(jù)的標(biāo)簽y,同樣地,在4-6行我們自定義了二值交叉熵函數(shù),在第8行將my_loss和PyTorch的BCELoss做比較,發(fā)現(xiàn)結(jié)果無差。用PyTorch實現(xiàn)logisticregression損失函數(shù)用PyTorch實現(xiàn)logisticregression損失函數(shù)在前面的代碼中,我們使用了torch.nn包中的線性模型nn.Linear,激活函數(shù)nn.Softmax(),損失函數(shù)nn.BCELoss,它們都繼承于nn.Module類,在PyTorch中,我們通過繼承nn.Module來構(gòu)建我們自己的模型。接下來我們用nn.Module來實現(xiàn)logisticRegression。用PyTorch實現(xiàn)logisticregression損失函數(shù)用PyTorch實現(xiàn)logisticregression損失函數(shù)通過繼承nn.Module實現(xiàn)自己的模型時,forward()方法是必須被子類覆寫的,在forward內(nèi)部應(yīng)當(dāng)定義每次調(diào)用模型時執(zhí)行的計算。從前面的應(yīng)用我們可以看出,nn.Module類的主要作用就是接收Tensor然后計算并返回結(jié)果。在一個Module中,還可以嵌套其他的Module,被嵌套的Module的屬性就可以被自動獲取,比如可以調(diào)用nn.Module.parameters()方法獲取Module所有保留的參數(shù),調(diào)用nn.Module.to()方法將模型的參數(shù)放置到GPU上等等。用PyTorch實現(xiàn)logisticregression優(yōu)化算法logisticregression通常采用梯度下降法優(yōu)化目標(biāo)函數(shù)。PyTorch的torch.optim包實現(xiàn)了大多數(shù)常用的優(yōu)化算法,使用起來非常簡單。首先構(gòu)建一個優(yōu)化器,在構(gòu)建時,首先需要將待學(xué)習(xí)的參數(shù)傳入,然后傳入優(yōu)化器需要的參數(shù),比如學(xué)習(xí)率。用PyTorch實現(xiàn)logisticregression優(yōu)化算法構(gòu)建完優(yōu)化器,就可以迭代的對模型進行訓(xùn)練,有兩個步驟,其一是調(diào)用損失函數(shù)的backward()方法計算模型的梯度,然后再調(diào)用優(yōu)化器的step()方法,更新模型的參數(shù)。需要注意的是,首先應(yīng)當(dāng)調(diào)用優(yōu)化器的zero_grad()方法清空參數(shù)的梯度。用PyTorch實現(xiàn)logisticregression優(yōu)化算法用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression模型可視化用PyTorch實現(xiàn)logisticregression模型可視化結(jié)果圖小結(jié)Logistic回歸是深度學(xué)習(xí)中最基礎(chǔ)的非線性模型之一。作為鋪墊,在介紹Logistic回歸以前,本章首先介紹了線性回歸。線性回歸的預(yù)測目標(biāo)是連續(xù)變量,而Logistic回歸的預(yù)測目標(biāo)是二元變量。為了應(yīng)對這一差異,Logistic回歸在線性回歸的基礎(chǔ)上加入了Sigmoid激活函數(shù)。本章最后使用PyTorch實現(xiàn)了Logistic回歸模型,讀者可以通過這個例子進一步體會深度學(xué)習(xí)模型構(gòu)建的整體流程以及框架編程的簡便性。TheEnd謝謝!多層感知器(一)導(dǎo)入
人工智能的研究者為了模擬人類的認知,提出了不同的模型。人工神經(jīng)網(wǎng)絡(luò)是人工智能中非常重要的一個學(xué)派——連接主義最為廣泛使用的模型。
在傳統(tǒng)上,基于規(guī)則的符號主義學(xué)派認為,人類的認知是基于信息中的模式;而這些模式可以被表示成為符號,并可以通過操作這些符號,顯式地使用邏輯規(guī)則進行計算與推理。多層感知器(一)導(dǎo)入
而基于統(tǒng)計的連接主義的模型將認知所需的功能屬性結(jié)合到模型中來,通過模擬生物神經(jīng)網(wǎng)絡(luò)的信息處理方式來構(gòu)建具有認知功能的模型。類似于生物神經(jīng)元與神經(jīng)網(wǎng)絡(luò),這類模型具有三個特點:
擁有處理信號的基礎(chǔ)單元
處理單元之間以并行方式連接
處理單元之間的連接是有權(quán)重的
這一類模型被稱為人工神經(jīng)網(wǎng)絡(luò),多層感知器是最為簡單的一種。本章要點多層感知器的相關(guān)基礎(chǔ)概念單層感知器和多層感知器BP神經(jīng)網(wǎng)絡(luò)Dropout正則化批標(biāo)準化基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念
基礎(chǔ)概念神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)是一個有向圖,以神經(jīng)元為頂點,神經(jīng)元的輸入為頂點的入邊,神經(jīng)元的輸出為頂點的出邊。因此神經(jīng)網(wǎng)絡(luò)實際上是一個計算圖,直觀地展示了一系列對數(shù)據(jù)進行計算操作的過程。神經(jīng)網(wǎng)絡(luò)是一個端到端的系統(tǒng),這個系統(tǒng)接受一定形式的數(shù)據(jù)作為輸入,經(jīng)過系統(tǒng)內(nèi)的一系列計算操作后,給出一定形式的數(shù)據(jù)作為輸出;系統(tǒng)內(nèi)的運算可以被視為一個黑箱子,這與人類的認知在一定程度上具有相似性。通常地,為了直觀起見,人們對神經(jīng)網(wǎng)絡(luò)中的各頂點進行了層次劃分?;A(chǔ)概念輸入層接受來自網(wǎng)絡(luò)外部的數(shù)據(jù)的頂點,組成輸入層。輸出層向網(wǎng)絡(luò)外部輸出數(shù)據(jù)的頂點,組成輸出層。隱藏層除了輸入層和輸出層以外的其他層,均為隱藏層?;A(chǔ)概念
感知器感知器的概念由RosenblattFrank在1957提出,是一種監(jiān)督訓(xùn)練的二元分類器。單層感知器
單層感知器
多層感知器
多層感知器
BP神經(jīng)網(wǎng)絡(luò)在多層感知器被引入的同時,也引入了一個新的問題:由于隱藏層的預(yù)期輸出并沒有在訓(xùn)練樣例中給出,隱藏層結(jié)點的誤差無法像單層感知器那樣直接計算得到。為了解決這個問題,后向傳播算法被引入,其核心思想是將誤差由輸出層向前層后向傳播,利用后一層的誤差來估計前一層的誤差。后向傳播算法由HenryJ.Kelley在1960和ArthurE.Bryson在1961分別提出。使用后向傳播算法訓(xùn)練的網(wǎng)絡(luò)稱為BP神經(jīng)網(wǎng)絡(luò)。梯度下降
梯度下降梯度下降
后向傳播
后向傳播
Dropout正則化Dropout是一種正則化技術(shù),通過防止特征的協(xié)同適應(yīng),可用于減少神經(jīng)網(wǎng)絡(luò)中的過擬合。Dropout的效果非常好,實現(xiàn)簡單且不會降低網(wǎng)絡(luò)速度,被廣泛使用。特征的協(xié)同適應(yīng)指的是在訓(xùn)練模型時,共同訓(xùn)練的神經(jīng)元為了相互彌補錯誤,而相互關(guān)聯(lián)的現(xiàn)象,在神經(jīng)網(wǎng)絡(luò)中這種現(xiàn)象會變得尤其復(fù)雜。協(xié)同適應(yīng)會轉(zhuǎn)而導(dǎo)致模型的過度擬合,因為協(xié)同適應(yīng)的現(xiàn)象并不會泛化未曾見過的數(shù)據(jù)。Dropout從解決特征間的協(xié)同適應(yīng)入手,有效地控制了神經(jīng)網(wǎng)絡(luò)的過擬合。Dropout正則化ropout在每次訓(xùn)練中,按照一定概率p隨機的抑制一些神經(jīng)元的更新,相應(yīng)地,按照概率1?p保留一些神經(jīng)元的更新。當(dāng)神經(jīng)元被抑制時,它的前向結(jié)果被置為0,而不管相應(yīng)的權(quán)重和輸入數(shù)據(jù)的數(shù)值大小。被抑制的神經(jīng)元在后向傳播中,也不會更新相應(yīng)權(quán)重,也就是說被抑制的神經(jīng)元在前向和后向中都不起任何作用。通過隨機的抑制一部分神經(jīng)元,可以有效防止特征的相互適應(yīng)。Dropout正則化Dropout的實現(xiàn)方法非常簡單,參考如下代碼,第3行生成了一個隨機數(shù)矩陣activations,表示神經(jīng)網(wǎng)絡(luò)中隱含層的激活值,第4-5行構(gòu)建了一個參數(shù)p=0.5伯努利分布,并從中采樣一個由伯努利變量組成的掩碼矩陣mask,伯努利變量是只有0和1兩種取值可能性的離散變量。第6行將mask和activations逐元素相乘,mask中數(shù)值為0的變量會將相應(yīng)的激活值置為0,從而這一激活值無論它本來的數(shù)值多大都不會參與到當(dāng)前網(wǎng)絡(luò)中更深層的計算,而mask中數(shù)值為1的變量則會保留相應(yīng)的激活值。Dropout正則化Dropout正則化
Dropout正則化Dropout會在訓(xùn)練和測試時做出不同的行為,PyTorch的torch.nn.Module提供了train方法和eval方法,通過調(diào)用這兩個方法就可以將網(wǎng)絡(luò)設(shè)置為訓(xùn)練模式或測試模式,這兩個方法只對Dropout這種訓(xùn)練和測試不一致的網(wǎng)絡(luò)層起作用,而不影響其他的網(wǎng)絡(luò)層,后面介紹的BatchNormalization也是訓(xùn)練和測試步驟不同的網(wǎng)絡(luò)層。批標(biāo)準化在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,往往需要標(biāo)準化輸入數(shù)據(jù),使得網(wǎng)絡(luò)的訓(xùn)練更加快速和有效,然而SGD等學(xué)習(xí)算法會在訓(xùn)練中不斷改變網(wǎng)絡(luò)的參數(shù),隱含層的激活值的分布會因此發(fā)生變化,而這一種變化就稱為內(nèi)協(xié)變量偏移。為了減輕ICS問題,批標(biāo)準化固定激活函數(shù)的輸入變量的均值和方差,使得網(wǎng)絡(luò)的訓(xùn)練更快。除了加速訓(xùn)練這一優(yōu)勢,批標(biāo)準化還具備其他功能:首先,應(yīng)用了批標(biāo)準化的神經(jīng)網(wǎng)絡(luò)在反向傳播中有著非常好的梯度流。不僅如此,批標(biāo)準化還具有正則化的作用。最后,批標(biāo)準化讓深度神經(jīng)網(wǎng)絡(luò)使用飽和非線性函數(shù)成為可能。批標(biāo)準化的實現(xiàn)方式
批標(biāo)準化的實現(xiàn)方式
批標(biāo)準化的實現(xiàn)方式
批標(biāo)準化的使用方法在PyTorch中,torch.nn.BatchNorm1d提供了批標(biāo)準化的實現(xiàn),同樣地,它也被當(dāng)作神經(jīng)網(wǎng)絡(luò)中的層使用。它有兩個十分關(guān)鍵的參數(shù),num_features確定特征的數(shù)量,affine決定批標(biāo)準化是否使用仿射映射。下面的代碼第4行實例化了一個BatchNorm1d對象,將模型的兩個中間變量running_mean和running_var初始化為5維的向量。第5-6行打印了這兩個變量的數(shù)據(jù)。第9-11行從標(biāo)準高斯分布采樣了一些數(shù)據(jù)然后提供給批標(biāo)準化層。第14-15行打印了變化后的running_mean和running_var。第17-24行驗證了如果我們將模型設(shè)置為eval模式,這兩個變量不會發(fā)生任何變化。批標(biāo)準化的使用方法批標(biāo)準化的使用方法批標(biāo)準化的使用方法批標(biāo)準化的使用方法
批標(biāo)準化的使用方法批標(biāo)準化的使用方法小結(jié)感知器模型可以算得上是深度學(xué)習(xí)的基石。最初的單層感知器模型就是為了模擬人腦神經(jīng)元提出的,但是就連異或運算都無法模擬。經(jīng)過多年的研究,人們終于提出了多層感知器模型,用于擬合任意函數(shù)。結(jié)合高效的BP算法,神經(jīng)網(wǎng)絡(luò)終于誕生。盡管目前看來,BP神經(jīng)網(wǎng)絡(luò)已經(jīng)無法勝任許多工作,但是從發(fā)展的角度來看,BP神經(jīng)網(wǎng)絡(luò)仍是學(xué)習(xí)深度學(xué)習(xí)不可不知的重要部分。本章的最后兩節(jié)介紹了常用的訓(xùn)練技巧,這些技巧可以有效地提升模型表現(xiàn),避免過擬合。TheEnd謝謝!卷積神經(jīng)網(wǎng)絡(luò)CNN與計算機視覺(一)導(dǎo)入
計算機視覺是一門研究如何使計算機識別圖片的科學(xué),也是深度學(xué)習(xí)的主要應(yīng)用領(lǐng)域之一。在眾多深度模型中,卷積神經(jīng)網(wǎng)絡(luò)獨領(lǐng)風(fēng)騷,已經(jīng)稱為計算機視覺的主要研究工具之一。本章首先介紹卷積神經(jīng)網(wǎng)絡(luò)的基本知識,而后給出一些常見的卷積神經(jīng)網(wǎng)絡(luò)模型。本章要點卷積神經(jīng)網(wǎng)絡(luò)的基本思想卷積操作池化層卷積神經(jīng)網(wǎng)絡(luò)VGG網(wǎng)絡(luò)InceptionNetResNet用PyTorch進行手寫數(shù)字識別卷積神經(jīng)網(wǎng)絡(luò)的基本思想卷積神經(jīng)網(wǎng)絡(luò)最初由YannLeCun等人在1989年提出,是最初取得成功的深度神經(jīng)網(wǎng)絡(luò)之一。它的基本思想是:局部連接。參數(shù)共享。卷積神經(jīng)網(wǎng)絡(luò)的基本思想
卷積神經(jīng)網(wǎng)絡(luò)的基本思想
卷積神經(jīng)網(wǎng)絡(luò)的基本思想
卷積操作
卷積操作卷積操作
卷積操作
池化層池化(Pooling)的目的是降低特征空間的維度,只抽取局部最顯著的特征,同時這些特征出現(xiàn)的具體位置也被忽略。這樣做是符合直覺的:以圖像處理為例,我們通常關(guān)注的是一個特征是否出現(xiàn),而不太關(guān)心它們出現(xiàn)在哪里;這被稱為圖像的靜態(tài)性。通過池化降低空間維度的做法不但降低了計算開銷,還使得卷積神經(jīng)網(wǎng)絡(luò)對于噪聲具有魯棒性。池化層
卷積神經(jīng)網(wǎng)絡(luò)一般來說,卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)由一個卷積層、一個池化層、一個非線性激活函數(shù)層組成。卷積神經(jīng)網(wǎng)絡(luò)在圖像分類中表現(xiàn)良好的深度神經(jīng)網(wǎng)絡(luò)往往由許多“卷積層+池化層”的組合堆疊而成,通常多達數(shù)十乃至上百層。經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)VGG,InceptionNet,ResNet等CNN網(wǎng)絡(luò)從大規(guī)模圖像數(shù)據(jù)集訓(xùn)練的用于圖像分類的網(wǎng)絡(luò),ImageNet從2010年起每年都舉辦圖像分類的競賽,為了公平起見,它為每位參賽者提供來自于1000個類別的120萬張圖像。在如此巨大的數(shù)據(jù)集中訓(xùn)練出的深度學(xué)習(xí)模型特征具有非常良好的泛化能力,在遷移學(xué)習(xí)后,可以被用于除圖像分類之外的其他任務(wù),比如目標(biāo)檢測,圖像分割。PyTorch的torchvision.models為我們提供了大量的模型實現(xiàn),以及模型的預(yù)訓(xùn)練權(quán)重文件,其中就包括本節(jié)介紹的VGG,ResNet,InceptionNet。經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)VGG網(wǎng)絡(luò)結(jié)構(gòu)經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)InceptionNet網(wǎng)絡(luò)結(jié)構(gòu)經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)ResNet神經(jīng)網(wǎng)絡(luò)越深,對復(fù)雜特征的表示能力就越強。但是單純的提升網(wǎng)絡(luò)的深度會導(dǎo)致在反向傳播算法在傳遞梯度時,發(fā)生梯度消失現(xiàn)象,導(dǎo)致網(wǎng)絡(luò)的訓(xùn)練無效。通過一些權(quán)重初始化方法和BatchNormalization可以解決這一問題,但是,即便使用了這些方法,網(wǎng)絡(luò)在達到一定深度之后,模型訓(xùn)練的準確率不會再提升,甚至?xí)_始下降,這種現(xiàn)象稱為訓(xùn)練準確率的退化(degradation)問題。退化問題表明,深層模型的訓(xùn)練是非常困難的。ResNet提出了殘差學(xué)習(xí)的方法,用于解決深度學(xué)習(xí)模型的退化問題。經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
用PyTorch進行手寫數(shù)字識別torch.utils.data.Datasets是PyTorch用來表示數(shù)據(jù)集的類,在本節(jié)我們使用torchvision.datasets.MNIST構(gòu)建手寫數(shù)字數(shù)據(jù)集。用PyTorch進行手寫數(shù)字識別下面代碼第5行實例化了Datasets對象。第7行,使用了len(mnist),這里調(diào)用了_len_方法,第8行使用了mnist[j],調(diào)用的是_getitem_,在我們自己建立數(shù)據(jù)集時,需要繼承Dataset,并且覆寫_item_和_len_兩個方法。第9-10行繪制了MNIST手寫數(shù)字數(shù)據(jù)集。用PyTorch進行手寫數(shù)字識別代碼段用PyTorch進行手寫數(shù)字識別
用PyTorch進行手寫數(shù)字識別準備好處理好數(shù)據(jù)的流程后,就可以讀取用于訓(xùn)練的數(shù)據(jù)了,torch.utils.data.DataLoader提供了迭代數(shù)據(jù),隨機抽取數(shù)據(jù),批量化數(shù)據(jù),使用multiprocessing并行化讀取數(shù)據(jù)的功能。下面定義了函數(shù)imshow,第2行將數(shù)據(jù)從標(biāo)準化的數(shù)據(jù)中恢復(fù)出來,第3行將Tensor類型轉(zhuǎn)換為ndarray,這樣才可以用matplotlib繪制出來,繪制的結(jié)果如圖所示,第4行將矩陣的維度從(C,W,H)轉(zhuǎn)換為(W,H,C)。用PyTorch進行手寫數(shù)字識別代碼段用PyTorch進行手寫數(shù)字識別在準備好數(shù)據(jù)和模型后,我們就可以訓(xùn)練模型了。下面我們分別定義了數(shù)據(jù)處理和加載流程,模型,優(yōu)化器,損失函數(shù),以及用準確率評估模型能力。模型訓(xùn)練迭代過程的損失圖像如圖所示。用PyTorch進行手寫數(shù)字識別模型訓(xùn)練迭代過程的準確率圖像如圖所示。小結(jié)
本章介紹了卷積神經(jīng)網(wǎng)絡(luò)與計算機視覺的相關(guān)概念。視覺作為人類感受世界的主要途徑之一,其重要性在機器智能方面不言而喻。但是在很長一段時間里,計算機只能通過基本的圖像處理和幾何分析方法觀察世界,這無疑限制了其他領(lǐng)域智能的發(fā)展。卷積神經(jīng)網(wǎng)絡(luò)的出現(xiàn)扭轉(zhuǎn)了這樣的局面。通過卷積和池化等運算,卷積層能夠高效地提取圖像和視頻特征,為后續(xù)任務(wù)提供堅實的基礎(chǔ)。本章實現(xiàn)的手寫數(shù)字識別只是當(dāng)下計算機視覺中最簡單的應(yīng)用之一,更為先進的卷積神經(jīng)網(wǎng)絡(luò)模型甚至能夠在上百萬張圖片中完成分類任務(wù),而且精度超過人類。TheEnd謝謝!神經(jīng)網(wǎng)絡(luò)與自然語言處理(一)導(dǎo)入
隨著梯度反向傳播算法的提出,神經(jīng)網(wǎng)絡(luò)在計算機視覺領(lǐng)域取得了巨大的成功,神經(jīng)網(wǎng)絡(luò)第一次真正地超越傳統(tǒng)方法,成為在學(xué)術(shù)界乃至工業(yè)界實用的模型。
這時在自然語言處理領(lǐng)域,統(tǒng)計方法仍然是主流的方法。由于自然語言處理中所要處理的對象都是離散的符號,自然語言處理與連續(xù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 甲乙丙房屋買賣合同全解讀
- 消防工程招投標(biāo)文書
- 服務(wù)合同協(xié)議權(quán)威解讀
- 童鞋品牌代理經(jīng)銷合同
- 施工安全保證書樣本
- 信用擔(dān)保借款合同的修改注意事項
- 標(biāo)準借款協(xié)議書格式
- 糧油食品供應(yīng)協(xié)議
- 室內(nèi)外照明設(shè)計招標(biāo)
- 批發(fā)兼零售合作勞務(wù)合同
- 2025蛇年七言春聯(lián)帶橫批(60幅)
- 用戶管理模塊
- Unit 1 Making friends Part B Lets learn(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 防火門及防火卷簾施工方案
- 廣東省廣州市越秀區(qū)2022-2023學(xué)年八年級上學(xué)期期末歷史試題(含答案)
- 古代漢語專題-003-國開機考復(fù)習(xí)資料
- 【MOOC】跨文化交際通識通論-揚州大學(xué) 中國大學(xué)慕課MOOC答案
- 學(xué)歷提升之路
- 播音主持專業(yè)教學(xué)計劃
- 《半導(dǎo)體的基本知識》教學(xué)設(shè)計
- GB/T 44787-2024靜電控制參數(shù)實時監(jiān)控系統(tǒng)通用規(guī)范
評論
0/150
提交評論