《機(jī)器學(xué)習(xí)-Python實(shí)戰(zhàn)(微課版)》課件 第十二章 神經(jīng)網(wǎng)絡(luò)_第1頁(yè)
《機(jī)器學(xué)習(xí)-Python實(shí)戰(zhàn)(微課版)》課件 第十二章 神經(jīng)網(wǎng)絡(luò)_第2頁(yè)
《機(jī)器學(xué)習(xí)-Python實(shí)戰(zhàn)(微課版)》課件 第十二章 神經(jīng)網(wǎng)絡(luò)_第3頁(yè)
《機(jī)器學(xué)習(xí)-Python實(shí)戰(zhàn)(微課版)》課件 第十二章 神經(jīng)網(wǎng)絡(luò)_第4頁(yè)
《機(jī)器學(xué)習(xí)-Python實(shí)戰(zhàn)(微課版)》課件 第十二章 神經(jīng)網(wǎng)絡(luò)_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十二章:神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)目標(biāo)通過(guò)本章的學(xué)習(xí),你將能夠:掌握神經(jīng)網(wǎng)絡(luò)算法的基本概念;掌握主要神經(jīng)網(wǎng)絡(luò)算法模型;掌握數(shù)字?jǐn)?shù)據(jù)的神經(jīng)網(wǎng)絡(luò)評(píng)價(jià)與預(yù)測(cè)。

1.神經(jīng)網(wǎng)絡(luò)入門2.

神經(jīng)網(wǎng)絡(luò)基本理論3.

BP神經(jīng)網(wǎng)絡(luò)算法4.神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)5.從人工神經(jīng)網(wǎng)絡(luò)到深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)(1)從人類神經(jīng)元到神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)(2)目前,關(guān)于神經(jīng)網(wǎng)絡(luò)的定義尚不統(tǒng)一,按美國(guó)神經(jīng)網(wǎng)絡(luò)學(xué)家HechtNielsen的觀點(diǎn),神經(jīng)網(wǎng)絡(luò)的定義是:“神經(jīng)網(wǎng)絡(luò)是由多個(gè)非常簡(jiǎn)單的處理單元彼此按某種方式相互連接而形成的計(jì)算機(jī)系統(tǒng),該系統(tǒng)靠其狀態(tài)對(duì)外部輸入信息的動(dòng)態(tài)響應(yīng)來(lái)處理信息”。綜合神經(jīng)網(wǎng)絡(luò)的來(lái)源、特點(diǎn)和各種解釋,它可簡(jiǎn)單地表述為:人工神經(jīng)網(wǎng)絡(luò)是一種旨在模仿人腦結(jié)構(gòu)及其功能的信息處理系統(tǒng)。人工神經(jīng)網(wǎng)絡(luò)(簡(jiǎn)稱神經(jīng)網(wǎng)絡(luò)):是由人工神經(jīng)元互連組成的網(wǎng)絡(luò),它是從微觀結(jié)構(gòu)和功能上對(duì)人腦的抽象、簡(jiǎn)化,是模擬人類智能的一條重要途徑,反映了人腦功能的若干基本特征,如并行信息處理、學(xué)習(xí)、聯(lián)想、模式分類、記憶等。神經(jīng)網(wǎng)絡(luò)入門(1)

輸入可以類比為神經(jīng)元的樹(shù)突,而輸出可以類比為神經(jīng)元的軸突,計(jì)算則可以類比為細(xì)胞核。包含有3個(gè)輸入,1個(gè)輸出,以及2個(gè)計(jì)算功能,中間的箭頭線這些線稱為“連接”每,個(gè)上有一個(gè)“權(quán)值”。神經(jīng)網(wǎng)絡(luò)入門(2)

感知器模型,在原來(lái)MP模型的“輸入”位置添加神經(jīng)元節(jié)點(diǎn),標(biāo)志其為“輸入單元”。其余不變,我們將權(quán)值w1,w2,w3寫(xiě)到“連接線”的中間。神經(jīng)網(wǎng)絡(luò)入門(3)輸入層里的輸入單元只負(fù)責(zé)傳輸數(shù)據(jù),不做計(jì)算;輸出層里的輸出單元?jiǎng)t需要對(duì)前面一層的輸入進(jìn)行計(jì)算。把需要計(jì)算的層次稱之為計(jì)算層,并把擁有一個(gè)計(jì)算層的網(wǎng)絡(luò)稱之為單層神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)入門(4)假如我們要預(yù)測(cè)的目標(biāo)不再是一個(gè)值,而是一個(gè)向量,例如[2,3]。那么可以在輸出層再增加一個(gè)輸出單元。神經(jīng)網(wǎng)絡(luò)入門(5)可以看到,z1的計(jì)算跟原先的z并沒(méi)有區(qū)別,我們已知一個(gè)神經(jīng)元的輸出可以向多個(gè)神經(jīng)元傳遞,因此z2的計(jì)算公式如圖所示:神經(jīng)網(wǎng)絡(luò)入門(6)可以看到,z2的計(jì)算中除了三個(gè)新的權(quán)值:w4,w5,w6以外,其他與z1是一樣的。整個(gè)網(wǎng)絡(luò)的輸出如圖所示。神經(jīng)網(wǎng)絡(luò)入門(7)W1,2代表后一層的第1個(gè)神經(jīng)元與前一層的第2個(gè)神經(jīng)元的連接的權(quán)值。根據(jù)以上方法標(biāo)記,如圖所示:神經(jīng)網(wǎng)絡(luò)入門(8)上面的決策過(guò)程,使用數(shù)學(xué)表達(dá)如下:1.神經(jīng)網(wǎng)絡(luò)入門2.

神經(jīng)網(wǎng)絡(luò)基本理論3.

BP神經(jīng)網(wǎng)絡(luò)算法4.神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)5.從人工神經(jīng)網(wǎng)絡(luò)到深度學(xué)習(xí)激活函數(shù)

激活函數(shù)(Activationfunctions)對(duì)于神經(jīng)網(wǎng)絡(luò)模型去學(xué)習(xí)、理解非常復(fù)雜和非線性的函數(shù)來(lái)說(shuō)具有十分重要的作用,激活函數(shù)的存在將非線性特性引入到我們的網(wǎng)絡(luò)中。如果我們不運(yùn)用激活函數(shù),則輸出信號(hào)將僅僅是一個(gè)簡(jiǎn)單的線性函數(shù)。線性函數(shù)的復(fù)雜性有限,從數(shù)據(jù)中學(xué)習(xí)復(fù)雜函數(shù)映射的能力更小。Sigmoid函數(shù)tanh函數(shù)sigmoid函數(shù)和tanh函數(shù)都存在一個(gè)問(wèn)題:當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)增多的時(shí)候,由于在進(jìn)行反向傳播的時(shí)候,鏈?zhǔn)角髮?dǎo),多項(xiàng)相乘,函數(shù)進(jìn)入飽和區(qū)(導(dǎo)數(shù)接近于零的地方)就會(huì)逐層傳遞,這種現(xiàn)象被稱為梯度消失。RectifiedLinearUnit(ReLU)函數(shù)

映射區(qū)間:[0,+∞),雖然ReLU函數(shù)大于零的部分和小于零的部分分別都是線性函數(shù),但是整體并不是線性函數(shù),所以仍然可以做為激活函數(shù),ReLU函數(shù)其實(shí)是分段線性函數(shù),把所有的負(fù)值都變?yōu)?,而正值不變,這種操作被成為單側(cè)抑制。ReLU函數(shù)優(yōu)點(diǎn)

大腦方面的研究表明生物神經(jīng)元的信息編碼通常是比較分散及稀疏的。通常情況下,大腦中在同一時(shí)間大概只有1%-4%的神經(jīng)元處于活躍狀態(tài)。使用線性修正以及正則化(regularization)可以對(duì)機(jī)器神經(jīng)網(wǎng)絡(luò)中神經(jīng)元的活躍度(即輸出為正值)進(jìn)行調(diào)試;相比之下,邏輯函數(shù)在輸入為0時(shí)達(dá)到1/2,即已經(jīng)是半飽和的穩(wěn)定狀態(tài),不夠符合實(shí)際生物學(xué)對(duì)模擬神經(jīng)網(wǎng)絡(luò)的期望。不過(guò)需要指出的是,一般情況下,在一個(gè)使用修正線性單元(即線性整流)的神經(jīng)網(wǎng)絡(luò)中大概有50%的神經(jīng)元處于激活態(tài);Softmax函數(shù)Softmax函數(shù)體:Softmax函數(shù)的功能就是將一個(gè)K維的任意實(shí)數(shù)向量映射成另一個(gè)K維的實(shí)數(shù)向量,其中向量中的每個(gè)元素取值都介于(0,1)之間。新的向量所有維度模長(zhǎng)之和為1。Softmax函數(shù)經(jīng)常用作多分類任務(wù)的輸出層。梯度下降與損失函數(shù)損失函數(shù)的極值深度學(xué)習(xí)中常用的損失函數(shù)二次代價(jià)函數(shù):交叉熵代價(jià)函數(shù):交叉熵誤差刻畫(huà)了兩個(gè)概率分布之間的距離,是分類問(wèn)題中使用較多的一種損失函數(shù)。一般二次代價(jià)函數(shù)更多得用于回歸問(wèn)題,而交叉熵誤差更多的用于分類問(wèn)題。全局梯度下降算法(BGD)隨機(jī)梯度下降算法(SGD)小批量梯度下降(MBGD)梯度下降與損失函數(shù)更加有效率的梯度下降以及反向傳播:避免了梯度爆炸和梯度消失問(wèn)題;簡(jiǎn)化計(jì)算過(guò)程:沒(méi)有了其他復(fù)雜激活函數(shù)中諸如指數(shù)函數(shù)的影響;同時(shí)活躍度的分散性使得神經(jīng)網(wǎng)絡(luò)整體計(jì)算成本下降。因?yàn)榫€性模型的表達(dá)能力不夠,引入激活函數(shù)是為了添加非線性因素;然后發(fā)展出了很多的激活函數(shù)適用于各種模型的訓(xùn)練;RELU函數(shù)的引入給神經(jīng)網(wǎng)絡(luò)增加了生物學(xué)特性,可以稱為靈魂激活函數(shù)。全連接網(wǎng)絡(luò)(Fully-ConnectedNetwork)簡(jiǎn)寫(xiě)為FCN,但很容易和全卷積網(wǎng)絡(luò)(Fully-ConvolutionalNetwork)的簡(jiǎn)寫(xiě)搞混,要注意,結(jié)構(gòu)如圖所示:神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)-全連接網(wǎng)絡(luò)(1)

神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)-全連接網(wǎng)絡(luò)(2)

如果增加hiddenlayer的層數(shù),就能使它成為深度全連接神經(jīng)網(wǎng)絡(luò):每相鄰兩層之間,每個(gè)神經(jīng)元的輸入都是將前一層的輸出按照連邊的權(quán)值加權(quán)求和。輸入層往往是例外,輸入層各神經(jīng)元是直接將輸入作為神經(jīng)元的輸出。神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)-卷積神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)

用卷積、池化操作代替加權(quán)求和,是卷積神經(jīng)網(wǎng)絡(luò)對(duì)全連接網(wǎng)絡(luò)的一個(gè)改進(jìn)。由于權(quán)值共享,降低了參數(shù)數(shù)量,縮小了解空間,有利于提取泛化特征,有效緩解了過(guò)擬合。神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)-循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork,RNN)它不僅有層間連接,還有層內(nèi)連接。而這個(gè)層內(nèi)連接的權(quán)值也是共享的,用于提取序列信息,有一定的記憶功能。在自然語(yǔ)言處理等領(lǐng)域有應(yīng)用。神經(jīng)網(wǎng)絡(luò)的主要類型-前饋神經(jīng)網(wǎng)絡(luò)

前饋神經(jīng)網(wǎng)絡(luò)是指神經(jīng)元分層排列,分別組成輸入層、中間層和輸出層。每一層的神經(jīng)元只接受來(lái)自前一層神經(jīng)元的輸入,后面的層對(duì)前面層沒(méi)有信號(hào)反饋。輸入模式經(jīng)過(guò)各層的順序傳播,最后在輸出層上得到輸出。這類網(wǎng)絡(luò)結(jié)構(gòu)通常適于預(yù)測(cè)、模式識(shí)別及非線性函數(shù)逼近,一般典型的前向神經(jīng)網(wǎng)絡(luò)基于梯度算法的神經(jīng)網(wǎng)絡(luò)如BP網(wǎng)絡(luò),最優(yōu)正則化方法如SVM,徑向基神經(jīng)網(wǎng)絡(luò)和極限學(xué)習(xí)機(jī)神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)的主要類型-反饋網(wǎng)絡(luò)

反饋網(wǎng)絡(luò),又稱回歸網(wǎng)絡(luò),輸入信號(hào)決定反饋系統(tǒng)的初始狀態(tài),系統(tǒng)經(jīng)過(guò)一系列狀態(tài)轉(zhuǎn)移后逐漸收斂于平衡狀態(tài),因此,穩(wěn)定性是反饋網(wǎng)絡(luò)最重要的指標(biāo)之一,比較典型的是感知器網(wǎng)絡(luò)、Hopfield神經(jīng)網(wǎng)絡(luò)、海明祌經(jīng)網(wǎng)絡(luò)、小波神經(jīng)網(wǎng)絡(luò)雙向聯(lián)系存儲(chǔ)網(wǎng)絡(luò)(BAM)、波耳茲曼機(jī)。自組織神經(jīng)網(wǎng)絡(luò)是無(wú)教師學(xué)習(xí)網(wǎng)絡(luò),它模擬人腦行為,根據(jù)過(guò)去經(jīng)驗(yàn)自動(dòng)適應(yīng)無(wú)法預(yù)測(cè)的環(huán)境變化,由于無(wú)教師信號(hào),這類網(wǎng)絡(luò)通常采用競(jìng)爭(zhēng)原則進(jìn)行網(wǎng)絡(luò)學(xué)習(xí)。神經(jīng)網(wǎng)絡(luò)的特點(diǎn)(1)人工神經(jīng)網(wǎng)絡(luò)特點(diǎn):(1)人工神經(jīng)網(wǎng)絡(luò)(ANN)為廣泛連接的巨型系統(tǒng)。神經(jīng)科學(xué)研究表明,人類中樞神經(jīng)的主要部分大腦皮層由數(shù)百億個(gè)神經(jīng)元組成,每個(gè)神經(jīng)元共有若干個(gè)突觸,突觸為神經(jīng)元之間的結(jié)合部,決定神經(jīng)元之間的連接強(qiáng)度與性質(zhì)。這表明大腦皮層是一個(gè)廣泛連接的巨型復(fù)雜系統(tǒng),ANN的連接機(jī)制模仿了人腦的這一特性。(2)人工神經(jīng)網(wǎng)絡(luò)(ANN)有其并行結(jié)構(gòu)和并行處理機(jī)制。ANN不但結(jié)構(gòu)上是并行的,它的處理順序也是并行的和同時(shí)的。在同一層內(nèi)處理單元都是同時(shí)操作的,即神經(jīng)網(wǎng)絡(luò)的計(jì)算功能分布在多個(gè)處理單元上。神經(jīng)網(wǎng)絡(luò)的特點(diǎn)(2)(3)人工神經(jīng)網(wǎng)絡(luò)(ANN)的分布式結(jié)構(gòu)使其具有和人腦一樣的容錯(cuò)性和聯(lián)想能力。大腦具有很強(qiáng)的容錯(cuò)能力。我們知道,每天都有大腦細(xì)胞死去,但并沒(méi)有影響人們的記憶和思考能力。這正是因?yàn)榇竽X對(duì)信息的存儲(chǔ)是通過(guò)改變突觸的功能實(shí)現(xiàn)的,信息存儲(chǔ)于神經(jīng)元連接強(qiáng)度的分布上,存儲(chǔ)區(qū)和操作區(qū)合二為一,不同信息之間自然溝通,其處理也為大規(guī)模連續(xù)時(shí)間模式。而存儲(chǔ)知識(shí)的獲得采用“聯(lián)想”的辦法。這類似人類和動(dòng)物的聯(lián)想記憶,當(dāng)一個(gè)神經(jīng)網(wǎng)絡(luò)輸入一個(gè)激勵(lì)時(shí),它要在已存儲(chǔ)的知識(shí)中尋找與輸入匹配最好的存儲(chǔ)知識(shí)為其解。神經(jīng)網(wǎng)絡(luò)的特點(diǎn)(3)(4)人工神經(jīng)網(wǎng)絡(luò)(ANN)具有自學(xué)習(xí)、自組織、自適應(yīng)能力。大腦功能受先天因素的制約,但后天因素(如經(jīng)歷、學(xué)習(xí)和訓(xùn)練等)也起著重要作用。ANN很好地模擬了人腦的這一特性。如果最后的輸出不正確,系統(tǒng)可以調(diào)整加到每個(gè)輸入上去的權(quán)重以產(chǎn)生一個(gè)新的結(jié)果,這可以通過(guò)一定的訓(xùn)練算法來(lái)實(shí)現(xiàn)。訓(xùn)練過(guò)程是復(fù)雜的,通過(guò)網(wǎng)絡(luò)進(jìn)行重復(fù)地輸入數(shù)據(jù),且每次都調(diào)整權(quán)重以改善結(jié)果,最終達(dá)到所希望的輸出。在訓(xùn)練過(guò)程中網(wǎng)絡(luò)便得到了經(jīng)驗(yàn)。理論研究表明,選擇合適的ANN能夠?qū)崿F(xiàn)任何連續(xù)映射,通過(guò)對(duì)樣本的學(xué)習(xí),ANN表現(xiàn)出分類、概括和聯(lián)想的能力。1.神經(jīng)網(wǎng)絡(luò)入門2.

神經(jīng)網(wǎng)絡(luò)基本理論3.

BP神經(jīng)網(wǎng)絡(luò)算法4.神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)5.從人工神經(jīng)網(wǎng)絡(luò)到深度學(xué)習(xí)BP神經(jīng)網(wǎng)絡(luò)算法

BP神經(jīng)網(wǎng)絡(luò)(backpropagationneuralnetwork)是神經(jīng)網(wǎng)絡(luò)的一種經(jīng)典結(jié)構(gòu),因?yàn)槠浣Y(jié)構(gòu)和訓(xùn)練相對(duì)簡(jiǎn)單,是我們學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)時(shí)的入門算法。BP神經(jīng)網(wǎng)絡(luò)包含了特定的模型和特定的訓(xùn)練算法。BP算法的網(wǎng)絡(luò)結(jié)構(gòu)與訓(xùn)練方式(1)采用非線性激活函數(shù),Sigmoid函數(shù)。三個(gè)層次分別是:輸入層(InputLayer),隱藏層(HiddenLayer)和輸出層(Outputlayer),就好比神經(jīng)網(wǎng)絡(luò)的各個(gè)神經(jīng)元具有不同功能一樣。輸入層:負(fù)責(zé)接收外界刺激,即外部數(shù)據(jù)。隱藏層:又叫可多層,負(fù)責(zé)增加計(jì)算能力,以解決困難問(wèn)題。但隱藏層神經(jīng)元不能無(wú)限增加,否則會(huì)出現(xiàn)過(guò)擬合現(xiàn)象。輸出層:又稱為決策層,負(fù)責(zé)進(jìn)行決策。BP算法的網(wǎng)絡(luò)結(jié)構(gòu)與訓(xùn)練方式(2)

一般來(lái)說(shuō),當(dāng)數(shù)據(jù)和決策問(wèn)題確定之后,輸入層和輸出層的節(jié)點(diǎn)個(gè)數(shù)是固定的,唯一可變的是隱藏層。層與層之間是通過(guò)神經(jīng)鍵(權(quán)重)完成連接。訓(xùn)練好之后的BP神經(jīng)網(wǎng)路模型是前饋的(feedforward),但在進(jìn)行模型訓(xùn)練的時(shí)候是從輸出層到輸入層,是反饋的(即:TrainBackward),BP算法網(wǎng)絡(luò)結(jié)構(gòu)如圖反向傳播算法(1)反向傳播算法(2)反向傳播算法(3)反向傳播算法(4)

BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)流程

BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的具體流程如下:(1)網(wǎng)絡(luò)初始化。對(duì)各連接權(quán)值和閾值分別賦予(0,1)區(qū)間的數(shù)值,設(shè)定誤差函數(shù),給定計(jì)算精度值;(2)計(jì)算隱含層各神經(jīng)節(jié)點(diǎn)的輸入和輸出;(3)計(jì)算輸出層各神經(jīng)節(jié)點(diǎn)的輸入和輸出;(4)計(jì)算BP神經(jīng)網(wǎng)絡(luò)連接到輸出層各神經(jīng)元節(jié)點(diǎn)的權(quán)值誤差;(5)計(jì)算BP神經(jīng)網(wǎng)絡(luò)連接到隱含層各神經(jīng)元節(jié)點(diǎn)的權(quán)值誤差;(6)反向調(diào)整BP神經(jīng)網(wǎng)絡(luò)各層的連接權(quán)值和閾值;(7)計(jì)算實(shí)際輸出值和期望輸出值的誤差,若滿足設(shè)定的精度值,則結(jié)束學(xué)習(xí),否則繼續(xù)從步驟(2)逐步進(jìn)行學(xué)習(xí)

BP算法的演示舉例(1)

典型的三層神經(jīng)網(wǎng)絡(luò)的基本構(gòu)成是輸入層、隱含層、輸出層,我們現(xiàn)在手里有一堆數(shù)據(jù){x1,x2,x3,…,xn},輸出也是一堆數(shù)據(jù){y1,y2,y3,…,yn},現(xiàn)在要他們?cè)陔[含層做某種變換,把數(shù)據(jù)灌進(jìn)去后得到你期望的輸出。假設(shè),你有這樣一個(gè)網(wǎng)絡(luò)層如圖所示:

BP算法的演示舉例(2)

第一層是輸入層,包含兩個(gè)神經(jīng)元i1,i2,和截距項(xiàng)b1;第二層是隱含層,包含兩個(gè)神經(jīng)元h1,h2和截距項(xiàng)b2,第三層是輸出o1,o2,每條線上標(biāo)的wi是層與層之間連接的權(quán)重,激活函數(shù)我們默認(rèn)為sigmoid函數(shù)?,F(xiàn)在對(duì)他們賦上初值如圖,所示:

BP算法的演示舉例(3)其中,輸入數(shù)據(jù)

i1=0.05,i2=0.10;輸出數(shù)據(jù)o1=0.01,o2=0.99;初始權(quán)重

w1=0.15,w2=0.20,w3=0.25,w4=0.30;

w5=0.40,w6=0.45,w7=0.50,w8=0.55目標(biāo):給出輸入數(shù)據(jù)i1,i2(0.05和0.10),使輸出盡可能與原始輸出o1,o2(0.01和0.99)接近。

BP算法的演示舉例(4)

BP算法的演示舉例(5)2.隱含層—->輸出層:計(jì)算輸出層神經(jīng)元o1和o2的值:

BP算法的演示舉例(6)Step2反向傳播1.計(jì)算總誤差

BP算法的演示舉例(7)

BP算法的演示舉例(8)如圖所示可以更直觀的看清楚誤差是怎樣反向傳播的:

BP算法的演示舉例(9)

BP算法的演示舉例(10)

BP算法的演示舉例(11)

BP算法的演示舉例(12)

BP算法的演示舉例(13)3.隱含層—->隱含層的權(quán)值更新:方法其實(shí)與上面說(shuō)的差不多,但是有個(gè)地方需要變一下,在上文計(jì)算總誤差對(duì)w5的偏導(dǎo)時(shí),是從out(o1)—->net(o1)—->w5,但是在隱含層之間的權(quán)值更新時(shí),是out(h1)—->net(h1)—->w1,而out(h1)會(huì)接受E(o1)和E(o2)兩個(gè)地方傳來(lái)的誤差,所以這個(gè)地方兩個(gè)都要計(jì)算,如圖所示。

BP算法的演示舉例(14)1.神經(jīng)網(wǎng)絡(luò)入門2.

神經(jīng)網(wǎng)絡(luò)基本理論3.

BP神經(jīng)網(wǎng)絡(luò)算法4.神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)5.從人工神經(jīng)網(wǎng)絡(luò)到深度學(xué)習(xí)

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(1)

#數(shù)據(jù)讀取:defloaddataset(filename):

fp=open(filename)

#存放數(shù)據(jù):dataset=[]#存放標(biāo)簽:labelset=[] foriinfp.readlines(): a=i.strip().split()

#每個(gè)數(shù)據(jù)行的最后一個(gè)是標(biāo)簽:

dataset.append([float(j)forjina[:len(a)-1]]) labelset.append(int(float(a[-1]))) returndataset,labelset

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(2)初始化各個(gè)參數(shù):#x為輸入層神經(jīng)元個(gè)數(shù),y為隱層神經(jīng)元個(gè)數(shù),z輸出層神經(jīng)元個(gè)數(shù)defparameter_initialization(x,y,z):#隱層閾值value1=np.random.randint(-5,5,(1,y)).astype(np.float64)

#輸出層閾值value2=np.random.randint(-5,5,(1,z)).astype(np.float64)

#輸入層與隱層的連接權(quán)重weight1=np.random.randint(-5,5,(x,y)).astype(np.float64)#隱層與輸出層的連接權(quán)重weight2=np.random.randint(-5,5,(y,z)).astype(np.float64)

returnweight1,weight2,value1,value2

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(3)對(duì)數(shù)幾率函數(shù)(sigmoid函數(shù)):defsigmoid(z):

return1/(1+np.exp(-z))訓(xùn)練過(guò)程(參數(shù)調(diào)整過(guò)程):weight1:輸入層與隱層的連接權(quán)重weight2:隱層與輸出層的連接權(quán)重value1:隱層閾值value2:輸出層閾值'''deftrainning(dataset,labelset,weight1,weight2,value1,value2): #x為步長(zhǎng) x=0.01 foriinrange(len(dataset)):

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(4)#輸入數(shù)據(jù) inputset=np.mat(dataset[i]).astype(np.float64) #數(shù)據(jù)標(biāo)簽 outputset=np.mat(labelset[i]).astype(np.float64) #隱層輸入 input1=np.dot(inputset,weight1).astype(np.float64) #隱層輸出 output2=sigmoid(input1-value1).astype(np.float64) #輸出層輸入 input2=np.dot(output2,weight2).astype(np.float64)

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(5)#輸出層輸出output3=sigmoid(input2-value2).astype(np.float64)#更新公式由矩陣運(yùn)算表示 a=np.multiply(output3,1-output3) g=np.multiply(a,outputset-output3) b=np.dot(g,np.transpose(weight2)) c=np.multiply(output2,1-output2) e=np.multiply(b,c) value1_change=-x*e value2_change=-x*g

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(6)weight1_change=x*np.dot(np.transpose(inputset),e)weight2_change=x*np.dot(np.transpose(output2),g)#更新參數(shù) value1+=value1_change value2+=value2_change weight1+=weight1_change weight2+=weight2_change returnweight1,weight2,value1,value2

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(7)

測(cè)試:deftesting(dataset,labelset,weight1,weight2,value1,value2): #記錄預(yù)測(cè)正確的個(gè)數(shù)rightcount=0foriinrange(len(dataset)):#計(jì)算每一個(gè)樣例通過(guò)該神經(jīng)網(wǎng)路后的預(yù)測(cè)值 inputset=np.mat(dataset[i]).astype(np.float64) outputset=np.mat(labelset[i]).astype(np.float64)output2=sigmoid(np.dot(inputset,weight1)-value1) output3=sigmoid(np.dot(output2,weight2)-value2)

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(8)#確定其預(yù)測(cè)標(biāo)簽

ifoutput3>0.5:

flag=1

else:

flag=0

iflabelset[i]==flag:

rightcount+=1#輸出預(yù)測(cè)結(jié)果 print("預(yù)測(cè)為%d實(shí)際為%d"%(flag,labelset[i]))#返回正確率 returnrightcount/len(dataset)

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(9)主函數(shù):if__name__=='__main__': dataset,labelset=loaddataset('/horseColicTraining.txt') weight1,weight2,value1,value2=parameter_initialization(len(dataset[0]),len(dataset[0]),1) foriinrange(1500): weight1,weight2,value1,value2=trainning(dataset,labelset,weight1,weight2,value1,value2) rate=testing(dataset,labelset,weight1,weight2,value1,value2) print("正確率為%f"%(rate))

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(10)

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(11)運(yùn)行后如圖所示:

神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)(12)1.神經(jīng)網(wǎng)絡(luò)入門2.

神經(jīng)網(wǎng)絡(luò)基本理論3.

BP神經(jīng)網(wǎng)絡(luò)算法4.神經(jīng)網(wǎng)絡(luò)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論