當前位置:首頁 » 編程語言 » 神經網路演算法c語言

神經網路演算法c語言

發布時間: 2022-12-25 01:40:34

Ⅰ 請問高手,神經網路模型與學習演算法用什麼語言編程比較好JAVA 、c語言還是C++等。謝謝!

神經網路模型?不會是你的課題吧,大型演算法應用(有界面),當然用C++(效率高)來寫,JAVA次之(略簡單)。
學習演算法的精髓就用C,C++和JAVA作為高級語言打包了很多基礎型的演算法。

Ⅱ 前饋神經網路(BP演算法)和後饋神經網路(優化) 要求C語言實現!

這個太難了撒,只會用C編什麼運算之類的,無能為力,慚愧啊

Ⅲ c語言編程實現 基於最小錯誤率的貝葉斯決策

貝葉斯決策理論(Bayesian Decision Theory)

貝葉斯決策理論概述
貝葉斯決策理論是主觀貝葉斯派歸納理論的重要組成部分。
貝葉斯決策就是在不完全情報下,對部分未知的狀態用主觀概率估計,然後用貝葉斯公式對發生概率進行修正,最後再利用期望值和修正概率做出最優決策。
貝葉斯決策理論方法是統計模型決策中的一個基本方法,其基本思想是:
★已知類條件概率密度參數表達式和先驗概率
★利用貝葉斯公式轉換成後驗概率
★根據後驗概率大小進行決策分類

貝葉斯公式

設D1,D2,……,Dn為樣本空間S的一個劃分,如果以P(Di)表示事件Di發生的概率,且P(Di)>0(i=1,2,…,n)。對於任一事件x,P(x)>0,如圖

貝葉斯決策理論分析

(1)如果我們已知被分類類別概率分布的形式和已經標記類別的訓練樣本集合,那我們就需要從訓練樣本集合中來估計概率分布的參數。在現實世界中有時會出現這種情況。(如已知為正態分布了,根據標記好類別的樣本來估計參數,常見的是極大似然率和貝葉斯參數估計方法)
(2)如果我們不知道任何有關被分類類別概率分布的知識,已知已經標記類別的訓練樣本集合和判別式函數的形式,那我們就需要從訓練樣本集合中來估計判別式函數的參數。在現實世界中有時會出現這種情況。(如已知判別式函數為線性或二次的,那麼就要根據訓練樣本來估計判別式的參數,常見的是線性判別式和神經網路)
(3)如果我們既不知道任何有關被分類類別概率分布的知識,也不知道判別式函數的形式,只有已經標記類別的訓練樣本集合。那我們就需要從訓練樣本集合中來估計概率分布函數的參數。在現實世界中經常出現這種情況。(如首先要估計是什麼分布,再估計參數。常見的是非參數估計)
(4)只有沒有標記類別的訓練樣本集合。這是經常發生的情形。我們需要對訓練樣本集合進行聚類,從而估計它們概率分布的參數。(這是無監督的學習)
(5)如果我們已知被分類類別的概率分布,那麼,我們不需要訓練樣本集合,利用貝葉斯決策理論就可以設計最優分類器。但是,在現實世界中從沒有出現過這種情況。這里是貝葉斯決策理論常用的地方。
問題:假設我們將根據特徵矢量x 提供的證據來分類某個物體,那麼我們進行分類的標準是什麼?decide wj, if(p(wj|x)>p(wi|x))(i不等於j)應用貝葉斯展開後可以得到p(x|wj)p(wj)>p(x|wi)p(wi)即或然率p(x|wj)/p(x|wi)>p(wi)/p(wj),決策規則就是似然率測試規則。
結論:
對於任何給定問題,可以通過似然率測試決策規則得到最小的錯誤概率。這個錯誤概率稱為貝葉斯錯誤率,且是所有分類器中可以得到的最好結果。最小化錯誤概率的決策規則就是最大化後驗概率判據。

貝葉斯決策判據

貝葉斯決策理論方法是統計模式識別中的一個基本方法。貝葉斯決策判據既考慮了各類參考總體出現的概率大小,又考慮了因誤判造成的損失大小,判別能力強。貝葉斯方法更適用於下列場合:
(1) 樣本(子樣)的數量(容量)不充分大,因而大子樣統計理論不適宜的場合。
(2) 試驗具有繼承性,反映在統計學上就是要具有在試驗之前已有先驗信息的場合。用這種方法進行分類時要求兩點:
第一,要決策分類的參考總體的類別數是一定的。例如兩類參考總體(正常狀態Dl和異常狀態D2),或L類參考總體D1,D2,…,DL(如良好、滿意、可以、不滿意、不允許、……)。
第二,各類參考總體的概率分布是已知的,即每一類參考總體出現的先驗概率P(Di)以及各類概率密度函數P(x/Di)是已知的。顯然,0≤P(Di)≤1,(i=l,2,…,L),∑P(Di)=1。
對於兩類故障診斷問題,就相當於在識別前已知正常狀態D1的概率戶(D1)和異常狀態0:的概率P(D2),它們是由先驗知識確定的狀態先驗概率。如果不做進一步的仔細觀測,僅依靠先驗概率去作決策,那麼就應給出下列的決策規則:若P(D1)>P(D2),則做出狀態屬於D1類的決策;反之,則做出狀態屬於D2類的決策。例如,某設備在365天中,有故障是少見的,無故障是經常的,有故障的概率遠小於無故障的概率。因此,若無特B,j明顯的異常狀況,就應判斷為無故障。顯然,這樣做對某一實際的待檢狀態根本達不到診斷的目的,這是由於只利用先驗概率提供的分類信息太少了。為此,我們還要對系統狀態進行狀態檢測,分析所觀測到的信息。

Ⅳ 深入學習C語言的具體步驟

1、入門後多看代碼
在有一定基礎以後一定要多看別人的代碼。 注意代碼中的演算法和數據結構。 畢竟學C之後的關口就是演算法和數據結構。提到數據結構,指針是其中重要的一環,絕大多數的數據結構是建立在指針之上的,如鏈表、隊列、樹、圖等等,所以只有學好指針才能真正學好C。別的方面也要關注一下,諸如變數的命名、庫函數的用法等等。有些庫函數是經常用到的。對於這些函數的用法就要牢牢記住。
2、要自己動手
編程序是個實乾的活,光說不練不行。剛開始學的時候可以多練習書上的習題。 對於自己不明白的地方,自己編個小程序實驗一下是最好的方法,能給自己留下深刻的印象。 自己動手的過程中要不斷糾正自己不好的編程習慣和認識錯誤。有一定的基礎以後可以嘗試編一點小游戲,照著編作為練習。基礎很扎實的時候,可以編一些關於數據結構方面的東西。之後.....學匯編、硬體知識。
3、選擇一個好的編譯
GCC或者VS都是一個號的選擇
4、關於養成良好的編程習慣

Ⅳ 神經網路演算法

20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發明了感知機(Perceptrons)。

⼀個感知器接受⼏個⼆進制輸⼊, ,並產⽣⼀個⼆進制輸出:

如上圖所示的感知機有三個輸⼊: 。通常可以有更多或更少輸⼊。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重後的總和 ⼩於等於或者⼤於閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數,⼀個神經元的參數。⽤更精確的代數形式如下:

給三個因素設置權重來作出決定:

可以把這三個因素對應地⽤⼆進制變數 來表⽰。例如,如果天⽓好,我們把

,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。

這三個對於可能對你來說,「電影好不好看」對你來說最重要,而天氣顯得不是那麼的重要。所以你會這樣分配權值: ,然後定義閾值threshold=5。

現在,你可以使⽤感知器來給這種決策建⽴數學模型。

例如:

隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。

現在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那麼感知器的規則可以重寫為:

引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們後⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。

感知機是首個可以學習的人工神經網路,它的出現引起的神經網路的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經網路的發展是具有重要意義的。

通過上面的感知機的觀察我們發現一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉。也就是說,感知機的輸出是一個階躍函數。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調整好久參數也不會發生輸出的變化。

這樣階躍的跳變並不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調整後,輸出也相應的發生微小的改變。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數。由此我們引入了S型神經元。

S型神經元使用 S 型函數,也叫Sigmoid function函數,我們用它作為激活函數。其表達式如下:

圖像如下圖所示:

利⽤實際的 σ 函數,我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數的平滑特性,正是關鍵因素,⽽不是其細部形式。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經元產⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們

∆output 可以很好地近似表⽰為:

上面的式子是⼀個反映權重、偏置變化和輸出變化的線性函數。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經元和感知器本質上是相同的,但S型神經元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。

有了對S型神經元的了解,我們就可以介紹神經網路的基本結構了。具體如下:

在⽹絡中最左邊的稱為輸⼊層,其中的神經元稱為輸⼊神經元。最右邊的,即輸出層包含有輸出神經元,在圖中,輸出層只有⼀個神經元。中間層,既然這層中的神經元既不是輸⼊也不是輸出,則被稱為隱藏層。

這就是神經網路的基本結構,隨著後面的發展神經網路的層數也隨之不斷增加和復雜。

我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折盪漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。

從單層神經網路(感知機)開始,到包含一個隱藏層的兩層神經網路,再到多層的深度神經網路,一共有三次興起過程。詳見下圖。

我們希望有⼀個演算法,能讓我們找到權重和偏置,以⾄於⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們如何實現這個⽬標,我們定義⼀個代價函數:

這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數據的個數,
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數;有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數 C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對於所有的訓練輸⼊ x, y(x) 接近於輸出 a 時。因

此如果我們的學習演算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎麼好了,那意味著對於⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練演算法的⽬的,是最⼩化權重和偏置的代價函數 C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的演算法來達到這個⽬的。

下面我們將代價函數簡化為C(v)。它可以是任意的多元實值函數, 。
注意我們⽤ v 代替了 w 和 b 以強調它可能是任意的函數,我們現在先不局限於神經⽹絡的環境。

為了使問題更加簡單我們先考慮兩個變數的情況,想像 C 是⼀個只有兩個變數 和 的函數,我們的目的是找到 和 使得C最小。

如上圖所示,我們的目的就是找到局部最小值。對於這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數來求解C的極值點。但是對於神經網路來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數不只是兩維,有可能是億萬維的。對於一個高維的函數C(v)求導數幾乎是不可能的。

在這種情況下,有人提出了一個有趣的演算法。想像一下一個小球從山頂滾下山谷的過程, 我們的⽇常經驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發我們的想像⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節,不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那麼我們將會採取什麼樣的運動學定律來讓球體能夠總是滾落到⾕底呢?

為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發⽣什麼情況。微積分告訴我們 C 將會有如下變化:

也可以用向量表示為

現在我們的問題就轉換為不斷尋找一個小於0的∆C,使得C+∆C不斷變小。

假設我們選取:

這⾥的 η 是個很⼩的正數(稱為學習速率),於是

由於 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規則去改變 v,那麼 C
會⼀直減⼩,不會增加。

所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。

總結⼀下,梯度下降演算法⼯作的⽅式就是重復計算梯度 ∇C,然後沿著相反的⽅向移動,沿著⼭⾕「滾落」。我們可以想像它像這樣:

為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。

知道了兩個變數的函數 C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變數 的多元函數。 ∆C 將會變為:

其中, ∇C為

∆v為:

更新規則為:

在回到神經網路中,w和b的更新規則為:

前面提到神經⽹絡如何使⽤梯度下降演算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們並沒有討論如何計算代價函數的梯度。這里就需要用到一個非常重要的演算法:反向傳播演算法(backpropagation)。

反向傳播演算法的啟示是數學中的鏈式法則。

四個方程:

輸出層誤差方程:

當前層誤差方程:

誤差方程關於偏置的關系:

誤差方程關於權值的關系

演算法描述:

檢視這個演算法,你可以看到為何它被稱作反向傳播。我們從最後⼀層開始向後計算誤差向量δ。這看起來有點奇怪,為何要從後⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數是⽹絡輸出的函數的結果。為了理解代價隨前⾯層的權重和偏置變化的規律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。

參考鏈接: http://neuralnetworksanddeeplearning.com/

Ⅵ 「高精度神經網路(NN)演算法C語言開發」這個項目能賺多少錢

裝多少錢,首先要看你的項目的成熟度,功能強大好用等。

其次就是銷售 公關能力。一個軟體,沒人能說出它的真實價值。最多是個估計,而且不準確。
就好比oracle 你賣一套給學校,裝不了多少錢,人家也知道學校沒多少錢。可能幾萬就賣了。
但是買個企業 如移動 肯定幾十上百萬。

可以說只要成熟的項目都能賺錢,多少是看個人情況。

Ⅶ 用C語言解決BP神經網路演算法

囧,用C語言幹嘛,matlab裡面帶有神經網路函數庫的……

55555,我的論文也是用神經網路模擬……

我的隱藏層個數都沒確定……輸入節點數也沒有定……

matlab神經網路函數庫的程序,在ilovematlab論壇上有。

Ⅷ c語言實現*/遺傳演算法改進BP神經網路原理和演算法實現怎麼弄

遺傳演算法有相當大的引用。遺傳演算法在游戲中應用的現狀在遺傳編碼時, 一般將瓦片的坐標作為基因進行實數編碼, 染色體的第一個基因為起點坐標, 最後一個基因為終點坐標, 中間的基因為路徑經過的每一個瓦片的坐標。在生成染色體時, 由起點出發, 隨機選擇當前結點的鄰居節點中的可通過節點, 將其坐標加入染色體, 依此循環, 直到找到目標點為止, 生成了一條染色體。重復上述操作, 直到達到指定的種群規模。遺傳演算法的優點:1、遺傳演算法是以決策變數的編碼作為運算對象,可以直接對集合、序列、矩陣、樹、圖等結構對象進行操作。這樣的方式一方面有助於模擬生物的基因、染色體和遺傳進化的過程,方便遺傳操作運算元的運用。另一方面也使得遺傳演算法具有廣泛的應用領域,如函數優化、生產調度、自動控制、圖像處理、機器學習、數據挖掘等領域。2、遺傳演算法直接以目標函數值作為搜索信息。它僅僅使用適應度函數值來度量個體的優良程度,不涉及目標函數值求導求微分的過程。因為在現實中很多目標函數是很難求導的,甚至是不存在導數的,所以這一點也使得遺傳演算法顯示出高度的優越性。3、遺傳演算法具有群體搜索的特性。它的搜索過程是從一個具有多個個體的初始群體P(0)開始的,一方面可以有效地避免搜索一些不必搜索的點。另一方面由於傳統的單點搜索方法在對多峰分布的搜索空間進行搜索時很容易陷入局部某個單峰的極值點,而遺傳演算法的群體搜索特性卻可以避免這樣的問題,因而可以體現出遺傳演算法的並行化和較好的全局搜索性。4、遺傳演算法基於概率規則,而不是確定性規則。這使得搜索更為靈活,參數對其搜索效果的影響也盡可能的小。5、遺傳演算法具有可擴展性,易於與其他技術混合使用。以上幾點便是遺傳演算法作為優化演算法所具備的優點。遺傳演算法的缺點:遺傳演算法在進行編碼時容易出現不規范不準確的問題。

Ⅸ 用c語言寫一個神經網路分類器大概要多少行代碼

RBF網路能夠逼近任意的非線性函數,可以處理系統內的難以解析的規律性,具有良好的泛化能力,並有很快的學習收斂速度,已成功應用於非線性函數逼近、時間序列分析、數據分類、模式識別、信息處理、圖像處理、系統建模、控制和故障診斷等。
簡單說明一下為什麼RBF網路學習收斂得比較快。當網路的一個或多個可調參數(權值或閾值)對任何一個輸出都有影響時,這樣的網路稱為全局逼近網路。由於對於每次輸入,網路上的每一個權值都要調整,從而導致全局逼近網路的學習速度很慢。BP網路就是一個典型的例子。
如果對於輸入空間的某個局部區域只有少數幾個連接權值影響輸出,則該網路稱為局部逼近網路。常見的局部逼近網路有RBF網路、小腦模型(CMAC)網路、B樣條網路等。

熱點內容
咸陽市移動dns伺服器地址 發布:2024-05-04 20:39:19 瀏覽:440
小車哪個配置好 發布:2024-05-04 20:38:38 瀏覽:795
周長的演算法 發布:2024-05-04 20:37:46 瀏覽:369
保衛蘿卜2安卓版什麼時候更新 發布:2024-05-04 20:08:48 瀏覽:203
建工黨建宣傳片腳本 發布:2024-05-04 20:07:31 瀏覽:219
long在c語言中 發布:2024-05-04 19:54:39 瀏覽:782
svn在本地文件夾 發布:2024-05-04 19:50:21 瀏覽:447
crontab不執行shell腳本 發布:2024-05-04 19:49:38 瀏覽:82
安卓機買哪個好2021 發布:2024-05-04 19:49:38 瀏覽:845
apriori演算法改進 發布:2024-05-04 19:24:08 瀏覽:46