




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第十二章:神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)目標(biāo)通過本章的學(xué)習(xí),你將能夠:掌握神經(jīng)網(wǎng)絡(luò)算法的基本概念;掌握主要神經(jīng)網(wǎng)絡(luò)算法模型;掌握數(shù)字?jǐn)?shù)據(jù)的神經(jīng)網(wǎng)絡(luò)評價與預(yù)測。
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)一,按美國神經(jīng)網(wǎng)絡(luò)學(xué)家HechtNielsen的觀點(diǎn),神經(jīng)網(wǎng)絡(luò)的定義是:“神經(jīng)網(wǎng)絡(luò)是由多個非常簡單的處理單元彼此按某種方式相互連接而形成的計(jì)算機(jī)系統(tǒng),該系統(tǒng)靠其狀態(tài)對外部輸入信息的動態(tài)響應(yīng)來處理信息”。綜合神經(jīng)網(wǎng)絡(luò)的來源、特點(diǎn)和各種解釋,它可簡單地表述為:人工神經(jīng)網(wǎng)絡(luò)是一種旨在模仿人腦結(jié)構(gòu)及其功能的信息處理系統(tǒng)。人工神經(jīng)網(wǎng)絡(luò)(簡稱神經(jīng)網(wǎng)絡(luò)):是由人工神經(jīng)元互連組成的網(wǎng)絡(luò),它是從微觀結(jié)構(gòu)和功能上對人腦的抽象、簡化,是模擬人類智能的一條重要途徑,反映了人腦功能的若干基本特征,如并行信息處理、學(xué)習(xí)、聯(lián)想、模式分類、記憶等。神經(jīng)網(wǎng)絡(luò)入門(1)
輸入可以類比為神經(jīng)元的樹突,而輸出可以類比為神經(jīng)元的軸突,計(jì)算則可以類比為細(xì)胞核。包含有3個輸入,1個輸出,以及2個計(jì)算功能,中間的箭頭線這些線稱為“連接”每,個上有一個“權(quán)值”。神經(jīng)網(wǎng)絡(luò)入門(2)
感知器模型,在原來MP模型的“輸入”位置添加神經(jīng)元節(jié)點(diǎn),標(biāo)志其為“輸入單元”。其余不變,我們將權(quán)值w1,w2,w3寫到“連接線”的中間。神經(jīng)網(wǎng)絡(luò)入門(3)輸入層里的輸入單元只負(fù)責(zé)傳輸數(shù)據(jù),不做計(jì)算;輸出層里的輸出單元則需要對前面一層的輸入進(jìn)行計(jì)算。把需要計(jì)算的層次稱之為計(jì)算層,并把擁有一個計(jì)算層的網(wǎng)絡(luò)稱之為單層神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)入門(4)假如我們要預(yù)測的目標(biāo)不再是一個值,而是一個向量,例如[2,3]。那么可以在輸出層再增加一個輸出單元。神經(jīng)網(wǎng)絡(luò)入門(5)可以看到,z1的計(jì)算跟原先的z并沒有區(qū)別,我們已知一個神經(jīng)元的輸出可以向多個神經(jīng)元傳遞,因此z2的計(jì)算公式如圖所示:神經(jīng)網(wǎng)絡(luò)入門(6)可以看到,z2的計(jì)算中除了三個新的權(quán)值:w4,w5,w6以外,其他與z1是一樣的。整個網(wǎng)絡(luò)的輸出如圖所示。神經(jīng)網(wǎng)絡(luò)入門(7)W1,2代表后一層的第1個神經(jīng)元與前一層的第2個神經(jīng)元的連接的權(quán)值。根據(jù)以上方法標(biāo)記,如圖所示:神經(jīng)網(wǎng)絡(luò)入門(8)上面的決策過程,使用數(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)對于神經(jīng)網(wǎng)絡(luò)模型去學(xué)習(xí)、理解非常復(fù)雜和非線性的函數(shù)來說具有十分重要的作用,激活函數(shù)的存在將非線性特性引入到我們的網(wǎng)絡(luò)中。如果我們不運(yùn)用激活函數(shù),則輸出信號將僅僅是一個簡單的線性函數(shù)。線性函數(shù)的復(fù)雜性有限,從數(shù)據(jù)中學(xué)習(xí)復(fù)雜函數(shù)映射的能力更小。Sigmoid函數(shù)tanh函數(shù)sigmoid函數(shù)和tanh函數(shù)都存在一個問題:當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)增多的時候,由于在進(jìn)行反向傳播的時候,鏈?zhǔn)角髮?dǎo),多項(xiàng)相乘,函數(shù)進(jìn)入飽和區(qū)(導(dǎo)數(shù)接近于零的地方)就會逐層傳遞,這種現(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)元的信息編碼通常是比較分散及稀疏的。通常情況下,大腦中在同一時間大概只有1%-4%的神經(jīng)元處于活躍狀態(tài)。使用線性修正以及正則化(regularization)可以對機(jī)器神經(jīng)網(wǎng)絡(luò)中神經(jīng)元的活躍度(即輸出為正值)進(jìn)行調(diào)試;相比之下,邏輯函數(shù)在輸入為0時達(dá)到1/2,即已經(jīng)是半飽和的穩(wěn)定狀態(tài),不夠符合實(shí)際生物學(xué)對模擬神經(jīng)網(wǎng)絡(luò)的期望。不過需要指出的是,一般情況下,在一個使用修正線性單元(即線性整流)的神經(jīng)網(wǎng)絡(luò)中大概有50%的神經(jīng)元處于激活態(tài);Softmax函數(shù)Softmax函數(shù)體:Softmax函數(shù)的功能就是將一個K維的任意實(shí)數(shù)向量映射成另一個K維的實(shí)數(shù)向量,其中向量中的每個元素取值都介于(0,1)之間。新的向量所有維度模長之和為1。Softmax函數(shù)經(jīng)常用作多分類任務(wù)的輸出層。梯度下降與損失函數(shù)損失函數(shù)的極值深度學(xué)習(xí)中常用的損失函數(shù)二次代價函數(shù):交叉熵代價函數(shù):交叉熵誤差刻畫了兩個概率分布之間的距離,是分類問題中使用較多的一種損失函數(shù)。一般二次代價函數(shù)更多得用于回歸問題,而交叉熵誤差更多的用于分類問題。全局梯度下降算法(BGD)隨機(jī)梯度下降算法(SGD)小批量梯度下降(MBGD)梯度下降與損失函數(shù)更加有效率的梯度下降以及反向傳播:避免了梯度爆炸和梯度消失問題;簡化計(jì)算過程:沒有了其他復(fù)雜激活函數(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)簡寫為FCN,但很容易和全卷積網(wǎng)絡(luò)(Fully-ConvolutionalNetwork)的簡寫搞混,要注意,結(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ò):每相鄰兩層之間,每個神經(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ò)對全連接網(wǎng)絡(luò)的一個改進(jìn)。由于權(quán)值共享,降低了參數(shù)數(shù)量,縮小了解空間,有利于提取泛化特征,有效緩解了過擬合。神經(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)連接。而這個層內(nèi)連接的權(quán)值也是共享的,用于提取序列信息,有一定的記憶功能。在自然語言處理等領(lǐng)域有應(yīng)用。神經(jīng)網(wǎng)絡(luò)的主要類型-前饋神經(jīng)網(wǎng)絡(luò)
前饋神經(jīng)網(wǎng)絡(luò)是指神經(jīng)元分層排列,分別組成輸入層、中間層和輸出層。每一層的神經(jīng)元只接受來自前一層神經(jīng)元的輸入,后面的層對前面層沒有信號反饋。輸入模式經(jīng)過各層的順序傳播,最后在輸出層上得到輸出。這類網(wǎng)絡(luò)結(jié)構(gòu)通常適于預(yù)測、模式識別及非線性函數(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ò),輸入信號決定反饋系統(tǒng)的初始狀態(tài),系統(tǒng)經(jīng)過一系列狀態(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)系存儲網(wǎng)絡(luò)(BAM)、波耳茲曼機(jī)。自組織神經(jīng)網(wǎng)絡(luò)是無教師學(xué)習(xí)網(wǎng)絡(luò),它模擬人腦行為,根據(jù)過去經(jīng)驗(yàn)自動適應(yīng)無法預(yù)測的環(huán)境變化,由于無教師信號,這類網(wǎng)絡(luò)通常采用競爭原則進(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ù)百億個神經(jīng)元組成,每個神經(jīng)元共有若干個突觸,突觸為神經(jīng)元之間的結(jié)合部,決定神經(jīng)元之間的連接強(qiáng)度與性質(zhì)。這表明大腦皮層是一個廣泛連接的巨型復(fù)雜系統(tǒng),ANN的連接機(jī)制模仿了人腦的這一特性。(2)人工神經(jīng)網(wǎng)絡(luò)(ANN)有其并行結(jié)構(gòu)和并行處理機(jī)制。ANN不但結(jié)構(gòu)上是并行的,它的處理順序也是并行的和同時的。在同一層內(nèi)處理單元都是同時操作的,即神經(jīng)網(wǎng)絡(luò)的計(jì)算功能分布在多個處理單元上。神經(jīng)網(wǎng)絡(luò)的特點(diǎn)(2)(3)人工神經(jīng)網(wǎng)絡(luò)(ANN)的分布式結(jié)構(gòu)使其具有和人腦一樣的容錯性和聯(lián)想能力。大腦具有很強(qiáng)的容錯能力。我們知道,每天都有大腦細(xì)胞死去,但并沒有影響人們的記憶和思考能力。這正是因?yàn)榇竽X對信息的存儲是通過改變突觸的功能實(shí)現(xiàn)的,信息存儲于神經(jīng)元連接強(qiáng)度的分布上,存儲區(qū)和操作區(qū)合二為一,不同信息之間自然溝通,其處理也為大規(guī)模連續(xù)時間模式。而存儲知識的獲得采用“聯(lián)想”的辦法。這類似人類和動物的聯(lián)想記憶,當(dāng)一個神經(jīng)網(wǎng)絡(luò)輸入一個激勵時,它要在已存儲的知識中尋找與輸入匹配最好的存儲知識為其解。神經(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)整加到每個輸入上去的權(quán)重以產(chǎn)生一個新的結(jié)果,這可以通過一定的訓(xùn)練算法來實(shí)現(xiàn)。訓(xùn)練過程是復(fù)雜的,通過網(wǎng)絡(luò)進(jìn)行重復(fù)地輸入數(shù)據(jù),且每次都調(diào)整權(quán)重以改善結(jié)果,最終達(dá)到所希望的輸出。在訓(xùn)練過程中網(wǎng)絡(luò)便得到了經(jīng)驗(yàn)。理論研究表明,選擇合適的ANN能夠?qū)崿F(xiàn)任何連續(xù)映射,通過對樣本的學(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)練相對簡單,是我們學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)時的入門算法。BP神經(jīng)網(wǎng)絡(luò)包含了特定的模型和特定的訓(xùn)練算法。BP算法的網(wǎng)絡(luò)結(jié)構(gòu)與訓(xùn)練方式(1)采用非線性激活函數(shù),Sigmoid函數(shù)。三個層次分別是:輸入層(InputLayer),隱藏層(HiddenLayer)和輸出層(Outputlayer),就好比神經(jīng)網(wǎng)絡(luò)的各個神經(jīng)元具有不同功能一樣。輸入層:負(fù)責(zé)接收外界刺激,即外部數(shù)據(jù)。隱藏層:又叫可多層,負(fù)責(zé)增加計(jì)算能力,以解決困難問題。但隱藏層神經(jīng)元不能無限增加,否則會出現(xiàn)過擬合現(xiàn)象。輸出層:又稱為決策層,負(fù)責(zé)進(jìn)行決策。BP算法的網(wǎng)絡(luò)結(jié)構(gòu)與訓(xùn)練方式(2)
一般來說,當(dāng)數(shù)據(jù)和決策問題確定之后,輸入層和輸出層的節(jié)點(diǎn)個數(shù)是固定的,唯一可變的是隱藏層。層與層之間是通過神經(jīng)鍵(權(quán)重)完成連接。訓(xùn)練好之后的BP神經(jīng)網(wǎng)路模型是前饋的(feedforward),但在進(jìn)行模型訓(xùn)練的時候是從輸出層到輸入層,是反饋的(即: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ò)初始化。對各連接權(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)在要他們在隱含層做某種變換,把數(shù)據(jù)灌進(jìn)去后得到你期望的輸出。假設(shè),你有這樣一個網(wǎng)絡(luò)層如圖所示:
BP算法的演示舉例(2)
第一層是輸入層,包含兩個神經(jīng)元i1,i2,和截距項(xiàng)b1;第二層是隱含層,包含兩個神經(jīng)元h1,h2和截距項(xiàng)b2,第三層是輸出o1,o2,每條線上標(biāo)的wi是層與層之間連接的權(quán)重,激活函數(shù)我們默認(rèn)為sigmoid函數(shù)?,F(xiàn)在對他們賦上初值如圖,所示:
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í)與上面說的差不多,但是有個地方需要變一下,在上文計(jì)算總誤差對w5的偏導(dǎo)時,是從out(o1)—->net(o1)—->w5,但是在隱含層之間的權(quán)值更新時,是out(h1)—->net(h1)—->w1,而out(h1)會接受E(o1)和E(o2)兩個地方傳來的誤差,所以這個地方兩個都要計(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()
#每個數(shù)據(jù)行的最后一個是標(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)初始化各個參數(shù):#x為輸入層神經(jīng)元個數(shù),y為隱層神經(jīng)元個數(shù),z輸出層神經(jīng)元個數(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)對數(shù)幾率函數(shù)(sigmoid函數(shù)):defsigmoid(z):
return1/(1+np.exp(-z))訓(xùn)練過程(參數(shù)調(diào)整過程):weight1:輸入層與隱層的連接權(quán)重weight2:隱層與輸出層的連接權(quán)重value1:隱層閾值value2:輸出層閾值'''deftrainning(dataset,labelset,weight1,weight2,value1,value2): #x為步長 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)
測試:deftesting(dataset,labelset,weight1,weight2,value1,value2): #記錄預(yù)測正確的個數(shù)rightcount=0foriinrange(len(dataset)):#計(jì)算每一個樣例通過該神經(jīng)網(wǎng)路后的預(yù)測值 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ù)測標(biāo)簽
ifoutput3>0.5:
flag=1
else:
flag=0
iflabelset[i]==flag:
rightcount+=1#輸出預(yù)測結(jié)果 print("預(yù)測為%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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 縱隔占位影像診斷
- 工廠承包貨柜方案簡單
- 原料檢驗(yàn)面試題及答案
- 醫(yī)院感染病例報告制度與流程
- 腦卒中康復(fù)面試題及答案
- 貨物類投標(biāo)技術(shù)方案
- 首都機(jī)場考試題庫及答案
- 機(jī)構(gòu)對外宣傳方案模板
- 小兒結(jié)核病護(hù)理
- 酒店培訓(xùn)內(nèi)容課件
- 湖北省黃岡市2024-2025學(xué)年高一下學(xué)期期末質(zhì)量監(jiān)測數(shù)學(xué)試卷
- 撤資合同范本:投資撤資協(xié)議書
- 醫(yī)保drg付費(fèi)課件培訓(xùn)
- 彩妝知識培訓(xùn)
- 羊水栓塞護(hù)理
- 云南省曲靖市宣威市民中2025屆高一化學(xué)第二學(xué)期期末檢測試題含解析
- 2024年寧夏銀川金鳳區(qū)社區(qū)專職工作者考試真題
- 2025至2030全球及中國帆船行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報告
- 北京海淀街道社區(qū)衛(wèi)生服務(wù)中心招聘筆試真題2024
- 新疆天富能源股份有限公司2024年度商譽(yù)減值測試資產(chǎn)評估報告
-
評論
0/150
提交評論