成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

這篇文章將為大家詳細講解有關(guān)Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

呂梁網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)。

強大的庫已經(jīng)存在了,如:TensorFlow,PyTorch,Keras等等。我將介紹在Python中創(chuàng)建多層感知器(MLP)神經(jīng)網(wǎng)絡的基本知識。

感知器是神經(jīng)網(wǎng)絡的基本組成部分。感知器的輸入函數(shù)是權(quán)重,偏差和輸入數(shù)據(jù)的線性組合。具體來說:in_j = weight input +  bias.(in_j =權(quán)重輸入+偏差)。在每個感知器上,我們都可以指定一個激活函數(shù)g。

激活函數(shù)是一種確保感知器“發(fā)射”或僅在達到一定輸入水平后才激活的數(shù)學方法。常見的非線性激活函數(shù)為S型,softmax,整流線性單位(ReLU)或簡單的tanH。

激活函數(shù)有很多選項,但是在本文中我們僅涉及Sigmoid和softmax。

圖1:感知器

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

對于有監(jiān)督的學習,我們稍后將輸入的數(shù)據(jù)通過一系列隱藏層轉(zhuǎn)發(fā)到輸出層。這稱為前向傳播。在輸出層,我們能夠輸出預測y。通過我們的預測y,我們可以計算誤差|  y*-y | 并使誤差通過神經(jīng)網(wǎng)絡向后傳播。這稱為反向傳播。通過隨機梯度下降(SGD)過程,將更新隱藏層中每個感知器的權(quán)重和偏差。

圖2:神經(jīng)網(wǎng)絡的基本結(jié)構(gòu)

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

現(xiàn)在我們已經(jīng)介紹了基礎知識,讓我們實現(xiàn)一個神經(jīng)網(wǎng)絡。我們的神經(jīng)網(wǎng)絡的目標是對MNIST數(shù)據(jù)庫中的手寫數(shù)字進行分類。我將使用NumPy庫進行基本矩陣計算。

在我們的問題中,MNIST數(shù)據(jù)由 [748,1] 矩陣中的8位顏色通道表示。從本質(zhì)上講,我們有一個 [748,1] 的數(shù)字矩陣,其始于[0,1,....  255],其中0表示白色,255表示黑色。

結(jié)果

MNIST手寫數(shù)字數(shù)據(jù)庫包含60,000個用于訓練目的的手寫示例和10,000個用于測試目的的示例。在對60,000個示例進行了30個epoch的訓練之后,我在測試數(shù)據(jù)集上運行了經(jīng)過訓練的神經(jīng)網(wǎng)絡,并達到了93.2%的準確性。甚至可以通過調(diào)整超參數(shù)來進一步優(yōu)化。

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

它是如何工作的?

本文分為5個部分。這些部分是:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 激活函數(shù)

  3. 權(quán)重初始化

  4. 偏差初始化

  5. 訓練算法

  6. 進行預測

1. 激活函數(shù)

Sigmoid是由等式1 /(1+ exp(-x))定義的激活函數(shù),將在隱藏層感知器中使用。

Softmax是一個激活函數(shù),當我們要將輸入分為幾類時,它通常在輸出層中使用。在我們的例子中,我們希望將一個數(shù)字分成10個bucket[0,1,2,…,9]中的一個。它計算矩陣中每個條目的概率;概率將總計為1。具有最大概率的條目將對應于其預測,即0,1,…,9。Softmax定義為exp(x)/  sum(exp(x))。

圖3:激活函數(shù)的實現(xiàn)

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

2. 權(quán)重初始化

對于我們的每個隱藏層,我們將需要初始化權(quán)重矩陣。有幾種不同的方法可以做到這一點,這里是4。

零初始化-初始化所有權(quán)重= 0。

隨機初始化-使用隨機數(shù)初始化權(quán)重,而不是完全隨機。我們通常使用標準正態(tài)分布(均值0和方差1)中的隨機數(shù)。

Xavier初始化-使用具有設定方差的正態(tài)分布中的隨機數(shù)初始化權(quán)重。我們將基于上一層的大小設置方差。

如上所述,進入感知器的邊緣乘以權(quán)重矩陣。關(guān)鍵的一點是,矩陣的大小取決于當前圖層的大小以及它之前的圖層。明確地,權(quán)重矩陣的大小為[currentLayerSize,previousLayerSize]。

如上所述,進入感知器的邊緣乘以權(quán)重矩陣。關(guān)鍵的一點是,矩陣的大小取決于當前圖層的大小以及它之前的圖層。明確地,權(quán)重矩陣的大小為[currentLayerSize,previousLayerSize]。

假設我們有一個包含100個節(jié)點的隱藏層。我們的輸入層的大小為[748,1],而我們所需的輸出層的大小為[10,1]。輸入層和第一個隱藏層之間的權(quán)重矩陣的大小為[100,748]。隱藏層之間的每個權(quán)重矩陣的大小為[100,100]。最后,最終隱藏層和輸出層之間的權(quán)重矩陣的大小為[10,100]。

出于教育目的,我們將堅持使用單個隱藏層;在最終模型中,我們將使用多層。

圖4:權(quán)重初始化實現(xiàn)

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

3. 偏差初始化

像權(quán)重初始化一樣,偏置矩陣的大小取決于圖層大小,尤其是當前圖層大小。偏置初始化的一種方法是將偏置設置為零。

對于我們的實現(xiàn),我們將需要為每個隱藏層和輸出層提供一個偏差。偏置矩陣的大小為[100,1],基于每個隱藏層100個節(jié)點,而輸出層的大小為[10,1]。

圖5:偏置初始化實現(xiàn)

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

4. 訓練算法

前面已經(jīng)說過,訓練是基于隨機梯度下降(SGD)的概念。在SGD中,我們一次只考慮一個訓練點。

在我們的示例中,我們將在輸出層使用softmax激活。將使用“交叉熵損失”公式來計算損失。對于SGD,我們將需要使用softmax來計算交叉熵損失的導數(shù)。也就是說,此導數(shù)減少為y  -y,即預測y減去期望值y。

圖6:關(guān)于softmax激活的交叉熵損失及其導數(shù)

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

我們還需要編寫S型激活函數(shù)的導數(shù)。在圖7中,我定義了S型函數(shù)及其衍生函數(shù)

圖7:Sigmoid函數(shù)(上)及其導數(shù)(下)

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

通常,神經(jīng)網(wǎng)絡將允許用戶指定幾個“超參數(shù)”。在我們的實施中,我們將著重于允許用戶指定epoch,批處理大小,學習率和動量。還有其他優(yōu)化技術(shù)!

  • 學習率(LR):學習率是一個參數(shù),用戶可以通過它指定網(wǎng)絡允許我們學習和更新其參數(shù)的速度。選擇一個好的學習率是一門藝術(shù)。如果LR太高,我們可能永遠不會收斂于良好的可接受的訓練錯誤。如果LR太低,我們可能會浪費大量的計算時間。

  • epoch:epoch是整個訓練集中的一個迭代。為了確保我們不會過度擬合早期樣本中的數(shù)據(jù),我們會在每個時期之后對數(shù)據(jù)進行隨機排序。

  • 批次大?。和ㄟ^Epoc2h的每次迭代,我們將分批訓練數(shù)據(jù)。對于批次中的每個訓練點,我們將收集梯度,并在批次完成后更新權(quán)重/偏差。

  • 動量:這是一個參數(shù),我們將通過收集過去的梯度的移動平均值并允許在該方向上的運動來加速學習。在大多數(shù)情況下,這將導致更快的收斂。典型值范圍從0.5到0.9。

下面,我編寫了一些通用的偽代碼來模擬反向傳播學習算法的概況。為了便于閱讀,已將諸如計算輸出和將訓練數(shù)據(jù)分成批次之類的任務作為注釋編寫。

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

現(xiàn)在,我們將展示偽代碼的實現(xiàn).

Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡

5. 做出預測

現(xiàn)在,我們僅缺少此實現(xiàn)的一個關(guān)鍵方面。預測算法。在編寫反向傳播算法的過程中,我們已經(jīng)完成了大部分工作。我們只需要使用相同的前向傳播代碼即可進行預測。輸出層的softmax激活函數(shù)將計算大小為[10,1]的矩陣中每個條目的概率。

我們的目標是將數(shù)字分類為0到9。因此,aj2矩陣的索引將與預測相對應。概率最大的索引將由np.argmax()選擇,并將作為我們的預測。


關(guān)于Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當前題目:Python中怎么實現(xiàn)一個多層感知器神經(jīng)網(wǎng)絡
轉(zhuǎn)載源于:http://jinyejixie.com/article10/gpeido.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、品牌網(wǎng)站設計、域名注冊、標簽優(yōu)化網(wǎng)站建設、網(wǎng)站營銷

廣告

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

成都seo排名網(wǎng)站優(yōu)化
镇宁| 盘锦市| 射洪县| 阳山县| 龙州县| 辽宁省| 滁州市| 高台县| 丘北县| 太湖县| 专栏| 红原县| 穆棱市| 荥经县| 安徽省| 赫章县| 临颍县| 丹凤县| 涞源县| 昆山市| 招远市| 贵南县| 阿荣旗| 扎兰屯市| 玉屏| 常山县| 武胜县| 津市市| 开平市| 上饶市| 宁国市| 静安区| 鞍山市| 民和| 万山特区| 什邡市| 南丰县| 柘荣县| 孟村| 田东县| 土默特右旗|