什么是深度学习
原文鏈接:https://aistudio.baidu.com/aistudio/projectdetail/2052554
什么是深度學(xué)習(xí)?
大家好,歡迎來(lái)到新手入門(mén)課程,在這里我會(huì)帶領(lǐng)大家從一個(gè)完全不懂深度學(xué)習(xí)的小白,通過(guò)學(xué)習(xí)本課程后,能夠了解基本的深度學(xué)習(xí)概念,熟悉必備的數(shù)序基礎(chǔ)知識(shí),學(xué)會(huì)常見(jiàn)的編程工具Python,并掌握實(shí)用的深度學(xué)習(xí)框架PaddlePaddle。可能看到本課程的你并不了解什么是深度學(xué)習(xí),那么就讓我們從第一課開(kāi)始把——什么是深度學(xué)習(xí)?
一、深度學(xué)習(xí)的發(fā)展歷程
1.1 Turing Testing (圖靈測(cè)試)
圖靈測(cè)試是人工智能是否真正能夠成功的一個(gè)標(biāo)準(zhǔn),“計(jì)算機(jī)科學(xué)之父”、“人工智能之父”英國(guó)數(shù)學(xué)家圖靈在1950年的論文《機(jī)器會(huì)思考嗎》中提出了圖靈測(cè)試的概念。即把一個(gè)人和一臺(tái)計(jì)算機(jī)分別放在兩個(gè)隔離的房間中,房間外的一個(gè)人同時(shí)詢(xún)問(wèn)人和計(jì)算機(jī)相同的問(wèn)題,如果房間外的人無(wú)法分別哪個(gè)是人,哪個(gè)是計(jì)算機(jī),就能夠說(shuō)明計(jì)算機(jī)具有人工智能。
1.2 醫(yī)學(xué)上的發(fā)現(xiàn)
1981年的諾貝爾將頒發(fā)給了David Hubel和Torsten Wiesel,以及Roger Sperry。他們發(fā)現(xiàn)了人的視覺(jué)系統(tǒng)處理信息是分級(jí)的。
從視網(wǎng)膜(Retina)出發(fā),經(jīng)過(guò)低級(jí)的V1區(qū)提取邊緣特征,到V2區(qū)的基本形狀或目標(biāo)的局部,再到高層的整個(gè)目標(biāo)(如判定為一張人臉),以及到更高層的PFC(前額葉皮層)進(jìn)行分類(lèi)判斷等。也就是說(shuō)高層的特征是低層特征的組合,從低層到高層的特征表達(dá)越來(lái)越抽象和概念化,也即越來(lái)越能表現(xiàn)語(yǔ)義或者意圖。
邊緣特征 —–> 基本形狀和目標(biāo)的局部特征——>整個(gè)目標(biāo) 這個(gè)過(guò)程其實(shí)和我們的常識(shí)是相吻合的,因?yàn)閺?fù)雜的圖形,往往就是由一些基本結(jié)構(gòu)組合而成的。同時(shí)我們還可以看出:大腦是一個(gè)深度架構(gòu),認(rèn)知過(guò)程也是深度的。
人腦神經(jīng)元示意圖
計(jì)算機(jī)識(shí)別圖像的過(guò)程
1.3 Deep Learning的出現(xiàn)
低層次特征 - - - - (組合) - - ->抽象的高層特征
深度學(xué)習(xí),恰恰就是通過(guò)組合低層特征形成更加抽象的高層特征(或?qū)傩灶?lèi)別)。例如,在計(jì)算機(jī)視覺(jué)領(lǐng)域,深度學(xué)習(xí)算法從原始圖像去學(xué)習(xí)得到一個(gè)低層次表達(dá),例如邊緣檢測(cè)器、小波濾波器等,然后在這些低層次表達(dá)的基礎(chǔ)上,通過(guò)線性或者非線性組合,來(lái)獲得一個(gè)高層次的表達(dá)。此外,不僅圖像存在這個(gè)規(guī)律,聲音也是類(lèi)似的。比如,研究人員從某個(gè)聲音庫(kù)中通過(guò)算法自動(dòng)發(fā)現(xiàn)了20種基本的聲音結(jié)構(gòu),其余的聲音都可以由這20種基本結(jié)構(gòu)來(lái)合成!
二、機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)是實(shí)現(xiàn)人工智能的一種手段,也是目前被認(rèn)為比較有效的實(shí)現(xiàn)人工智能的手段,目前在業(yè)界使用機(jī)器學(xué)習(xí)比較突出的領(lǐng)域很多,例如:計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理、推薦系統(tǒng)等等。大家生活中經(jīng)常用到的比如高速上的ETC的車(chē)牌識(shí)別,今日頭條的新聞推薦,天貓上的評(píng)價(jià)描述。 機(jī)器學(xué)習(xí)是人工智能的一個(gè)分支,而在很多時(shí)候,幾乎成為人工智能的代名詞。簡(jiǎn)單來(lái)說(shuō),機(jī)器學(xué)習(xí)就是通過(guò)算法,使得機(jī)器能從大量歷史數(shù)據(jù)中學(xué)習(xí)規(guī)律,從而對(duì)新的樣本做智能識(shí)別或?qū)ξ磥?lái)做預(yù)測(cè)。
2.1 人工智能vs機(jī)器學(xué)習(xí)
人工智能是計(jì)算機(jī)科學(xué)的一個(gè)分支,研究計(jì)算機(jī)中智能行為的仿真。
每當(dāng)一臺(tái)機(jī)器根據(jù)一組預(yù)先定義的解決問(wèn)題的規(guī)則來(lái)完成任務(wù)時(shí),這種行為就被稱(chēng)為人工智能。
開(kāi)發(fā)人員引入了大量計(jì)算機(jī)需要遵守的規(guī)則。計(jì)算機(jī)內(nèi)部存在一個(gè)可能行為的具體清單,它會(huì)根據(jù)這個(gè)清單做出決定。如今,人工智能是一個(gè)概括性術(shù)語(yǔ),涵蓋了從高級(jí)算法到實(shí)際機(jī)器人的所有內(nèi)容。
我們有四個(gè)不同層次的AI,讓我們來(lái)解釋前兩個(gè):
- 弱人工智能,也被稱(chēng)為狹義人工智能,是一種為特定的任務(wù)而設(shè)計(jì)和訓(xùn)練的人工智能系統(tǒng)。弱人工智能的形式之一是虛擬個(gè)人助理,比如蘋(píng)果公司的Siri。
- 強(qiáng)人工智能,又稱(chēng)人工通用智能,是一種具有人類(lèi)普遍認(rèn)知能力的人工智能系統(tǒng)。當(dāng)計(jì)算機(jī)遇到不熟悉的任務(wù)時(shí),它具有足夠的智能去尋找解決方案。
機(jī)器學(xué)習(xí)是指計(jì)算機(jī)使用大數(shù)據(jù)集而不是硬編碼規(guī)則來(lái)學(xué)習(xí)的能力。
機(jī)器學(xué)習(xí)允許計(jì)算機(jī)自己學(xué)習(xí)。這種學(xué)習(xí)方式利用了現(xiàn)代計(jì)算機(jī)的處理能力,可以輕松地處理大型數(shù)據(jù)集。
基本上,機(jī)器學(xué)習(xí)是人工智能的一個(gè)子集;更為具體地說(shuō),它只是一種實(shí)現(xiàn)AI的技術(shù),一種訓(xùn)練算法的模型,這種算法使得計(jì)算機(jī)能夠?qū)W習(xí)如何做出決策。
從某種意義上來(lái)說(shuō),機(jī)器學(xué)習(xí)程序根據(jù)計(jì)算機(jī)所接觸的數(shù)據(jù)來(lái)進(jìn)行自我調(diào)整。
2.2 監(jiān)督式學(xué)習(xí)vs非監(jiān)督式學(xué)習(xí)
監(jiān)督式學(xué)習(xí)需要使用有輸入和預(yù)期輸出標(biāo)記的數(shù)據(jù)集。
當(dāng)你使用監(jiān)督式學(xué)習(xí)訓(xùn)練人工智能時(shí),你需要提供一個(gè)輸入并告訴它預(yù)期的輸出結(jié)果。
如果人工智能產(chǎn)生的輸出結(jié)果是錯(cuò)誤的,它將重新調(diào)整自己的計(jì)算。這個(gè)過(guò)程將在數(shù)據(jù)集上不斷迭代地完成,直到AI不再出錯(cuò)。
監(jiān)督式學(xué)習(xí)的一個(gè)例子是天氣預(yù)報(bào)人工智能。它學(xué)會(huì)利用歷史數(shù)據(jù)來(lái)預(yù)測(cè)天氣。訓(xùn)練數(shù)據(jù)包含輸入(過(guò)去天氣的壓力、濕度、風(fēng)速)和輸出(過(guò)去天氣的溫度)。
我們還可以想象您正在提供一個(gè)帶有標(biāo)記數(shù)據(jù)的計(jì)算機(jī)程序。例如,如果指定的任務(wù)是使用一種圖像分類(lèi)算法對(duì)男孩和女孩的圖像進(jìn)行分類(lèi),那么男孩的圖像需要帶有“男孩”標(biāo)簽,女孩的圖像需要帶有“女孩”標(biāo)簽。這些數(shù)據(jù)被認(rèn)為是一個(gè)“訓(xùn)練”數(shù)據(jù)集,直到程序能夠以可接受的速率成功地對(duì)圖像進(jìn)行分類(lèi),以上的標(biāo)簽才會(huì)失去作用。
它之所以被稱(chēng)為監(jiān)督式學(xué)習(xí),是因?yàn)樗惴◤挠?xùn)練數(shù)據(jù)集學(xué)習(xí)的過(guò)程就像是一位老師正在監(jiān)督學(xué)習(xí)。在我們預(yù)先知道正確的分類(lèi)答案的情況下,算法對(duì)訓(xùn)練數(shù)據(jù)不斷進(jìn)行迭代預(yù)測(cè),然后預(yù)測(cè)結(jié)果由“老師”進(jìn)行不斷修正。當(dāng)算法達(dá)到可接受的性能水平時(shí),學(xué)習(xí)過(guò)程才會(huì)停止。
非監(jiān)督式學(xué)習(xí)是利用既不分類(lèi)也不標(biāo)記的信息進(jìn)行機(jī)器學(xué)習(xí),并允許算法在沒(méi)有指導(dǎo)的情況下對(duì)這些信息進(jìn)行操作。
當(dāng)你使用非監(jiān)督式學(xué)習(xí)訓(xùn)練人工智能時(shí),你可以讓人工智能對(duì)數(shù)據(jù)進(jìn)行邏輯分類(lèi)。這里機(jī)器的任務(wù)是根據(jù)相似性、模式和差異性對(duì)未排序的信息進(jìn)行分組,而不需要事先對(duì)數(shù)據(jù)進(jìn)行處理。
非監(jiān)督式學(xué)習(xí)的一個(gè)例子是亞馬遜等電子商務(wù)網(wǎng)站的行為預(yù)測(cè)AI。
它將創(chuàng)建自己輸入數(shù)據(jù)的分類(lèi),幫助亞馬遜識(shí)別哪種用戶(hù)最有可能購(gòu)買(mǎi)不同的產(chǎn)品(交叉銷(xiāo)售策略)。 另一個(gè)例子是,程序可以任意地使用以下兩種算法中的一種來(lái)完成男孩女孩的圖像分類(lèi)任務(wù)。一種算法被稱(chēng)為“聚類(lèi)”,它根據(jù)諸如頭發(fā)長(zhǎng)度、下巴大小、眼睛位置等特征將相似的對(duì)象分到同一個(gè)組。另一種算法被稱(chēng)為“相關(guān)”,它根據(jù)自己發(fā)現(xiàn)的相似性創(chuàng)建if/then規(guī)則。換句話(huà)說(shuō),它確定了圖像之間的公共模式,并相應(yīng)地對(duì)它們進(jìn)行分類(lèi)。
三、深度學(xué)習(xí)如何工作
什么是深度學(xué)習(xí),以及它是如何工作的。
深度學(xué)習(xí)是一種機(jī)器學(xué)習(xí)方法 , 它允許我們訓(xùn)練人工智能來(lái)預(yù)測(cè)輸出,給定一組輸入(指?jìng)魅牖騻鞒鲇?jì)算機(jī)的信息)。監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)都可以用來(lái)訓(xùn)練人工智能。
Andrew Ng:“與深度學(xué)習(xí)類(lèi)似的是,火箭發(fā)動(dòng)機(jī)是深度學(xué)習(xí)模型,燃料是我們可以提供給這些算法的海量數(shù)據(jù)。”
我們將通過(guò)建立一個(gè)公交票價(jià)估算在線服務(wù)來(lái)了解深度學(xué)習(xí)是如何工作的。為了訓(xùn)練它,我們將使用監(jiān)督學(xué)習(xí)方法。
我們希望我們的巴士票價(jià)估價(jià)師使用以下信息/輸入來(lái)預(yù)測(cè)價(jià)格:
3.1 神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是一組粗略模仿人類(lèi)大腦,用于模式識(shí)別的算法。神經(jīng)網(wǎng)絡(luò)這個(gè)術(shù)語(yǔ)來(lái)源于這些系統(tǒng)架構(gòu)設(shè)計(jì)背后的靈感,這些系統(tǒng)是用于模擬生物大腦自身神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu),以便計(jì)算機(jī)能夠執(zhí)行特定的任務(wù)。
和人類(lèi)一樣, “AI價(jià)格評(píng)估”也是由神經(jīng)元(圓圈)組成的。此外,這些神經(jīng)元還是相互連接的。
神經(jīng)元分為三種不同類(lèi)型的層次:
-
輸入層接收輸入數(shù)據(jù)。在我們的例子中,輸入層有四個(gè)神經(jīng)元:出發(fā)站、目的地站、出發(fā)日期和巴士公司。輸入層會(huì)將輸入數(shù)據(jù)傳遞給第一個(gè)隱藏層。
-
隱藏層對(duì)輸入數(shù)據(jù)進(jìn)行數(shù)學(xué)計(jì)算。創(chuàng)建神經(jīng)網(wǎng)絡(luò)的挑戰(zhàn)之一是決定隱藏層的數(shù)量,以及每一層中的神經(jīng)元的數(shù)量。
-
人工神經(jīng)網(wǎng)絡(luò)的輸出層是神經(jīng)元的最后一層,主要作用是為此程序產(chǎn)生給定的輸出,在本例中輸出結(jié)果是預(yù)測(cè)的價(jià)格值。
神經(jīng)元之間的每個(gè)連接都有一個(gè)權(quán)重。這個(gè)權(quán)重表示輸入值的重要性。模型所做的就是學(xué)習(xí)每個(gè)元素對(duì)價(jià)格的貢獻(xiàn)有多少。這些“貢獻(xiàn)”是模型中的權(quán)重。一個(gè)特征的權(quán)重越高,說(shuō)明該特征比其他特征更為重要。
在預(yù)測(cè)公交票價(jià)時(shí),出發(fā)日期是影響最終票價(jià)的最為重要的因素之一。因此,出發(fā)日期的神經(jīng)元連接具有較大的“權(quán)重”。
每個(gè)神經(jīng)元都有一個(gè)激活函數(shù)。它主要是一個(gè)根據(jù)輸入傳遞輸出的函數(shù)。 當(dāng)一組輸入數(shù)據(jù)通過(guò)神經(jīng)網(wǎng)絡(luò)中的所有層時(shí),最終通過(guò)輸出層返回輸出數(shù)據(jù)。
3.2 通過(guò)訓(xùn)練改進(jìn)神經(jīng)網(wǎng)絡(luò)
為了提高“AI價(jià)格評(píng)估”的精度,我們需要將其預(yù)測(cè)結(jié)果與過(guò)去的結(jié)果進(jìn)行比較,為此,我們需要兩個(gè)要素:
- 大量的計(jì)算能力;
- 大量的數(shù)據(jù)。
訓(xùn)練AI的過(guò)程中,重要的是給它的輸入數(shù)據(jù)集(一個(gè)數(shù)據(jù)集是一個(gè)單獨(dú)地或組合地或作為一個(gè)整體被訪問(wèn)的數(shù)據(jù)集合),此外還需要對(duì)其輸出結(jié)果與數(shù)據(jù)集中的輸出結(jié)果進(jìn)行對(duì)比。因?yàn)锳I一直是“新的”,它的輸出結(jié)果有可能是錯(cuò)誤的。
對(duì)于我們的公交票價(jià)模型,我們必須找到過(guò)去票價(jià)的歷史數(shù)據(jù)。由于有大量“公交車(chē)站”和“出發(fā)日期”的可能組合,因而我們需要一個(gè)非常大的票價(jià)清單。
一旦我們遍歷了整個(gè)數(shù)據(jù)集,就有可能創(chuàng)建一個(gè)函數(shù)來(lái)衡量AI輸出與實(shí)際輸出(歷史數(shù)據(jù))之間的差異。這個(gè)函數(shù)叫做成本函數(shù)。即成本函數(shù)是一個(gè)衡量模型準(zhǔn)確率的指標(biāo),衡量依據(jù)為此模型估計(jì)X與Y間關(guān)系的能力。
模型訓(xùn)練的目標(biāo)是使成本函數(shù)等于零,即當(dāng)AI的輸出結(jié)果與數(shù)據(jù)集的輸出結(jié)果一致時(shí)(成本函數(shù)等于0)。
3.3 我們?nèi)绾谓档统杀竞瘮?shù)呢?
通過(guò)使用一種叫做梯度下降的方法。梯度衡量得是,如果你稍微改變一下輸入值,函數(shù)的輸出值會(huì)發(fā)生多大的變化。
梯度下降法是一種求函數(shù)最小值的方法。在這種情況下,目標(biāo)是取得成本函數(shù)的最小值。 它通過(guò)每次數(shù)據(jù)集迭代之后優(yōu)化模型的權(quán)重來(lái)訓(xùn)練模型。通過(guò)計(jì)算某一權(quán)重集下代價(jià)函數(shù)的梯度,可以看出最小值的梯度方向。
為了降低成本函數(shù)值,多次遍歷數(shù)據(jù)集非常重要。這就是為什么需要大量計(jì)算能力的原因。 一旦我們通過(guò)訓(xùn)練改進(jìn)了AI,我們就可以利用它根據(jù)上述四個(gè)要素來(lái)預(yù)測(cè)未來(lái)的價(jià)格。
四、看看第一個(gè)例子吧!
4.1 初識(shí)神經(jīng)網(wǎng)絡(luò)
我們來(lái)看一個(gè)具體的神經(jīng)網(wǎng)絡(luò)示例,使用 PaddlePaddle來(lái)學(xué)習(xí)手寫(xiě)數(shù)字分類(lèi)。如果你沒(méi)用過(guò)PaddlePaddle或類(lèi)似的庫(kù),可能無(wú)法立刻搞懂這個(gè)例子中的全部?jī)?nèi)容。甚至你可能還沒(méi)有安裝PaddlePaddle, 沒(méi)關(guān)系,第四課會(huì)教大家如何安裝PaddlePaddle,學(xué)會(huì)基本的命令和操作。因此,如果其中某些步驟看起來(lái)不太明白也不要擔(dān)心。下面我們要開(kāi)始了。
我們這里要解決的問(wèn)題是,將手寫(xiě)數(shù)字的灰度圖像(28 像素×28 像素)劃分到 10 個(gè)類(lèi)別 中(0~9)。我們將使用 MNIST 數(shù)據(jù)集,它是機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)經(jīng)典數(shù)據(jù)集,其歷史幾乎和這 個(gè)領(lǐng)域一樣長(zhǎng),而且已被人們深入研究。這個(gè)數(shù)據(jù)集包含 60 000 張訓(xùn)練圖像和 10 000 張測(cè)試圖 像,由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(National Institute of Standards and Technology,即 MNIST 中 的 NIST)在 20 世紀(jì) 80 年代收集得到。你可以將“解決”MNIST 問(wèn)題看作深度學(xué)習(xí)的“Hello World”,正是用它來(lái)驗(yàn)證你的算法是否按預(yù)期運(yùn)行。當(dāng)你成為機(jī)器學(xué)習(xí)從業(yè)者后,會(huì)發(fā)現(xiàn) MNIST 一次又一次地出現(xiàn)在科學(xué)論文、博客文章等中。
Step1:準(zhǔn)備數(shù)據(jù)
1.MINIST數(shù)據(jù)集包含60000個(gè)訓(xùn)練集和10000測(cè)試數(shù)據(jù)集。分為圖片和標(biāo)簽,圖片是28*28的像素矩陣,標(biāo)簽為0~9共10個(gè)數(shù)字。
2.使用飛槳內(nèi)置數(shù)據(jù)集 paddle.vision,datasets.MNIST 定義MNIST數(shù)據(jù)集的 train_dataset 和 test_dataset。
3.使用 Normalize 接口對(duì)圖片進(jìn)行歸一化。
In [10]import paddle from paddle.vision.transforms import Normalizetransform = Normalize(mean=[127.5],
std=[127.5],
data_format=‘CHW’)
# 使用transform對(duì)數(shù)據(jù)集做歸一化
print(‘download training data and load training data’)
train_dataset = paddle.vision.datasets.MNIST(mode=‘train’, transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode=‘test’, transform=transform)
print(‘load finished’)
load finished
取一條數(shù)據(jù),觀察一下mnist數(shù)據(jù)集
In [11]import numpy as np import matplotlib.pyplot as plt train_data0, train_label_0 = train_dataset[0][0],train_dataset[0][1] train_data0 = train_data0.reshape([28,28]) plt.figure(figsize=(2,2)) plt.imshow(train_data0, cmap=plt.cm.binary) print('train_data0 label is: ' + str(train_label_0))train_data0 label is: [5] <Figure size 144x144 with 1 Axes>Step2: 配置網(wǎng)絡(luò)
以下的代碼判斷就是定義一個(gè)簡(jiǎn)單的多層感知器,一共有三層,兩個(gè)大小為100的隱層和一個(gè)大小為10的輸出層,因?yàn)镸NIST數(shù)據(jù)集是手寫(xiě)0到9的灰度圖像,類(lèi)別有10個(gè),所以最后的輸出大小是10。最后輸出層的激活函數(shù)是Softmax,所以最后的輸出層相當(dāng)于一個(gè)分類(lèi)器。加上一個(gè)輸入層的話(huà),多層感知器的結(jié)構(gòu)是:輸入層-->>隱層-->>隱層-->>輸出層。
In [12]# 定義多層感知機(jī) class MultilayerPerceptron(paddle.nn.Layer):def __init__(self, in_features):super(MultilayerPerceptron, self).__init__()# 形狀變換,將數(shù)據(jù)形狀從 [] 變?yōu)?[]self.flatten = paddle.nn.Flatten()# 第一個(gè)全連接層self.linear1 = paddle.nn.Linear(in_features=in_features, out_features=100)# 使用ReLU激活函數(shù)self.act1 = paddle.nn.ReLU()# 第二個(gè)全連接層self.linear2 = paddle.nn.Linear(in_features=100, out_features=100)# 使用ReLU激活函數(shù)self.act2 = paddle.nn.ReLU()# 第三個(gè)全連接層self.linear3 = paddle.nn.Linear(in_features=100, out_features=10) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span>(<span class="hljs-params">self, x</span>):</span><span class="hljs-comment"># x = x.reshape((-1, 1, 28, 28))</span>x = self.flatten(x)x = self.linear1(x)x = self.act1(x)x = self.linear2(x)x = self.act2(x)x = self.linear3(x)<span class="hljs-keyword">return</span> x</code></pre></div></div><div class="ai-np-code"><div class="ai-np-code-in">In [13]</div><div class="ai-np-code-main"><pre><code class="hljs"><span class="hljs-comment"># 使用 paddle.Model 封裝 MultilayerPerceptron</span>model = paddle.Model(MultilayerPerceptron(in_features=784))
# 使用 summary 打印模型結(jié)構(gòu)
model.summary((-1, 1, 28, 28))---------------------------------------------------------------------------
Layer (type) Input Shape Output Shape Param #
Flatten-24693 [[1, 1, 28, 28]] [1, 784] 0
Linear-4 [[1, 784]] [1, 100] 78,500
ReLU-3 [[1, 100]] [1, 100] 0
Linear-5 [[1, 100]] [1, 100] 10,100
ReLU-4 [[1, 100]] [1, 100] 0
Linear-6 [[1, 100]] [1, 10] 1,010
Total params: 89,610
Trainable params: 89,610
Non-trainable params: 0
Input size (MB): 0.00
Forward/backward pass size (MB): 0.01
Params size (MB): 0.34
Estimated Total Size (MB): 0.35
{‘total_params’: 89610, ‘trainable_params’: 89610}
接著是配置模型,在這一步,我們需要指定模型訓(xùn)練時(shí)所使用的優(yōu)化算法與損失函數(shù),此外,這里我們也可以定義計(jì)算精度相關(guān)的API。
In [14]# 配置模型 model.prepare(paddle.optimizer.Adam(parameters=model.parameters()), # 使用Adam算法進(jìn)行優(yōu)化paddle.nn.CrossEntropyLoss(), # 使用CrossEntropyLoss 計(jì)算損失paddle.metric.Accuracy()) # 使用Accuracy 計(jì)算精度Step3:模型訓(xùn)練
使用飛槳高層API,可以很快的完成模型訓(xùn)練的部分,只需要在 prepare 配置好模型訓(xùn)練的相關(guān)算法后,調(diào)用 fit 接口,指定訓(xùn)練的數(shù)據(jù)集,訓(xùn)練的輪數(shù)以及數(shù)據(jù)的batch_size,就可以完成模型的訓(xùn)練。
In [15]# 開(kāi)始模型訓(xùn)練 model.fit(train_dataset, # 設(shè)置訓(xùn)練數(shù)據(jù)集epochs=5, # 設(shè)置訓(xùn)練輪數(shù)batch_size=64, # 設(shè)置 batch_sizeverbose=1) # 設(shè)置日志打印格式The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/5 step 938/938 [==============================] - loss: 0.3319 - acc: 0.8988 - 9ms/step Epoch 2/5 step 938/938 [==============================] - loss: 0.1907 - acc: 0.9509 - 10ms/step Epoch 3/5 step 938/938 [==============================] - loss: 0.0539 - acc: 0.9640 - 10ms/step Epoch 4/5 step 938/938 [==============================] - loss: 0.0094 - acc: 0.9673 - 9ms/step Epoch 5/5 step 938/938 [==============================] - loss: 0.3041 - acc: 0.9721 - 9ms/stepSTEP4: 模型評(píng)估
使用飛槳高層API完成模型評(píng)估也非常的簡(jiǎn)單,只需要調(diào)用 evaluate 接口并傳入驗(yàn)證集即可。這里我們使用測(cè)試集作為驗(yàn)證集。
In [16]model.evaluate(test_dataset, verbose=1)Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. step 10000/10000 [==============================] - loss: 1.5974e-05 - acc: 0.9639 - 1ms/step Eval samples: 10000 {'loss': [1.5974172e-05], 'acc': 0.9639}Step5:模型預(yù)測(cè)
使用飛槳高層API完成模型預(yù)測(cè)也非常的簡(jiǎn)單,只需要調(diào)用 predict 接口并傳入測(cè)試集即可。
In [17]results = model.predict(test_dataset)Predict begin... step 10000/10000 [==============================] - 1ms/step Predict samples: 10000 In [18]# 獲取概率最大的label lab = np.argsort(results) #argsort函數(shù)返回的是result數(shù)組值從小到大的索引值 # print(lab) print("該圖片的預(yù)測(cè)結(jié)果的label為: %d" % lab[0][0][-1][0]) #-1代表讀取數(shù)組中倒數(shù)第一列 該圖片的預(yù)測(cè)結(jié)果的label為: 6五、總結(jié)
到這里是不是覺(jué)得深度學(xué)習(xí)非常神奇呢?它具體是怎么實(shí)現(xiàn)的呢?背后有什么數(shù)學(xué)原理?在了解數(shù)學(xué)原理之前,先學(xué)習(xí)一下深度學(xué)習(xí)中常見(jiàn)的數(shù)學(xué)知識(shí),第二節(jié)課就會(huì)帶領(lǐng)大家學(xué)習(xí)必備的數(shù)學(xué)知識(shí)~
請(qǐng)選擇需要預(yù)覽的文件總結(jié)
- 上一篇: 机器学习算法GBDT的面试总结
- 下一篇: python实现批量图片/文件重命名