0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

神經(jīng)元和神經(jīng)網(wǎng)絡(luò)層的標(biāo)準(zhǔn)C++定義

C語(yǔ)言專家集中營(yíng) ? 來(lái)源:未知 ? 作者:伍文輝 ? 2018-04-15 10:40 ? 次閱讀

前一段時(shí)間做了一個(gè)數(shù)字識(shí)別的小系統(tǒng),基于BP神經(jīng)網(wǎng)絡(luò)算法的,用MFC做的交互。在實(shí)現(xiàn)過(guò)程中也試著去找一些源碼,總體上來(lái)講,這些源碼的可移植性都不好,多數(shù)將交互部分和核心算法代碼雜糅在一起,這樣不僅代碼閱讀困難,而且重要的是核心算法不具備可移植性。設(shè)計(jì)模式,設(shè)計(jì)模式的重要性啊!于是自己將BP神經(jīng)網(wǎng)絡(luò)的核心算法用標(biāo)準(zhǔn)C++實(shí)現(xiàn),這樣可移植性就有保證的,然后在核心算法上實(shí)現(xiàn)基于不同GUI庫(kù)的交互(MFC,QT)是能很快的搭建好系統(tǒng)的。下面邊介紹BP算法的原理(請(qǐng)看《數(shù)字圖像處理與機(jī)器視覺(jué)》非常適合做工程的伙伴),邊給出代碼的實(shí)現(xiàn),最后給出基于核心算法構(gòu)建交互的例子。

人工神經(jīng)網(wǎng)絡(luò)的理論基礎(chǔ)

1.感知器

感知器是一種具有簡(jiǎn)單的兩種輸出的人工神經(jīng)元,如下圖所示。

2.線性單元

只有1和-1兩種輸出的感知器實(shí)際上限制了其處理和分類的能力,下圖是一種簡(jiǎn)單的推廣,即不帶閾值的感知器。

3.誤差準(zhǔn)則

使用的是一個(gè)常用的誤差度量標(biāo)準(zhǔn),平方誤差準(zhǔn)則。公式如下。

其中D為訓(xùn)練樣本,td為訓(xùn)練觀測(cè)值d的訓(xùn)練輸出,ot為觀測(cè)值d的實(shí)際觀測(cè)值。如果是個(gè)凸函數(shù)就好了(搞數(shù)學(xué)的,一聽(tīng)到凸函數(shù)就很高興,呵呵?。€是可以用梯度下降的方法求其參數(shù)w。

4.梯度下降推導(dǎo)

在高等數(shù)學(xué)中梯度的概念實(shí)際上就是一個(gè)方向向量,也就是方向?qū)?shù)最大的方向,也就是說(shuō)沿著這個(gè)方向,函數(shù)值的變化速度最快。我們這里是做梯度下降,那么就是沿著梯度的負(fù)方向更新參數(shù)w的值來(lái)快速達(dá)到E函數(shù)值的最小了。這樣梯度下降算法的步驟基本如下:

1)初始化參數(shù)w(隨機(jī),或其它方法)。

2)求梯度。

3)沿梯度方向更新參數(shù)w,可以添加一個(gè)學(xué)習(xí)率,也就是按多大的步子下降。

4)重復(fù)1),2),3)直到達(dá)到設(shè)置的條件(迭代次數(shù),或者E的減小量小于某個(gè)閾值)。

梯度的表達(dá)式如下:

那么如何求梯度呢?就是復(fù)合函數(shù)求導(dǎo)的過(guò)程,如下:

其中xid為樣本中第d個(gè)觀測(cè)值對(duì)應(yīng)的一個(gè)輸入分量xi。這樣,訓(xùn)練過(guò)程中參數(shù)w的更新表達(dá)式如下(其中添加了一個(gè)學(xué)習(xí)率,也就是下降的步長(zhǎng)):

于是參數(shù)wi的更新增量為:

對(duì)于學(xué)習(xí)率選擇的問(wèn)題,一般較小是能夠保證收斂的,看下圖吧。

5.增量梯度下降

對(duì)于4中的梯度下降算法,其缺點(diǎn)是有時(shí)收斂速度慢,如果在誤差曲面上存在多個(gè)局部極小值,算法不能保證能夠找到全局極小值。為了改善這些缺點(diǎn),提出了增量梯度下降算法。增量梯度下降,與4中的梯度下降的不同之處在于,4中對(duì)參數(shù)w的更新是根據(jù)整個(gè)樣本中的觀測(cè)值的誤差來(lái)計(jì)算的,而增量梯度下降算法是根據(jù)樣本中單個(gè)觀測(cè)值的誤差來(lái)計(jì)算w的更新。

6.梯度檢驗(yàn)

這是一個(gè)比較實(shí)用的內(nèi)容,如何確定自己的代碼就一定沒(méi)有錯(cuò)呢?因?yàn)樵谇筇荻鹊臅r(shí)候是很容易犯錯(cuò)誤的,我就犯過(guò)了,嗨,調(diào)了兩天才找出來(lái),一個(gè)數(shù)組下表寫(xiě)錯(cuò)了,要是早一點(diǎn)看看斯坦福大學(xué)的深度學(xué)習(xí)基礎(chǔ)教程就好了,這里只是截圖一部分,有時(shí)間去仔細(xì)看看吧。

多層神經(jīng)網(wǎng)絡(luò)

好了有了前面的基礎(chǔ),我們現(xiàn)在就可以進(jìn)行實(shí)戰(zhàn)了,構(gòu)造多層神經(jīng)網(wǎng)絡(luò)。

1.Sigmoid神經(jīng)元

Sigmoid神經(jīng)元可由下圖表示:

2.神經(jīng)網(wǎng)絡(luò)層

一個(gè)三層的BP神經(jīng)網(wǎng)絡(luò)可由下圖表示:

3.神經(jīng)元和神經(jīng)網(wǎng)絡(luò)層的標(biāo)準(zhǔn)C++定義

由2中的三層BP神經(jīng)網(wǎng)絡(luò)的示意圖中可以看出,隱藏層和輸出層是具有類似的結(jié)構(gòu)的。神經(jīng)元和神經(jīng)網(wǎng)絡(luò)層的定義如下:

1

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:BP神經(jīng)網(wǎng)絡(luò)原理及C++實(shí)戰(zhàn)

文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    神經(jīng)網(wǎng)絡(luò)教程(李亞非)

      第1章 概述  1.1 人工神經(jīng)網(wǎng)絡(luò)研究與發(fā)展  1.2 生物神經(jīng)元  1.3 人工神經(jīng)網(wǎng)絡(luò)的構(gòu)成  第2章人工神經(jīng)網(wǎng)絡(luò)基本模型  2.1 MP模型  2.2 感知器模型  2.3
    發(fā)表于 03-20 11:32

    人工神經(jīng)網(wǎng)絡(luò)算法的學(xué)習(xí)方法與應(yīng)用實(shí)例(pdf彩版)

    `人工神經(jīng) 網(wǎng)絡(luò)(Artificial Neural Network,即ANN) 可以概括的定義為:由大量具有適應(yīng)性的處理元素(神經(jīng)元)組成的廣泛并行互聯(lián)
    發(fā)表于 10-23 16:16

    基于BP神經(jīng)網(wǎng)絡(luò)的手勢(shì)識(shí)別系統(tǒng)

    的振蕩發(fā)散,本次選取的BP 神經(jīng)網(wǎng)絡(luò)是1 個(gè)3 BP 網(wǎng)絡(luò)結(jié)構(gòu)( 含1 個(gè)隱),隱單元及輸出單元用sigmoid 函數(shù)輸出,輸出共分為10 類,即輸出
    發(fā)表于 11-13 16:04

    【PYNQ-Z2試用體驗(yàn)】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    超過(guò)閾值,輸出就一躍而起。但我們一般用S函數(shù)作為激活函數(shù)。如下圖:圖2 該函數(shù)相比階越函數(shù)更加接近現(xiàn)實(shí)。神經(jīng)網(wǎng)絡(luò)原理如圖所示是一個(gè)具有兩神經(jīng)網(wǎng)絡(luò),每層有兩個(gè)神經(jīng)元。 圖3 這里兩個(gè)
    發(fā)表于 03-03 22:10

    【案例分享】基于BP算法的前饋神經(jīng)網(wǎng)絡(luò)

    期望的輸出。BP神經(jīng)網(wǎng)絡(luò)算法推導(dǎo)(更新權(quán)重和偏倚):從上面推導(dǎo)可以發(fā)現(xiàn):對(duì)于任意從神經(jīng)元i(輸出神經(jīng)元/隱神經(jīng)元)至
    發(fā)表于 07-21 04:00

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    是一種常用的無(wú)監(jiān)督學(xué)習(xí)策略,在使用改策略時(shí),網(wǎng)絡(luò)的輸出神經(jīng)元相互競(jìng)爭(zhēng),每一時(shí)刻只有一個(gè)競(jìng)爭(zhēng)獲勝的神經(jīng)元激活。ART神經(jīng)網(wǎng)絡(luò)由比較、識(shí)別
    發(fā)表于 07-21 04:30

    有關(guān)脈沖神經(jīng)網(wǎng)絡(luò)的基本知識(shí)

    譯者|VincentLee來(lái)源 |曉飛的算法工程筆記脈沖神經(jīng)網(wǎng)絡(luò)(Spiking neural network, SNN)將脈沖神經(jīng)元作為計(jì)算單...
    發(fā)表于 07-26 06:23

    基于BP神經(jīng)網(wǎng)絡(luò)的PID控制

    最近在學(xué)習(xí)電機(jī)的智能控制,上周學(xué)習(xí)了基于單神經(jīng)元的PID控制,這周研究基于BP神經(jīng)網(wǎng)絡(luò)的PID控制。神經(jīng)網(wǎng)絡(luò)具有任意非線性表達(dá)能力,可以通過(guò)對(duì)系統(tǒng)性能的學(xué)習(xí)來(lái)實(shí)現(xiàn)具有最佳組合的PID控制。利用BP
    發(fā)表于 09-07 07:43

    卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介:什么是機(jī)器學(xué)習(xí)?

    大量的二維矩陣。為了實(shí)現(xiàn)我們的實(shí)際分類目標(biāo),我們將二維數(shù)據(jù)轉(zhuǎn)換為長(zhǎng)一維向量。轉(zhuǎn)換是在所謂的扁平中完成的,然后是一個(gè)或兩個(gè)完全連接的。最后兩類型的神經(jīng)元類似于圖2所示的結(jié)構(gòu)。
    發(fā)表于 02-23 20:11

    卷積神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點(diǎn) 卷積神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的區(qū)別

    深度神經(jīng)網(wǎng)絡(luò)是一種基于神經(jīng)網(wǎng)絡(luò)的機(jī)器學(xué)習(xí)算法,其主要特點(diǎn)是由多層神經(jīng)元構(gòu)成,可以根據(jù)數(shù)據(jù)自動(dòng)調(diào)整神經(jīng)元之間的權(quán)重,從而實(shí)現(xiàn)對(duì)大規(guī)模數(shù)據(jù)進(jìn)行預(yù)測(cè)和分類。卷積
    發(fā)表于 08-21 17:07 ?4163次閱讀

    神經(jīng)元神經(jīng)網(wǎng)絡(luò)的區(qū)別與聯(lián)系

    在人工智能和機(jī)器學(xué)習(xí)的領(lǐng)域中,神經(jīng)元神經(jīng)網(wǎng)絡(luò)是兩個(gè)至關(guān)重要的概念。雖然它們都與人腦中的神經(jīng)系統(tǒng)有著密切的聯(lián)系,但在實(shí)際應(yīng)用和理論研究中,它們各自扮演著不同的角色。本文旨在深入探討神經(jīng)元
    的頭像 發(fā)表于 07-01 11:50 ?999次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)分為多少

    的層數(shù)可以根據(jù)具體問(wèn)題和數(shù)據(jù)集來(lái)確定,但通常包括輸入、隱藏和輸出。 輸入 輸入是BP神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 11:02 ?431次閱讀

    bp神經(jīng)網(wǎng)絡(luò)算法過(guò)程包括

    的算法過(guò)程,包括網(wǎng)絡(luò)結(jié)構(gòu)、激活函數(shù)、訓(xùn)練過(guò)程、反向傳播算法、權(quán)重更新策略等。 網(wǎng)絡(luò)結(jié)構(gòu) BP神經(jīng)網(wǎng)絡(luò)由輸入、隱藏和輸出
    的頭像 發(fā)表于 07-04 09:45 ?481次閱讀

    如何構(gòu)建三bp神經(jīng)網(wǎng)絡(luò)模型

    能力。本文將介紹如何構(gòu)建三BP神經(jīng)網(wǎng)絡(luò)模型。 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí) 2.1 神經(jīng)元模型 神經(jīng)元神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-11 10:55 ?510次閱讀

    神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的作用是什么

    的三結(jié)構(gòu)是最基本的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),包括輸入、隱藏和輸出。下面介紹神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-11 11:03 ?916次閱讀