神經網絡-BP神經網絡

2021-02-20 機器學習養成記

戳藍色字關注我們喲!

感知器作為初代神經網絡,具有簡單、計算量小等優點,但只能解決線性問題。BP神經網絡在感知器的基礎上,增加了隱藏層,通過任意複雜的模式分類能力和優良的多維函數映射能力,解決了異或等感知器不能解決的問題,並且BP神經網絡也是CNN等複雜神經網絡等思想根源。

BP神經網絡是一種通過誤差反向傳播算法進行誤差校正的多層前饋神經網絡,其最核心的特點就是:信號是前向傳播,而誤差是反向傳播。前向傳播過程中,輸入信號經由輸入層、隱藏層逐層處理,到輸出層時,如果結果未到達期望要求,則進入反向傳播過程,將誤差信號原路返回,修改各層權重。

BP神經網絡包含輸入層、隱藏層和輸出層,其中,隱藏層可有多個,其中,輸入層和輸出層的節點個數是固定的(分別是輸入樣本的變量個數和輸出標籤個數),但隱藏層的節點個數不固定。以具有單隱藏層的BP神經網絡為例,其網絡結構如下圖:

以單隱藏層的BP神經網絡為例,各階段原理公式如下:

根據誤差調整權重。函數是沿梯度的方向變化最快,BP神經網絡中也是通過梯度下降法更新權重。根據鏈式法則及上述關係,可以得到權重W和V的變化公式分別為:

這裡,我們用手寫數字圖片建立一個僅有1層隱藏層的BP神經網絡,並進行訓練及預測。每張圖片大小為8*8,因此有64個圖片像素變量及1個偏置項,共65個輸入層節點;訓練目標是將手寫圖片判斷為0-9,因此有10個輸出層節點;隱藏層節點數這裡設置為100。圖片示例如下:

另外,這裡兩個激活函數我們都選用sigmoid函數,且這個函數都導數有一個特點,即f′(x)=f(x)(1−f(x))。
import numpy as npfrom sklearn.datasets import load_digitsfrom sklearn.preprocessing import LabelBinarizer from sklearn.model_selection import train_test_split 
def sigmoid(x):    return 1/(1+np.exp(-x))def dsigmoid(x): return x*(1-x)

class NeuralNetwork:    def __init__(self,layers):                self.V = np.random.random((layers[0]+1,layers[1]+1))*2-1        self.W = np.random.random((layers[1]+1,layers[2]))*2-1            def train(self,X,y,lr=0.11,epochs=10000):                 temp = np.ones([X.shape[0],X.shape[1]+1])        temp[:,0:-1] = X        X = temp                for n in range(epochs+1):            i = np.random.randint(X.shape[0])             x = [X[i]]            x = np.atleast_2d(x)                        L1 = sigmoid(np.dot(x,self.V))             L2 = sigmoid(np.dot(L1,self.W))                         L2_delta = (y[i]-L2)*dsigmoid(L2)            L1_delta = L2_delta.dot(self.W.T)                        self.W += lr*L1.T.dot(L2_delta)            self.V += lr*x.T.dot(L1_delta)                                    if n%1000==0:                predictions = []                for j in range(X_test.shape[0]):                    o = self.predict(X_test[j])                    predictions.append(np.argmax(o))                accuracy = np.mean(np.equal(predictions,y_test))                print('epoch:',n,'accuracy:',accuracy)                    def predict(self,x):                temp = np.ones(x.shape[0]+1)        temp[0:-1] = x        x = temp        x = np.atleast_2d(x)
L1 = sigmoid(np.dot(x,self.V)) L2 = sigmoid(np.dot(L1,self.W))         return L2

digits = load_digits()X = digits.datay = digits.targetX -= X.min()X /= X.max()
nm = NeuralNetwork([64,100,10])X_train,X_test,y_train,y_test = train_test_split(X,y) labels_train = LabelBinarizer().fit_transform(y_train)labels_test = LabelBinarizer().fit_transform(y_test)
print('start')nm.train(X_train,labels_train,epochs=20000)print('end')

輸出結果如下,可以看到隨著訓練次數提升,模型準確率穩定在0.95、0.96。

相關推薦:

相關焦點

  • 「人工神經網絡」人工神經網絡之BP算法
    人工神經網絡(Artificial Neural Network,ANN)是在受到了生物學的啟發後創建的,在某種程度上它是對生物大腦的一種模擬。人們仿照生物神經網絡的結構,使用簡單運算單元模擬神經元,並將大量運算單元按某種形式密集連接,便構成了人工神經網絡。結構如圖:人工神經網絡(ANN)模型帶有權重值(w1,w2,...
  • BP神經網絡算法(附matlab程序)
    我在書上看見了一條神經網絡算法的定義(雖然很空洞);「神經網絡是具有適應性的簡單單元組成的廣泛並行互連的網絡,它的組織能夠模擬生物神經系統對真實世界物體所做出的交互反應」。神經元的工作機制是這樣的;如果某神經元的點位超過了一個「閾值」,那麼它就會被激活,即「興奮」起來,向其它神經元發送化學物質。神經網絡算法也是運用了這樣的機制。
  • BP神經網絡在混凝土材料研究中的應用
    近年來,人工神經網絡得到長足發展,在這之中,誤差反向傳播神經網絡(Back Propagation Neutral Network,又稱BP神經網絡)被認為是一種進行信息處理的理想化數學模型,自90年代開始,就有學者將其應用於優化混凝土的配合比設計和預測水泥混凝土性能的研究。
  • BP神經網絡與matlab實例詳解(一)
    BP神經網絡是1986年由Rumelhart和McClelland為首的科學家提出的概念,是一種按照誤差逆向傳播算法訓練的多層前饋神經網絡,是應用最廣泛的神經網絡。它的基本思想是梯度下降法,利用梯度搜索技術,以期使網絡的實際輸出值和期望輸出值的誤差均方差為最小。
  • MATLAB基於BP神經網絡的光伏發電太陽輻照度預測
    MATLAB基於BP神經網絡的光伏發電太陽輻照度預測光伏發電功率主要受太陽輻照度影響,所以準確預測太陽輻照度對光伏功率預測十分重要
  • 神經網絡解析|RNN(循環神經網絡)
    RNN是兩種神經網絡模型的縮寫,一種是遞歸神經網絡(Recursive Neural Network),一種是循環神經網絡(Recurrent Neural Network)。雖然這兩種神經網絡有著千絲萬縷的聯繫,但是本文主要討論的是第二種神經網絡模型——循環神經網絡(Recurrent Neural Network)。
  • 生物神經網絡與人工神經網絡的遞歸性
    然而,隨著用於實際應用的人工神經網絡(ANN)越來越複雜,在某些方面更像生物神經網絡(BNNs),雖然整體上仍有很大不同) ,這種差異正在縮小。        深度學習社區所說的循環連接類似於神經科學社區所說的橫向連接。即,局部區域中的互連神經元。    在神經科學界,遞歸網絡是一種連接性很強的網絡,包括前饋、橫向和反饋連接。
  • 基於MATLAB的BP神經網絡預測計算GUI界面
    由於S形函數與雙極S形函數都是可導的(導函數是連續函數),因此適合用在BP神經網絡中。(BP算法要求激活函數可導)神經網絡實現步驟1. 數據預處理        在訓練神經網絡前一般需要對數據進行預處理,一種重要的預處理手段是歸一化處理。
  • BP神經網絡+TensorFlow做圖片識別
    +圖片識別應用(附源碼)前言:這是一篇基於tensorflow框架,創建的只有一層隱藏層的BP神經網絡,做的圖片識別,內容也比較簡單,全當是自己的學習筆記了。None表示其值大小不定,意即選中的X、Y的數量暫時不定4、創建BP神經網絡"""用隨機數列生成的方式,創建含一個隱藏層的神經網絡。
  • 神經網絡算法
    根據生物原型的研究,建立神經元、神經網絡的理論模型。其中包括概念模型、知識模型、物理化學模型、數學模型等。(3)網絡模型與算法研究。在理論模型研究的基礎上構作具體的神經網絡模型,以實現計算機模擬或準備製作硬體,包括網絡學習算法的研究。這方面的工作也稱為技術模型研究。(4)人工神經網絡應用系統。
  • 前沿 | 簡述脈衝神經網絡SNN:下一代神經網絡
    脈衝神經網絡(SNN)屬於第三代神經網絡模型,實現了更高級的生物神經模擬水平。
  • 用Python實現BP神經網絡(附代碼)
    前兩期線性回歸及邏輯回歸項目已發布(見文末連結),今天來講講BP神經網絡。BP神經網絡全部代碼https://github.com/lawlite19/MachineLearning_Python/blob/master
  • 機器學習——神經網絡
    1、神經網絡由輸入層、隱藏層、輸出層組成;2、層與層之間的神經元有連接,而層內之間的神經元沒有連接。
  • 手寫神經網絡識別MNIST數據集
    output_diff, self.w4.T) * self.sigmoid_deri(self.hidden_layer_3)    hidden_diff_2 = np.dot(hidden_diff_3, self.w3.T) * self.sigmoid_deri(self.hidden_layer_2)    hidden_diff_1 = np.dot(hidden_diff_2, self.w2.T)
  • 神經網絡從0到1(五)——搭建神經網絡(上)
    我們的層信息都是這個模塊中的一個屬性,也就是我們的一層神經網絡。首先是hidden隱藏層,其所包含的東西是我們的神經網絡有多少個輸入和多少個輸出,所以我們把參數傳入,也就是輸入數據的個數。第二個層就是預測的神經網絡層,我們預測的層接收的神經元就是隱藏層輸出的神經元。預測層因為我們只是預測y的值,因此輸出值就是1。
  • 《神經網絡和深度學習》系列文章四:神經網絡的結構
    本節譯者:哈工大SCIR碩士生 徐偉 (https://github.com/memeda)聲明:我們將在每周一,周四,周日定期連載該書的中文翻譯,如需轉載請聯繫wechat_editors@ir.hit.edu.cn,未經授權不得轉載。
  • 圖神經網絡概述
    與已經非常成熟圖計算不同,圖神經網絡( Graph Neural Network)的研究主要是集中在相鄰節點信息的傳播與聚合上,從圖神經網絡的概念提出,到受深度學習中卷積神經網絡的啟發,2013年提出的基於圖論的圖卷積神經網絡研究方向吸引了大量學者關注。
  • 機器學習——RNN神經網絡
    對循環神經網絡的研究始於二十世紀80-90年代,並在二十一世紀初發展為深度學習(deep learning)算法之一,其中雙向循環神經網絡(Bidirectional RNN, Bi-RNN)和長短期記憶網絡(Long Short-Term Memory networks,LSTM)是常見的的循環神經網絡  。
  • 神經網絡簡介一
    本文部分圖片來源於網絡,如有侵權,請告知,我們將立即調整!目錄:1. 為什麼需要神經網絡?1.1 從logistic回歸出發1.2 PPR模型1.3 全連接神經網絡1.4 總結2.神經網絡一些重要的細節4. 神經網絡的實踐限於篇幅,第三和第四部分將在下一篇文章中進行介紹,敬請期待!1. 為什麼需要神經網絡?
  • 遞歸神經網絡之父:打造無監督式通用神經網絡人工智慧
    (LSTM RNN),由此奠定了「遞歸神經網絡之父」的美譽。它主要是關於擁有多個後續處理層的深度神經網絡。利用如今速度更快的計算機,這樣的網絡已經徹底改變了模式識別和機器學習。「深度學習」這一術語由德克特(Dechter)在1986年首度引入機器學習領域,然後由艾森伯格(Aizenberg)等人在2000年引入人工神經網絡領域。深度學習之父是烏克蘭的數學家伊凡卡內科(Ivakhnenko)。