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

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

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

神經(jīng)元和神經(jīng)網(wǎng)絡層的標準C++定義

C語言專家集中營 ? 來源:未知 ? 作者:伍文輝 ? 2018-04-15 10:40 ? 次閱讀

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

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

1.感知器

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

2.線性單元

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

3.誤差準則

使用的是一個常用的誤差度量標準,平方誤差準則。公式如下。

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

4.梯度下降推導

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

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

2)求梯度。

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

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

梯度的表達式如下:

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

其中xid為樣本中第d個觀測值對應的一個輸入分量xi。這樣,訓練過程中參數(shù)w的更新表達式如下(其中添加了一個學習率,也就是下降的步長):

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

對于學習率選擇的問題,一般較小是能夠保證收斂的,看下圖吧。

5.增量梯度下降

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

6.梯度檢驗

這是一個比較實用的內(nèi)容,如何確定自己的代碼就一定沒有錯呢?因為在求梯度的時候是很容易犯錯誤的,我就犯過了,嗨,調(diào)了兩天才找出來,一個數(shù)組下表寫錯了,要是早一點看看斯坦福大學的深度學習基礎教程就好了,這里只是截圖一部分,有時間去仔細看看吧。

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

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

1.Sigmoid神經(jīng)元

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

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

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

3.神經(jīng)元和神經(jīng)網(wǎng)絡層的標準C++定義

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

1

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

原文標題:BP神經(jīng)網(wǎng)絡原理及C++實戰(zhàn)

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    人工神經(jīng)網(wǎng)絡算法的學習方法與應用實例(pdf彩版)

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

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

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

    【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡基礎知識

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

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

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

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

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

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

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

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

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

    卷積神經(jīng)網(wǎng)絡簡介:什么是機器學習?

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

    模糊控制與神經(jīng)網(wǎng)絡的資料總結(jié)

    如圖所示拓撲結(jié)構(gòu)的單隱前饋網(wǎng)絡,一般稱為三前饋網(wǎng)或三感知器,即:輸入、中間層(也稱隱
    發(fā)表于 03-01 10:09 ?17次下載
    模糊控制與<b class='flag-5'>神經(jīng)網(wǎng)絡</b>的資料總結(jié)

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

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

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

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

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

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

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

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

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

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