翻了下以前的blog,08年12月寫過乙個感知器的程式。一下子已經2023年6月了。期間看過一些bp,cnn,svm的資料,大多是生吞活剝,不甚了了。雖然,現在的熱門似乎是貝葉斯,概率,svm。我始終對bp更感興趣。可能是bp足夠簡單吧。
真的動手code,還有很長的一段路,走到**算**了。--2011-6-8
首先是神經元的設計。乙個神經元包括輸入,輸出,權值,傳輸函式。各個層的神經元有一致的結構。
neuro
neuro** pre;
neuro** next;
float output;
float* w;
float b;
int f;
輸入應該是一既定長度的向量xn,因此輸入前,需要對輸入的原始資料做尺度歸一化。
設計時輸入代表的是乙個介面,從這個介面中可以讀到輸入資料。因此neuro*=pre;是乙個指向神經元的指標。
程式將通過指標指向的神經元讀取output。 定義中neuro**=pre,是因為輸入可以是乙個變長的向量。
輸出是乙個標量,float 型別。不解釋。
考慮到網路需要前向傳播。,還需要乙個指標指向下面的神經元neuro**=next;
有了這兩個指標後,神經元愛怎麼連就怎麼連了。。這種願景當然只能意淫下。所以說神經網路更像是神經樹。
權值w是和輸入同長的向量wn。涉及到初始化和更新的問題。b是乙個標量。有些神經元需要共享權值。如cnn中,乙個featuremap中的所有神經元共用乙個5*5的權值向量。本來想通過共享記憶體的方式解決,但是我想featuremap,更像是神經元之間的一種協作方式。
因此在神經元外來解決共享的問題。可以定義featuremap為一種協作機制。其實整個bp網路也是一種協作機制。
傳輸函式f是根據f值到函式表中找的。
神經元是神經網路中的最小單元。
輸入層的神經元,f函式為-1,表示不計算output。
網路的儲存。一種考慮是用cv::filestorage,另一中是序列化。改天繼續。。2011-6-8
BP神經網路設計
1 網路層數 大部分單個隱藏層即可 2 輸入層神經元個數 輸入變數的個數通常都是由問題的外部描述所確定的。例如,如果有4個外部變數作為網路的輸入,那麼網路就有4個輸入。但是,這是不是意味著輸入層的神經元個數就為4呢?答案是否定的 因為每個神經元的輸入可以有無數個,所以,通常當輸入變數較多的時候,輸入...
模式識別演算法 BP網路設計
bp網路能學習和存貯大量的輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的 誤差平方和 最小。bp神經網路 模型拓撲結構包括輸入層 input 隱層 hide layer 和輸出層 output laye...
BP網路詳解
神經網路是由大量簡單的處理單元來模擬真實人腦神經網路的機構和功能以及若干基本特性,是乙個高度複雜的非線性自適應動態處理系統。按照連線模式,神經網路模型可分為前饋式神經網路和反饋式神經網路,bp網路屬於前饋式。bp演算法的提出 rumelhart,mcclelland於1985年提出了bp網路的誤差反...