Joone專案實現神經網路

2021-07-27 14:50:42 字數 1928 閱讀 8158

最近在搞

神經網路

,我選擇了和別人不同的學習方法,別人是先搞定數學,在搞理論,最後搞應用。而我是先大致搞清楚

神經網路

的大致流程和bp的基本

演算法,然後找一些開源的

神經網路

框架來學習,直接搞應用,最後在理論和數學不懂的地方再去查資料學習。結果發現這種方法很好,最起碼很能調動我學習這些深奧知識的興趣。搞了沒幾天,竟然可以把

神經網路

用於自己專案中了,爽!

尋找開源

神經網路**。

讀它的源

**過程中發現,這個專案寫得確實很不錯,層次非常清楚,用了幾個核心類(layer,synapse,learner,matrix,neuralnet和monitor)和幾種設計模式 (factory,adapter,observer等)就把

神經網路

複雜的結構構建得清清楚楚,讀它的源

**真的很值,不僅可以搞清楚

神經網路

的原理,還可以學習到如何用程式構建

神經網路

,以下是我讀源

**的收穫:

1)layer層是包含神經元的層次,從一些理論書上得知,雖然層次越多精確度越高,但複雜度也越大,在實際應用中一般都是用3層。在joone裡一般也只用三層,分別是輸入層,隱藏層和輸出層。layer層主要作用有兩個:傳遞資料和激化函式。joone有個基類layer,它有兩個主要函式fwdrun和revrun,乙個是先前傳遞,乙個向後傳遞,先前主要是訓練,向後主要是學習和修改權矩陣。fwdrun和revrun的過程很類似,fwdrun是分為三步:向輸入synapse中取資料,用激化函式處理資料,向輸出synapse中放資料。revrun過程正好相反。layer下面有很多子類,如:linearlayer,sigmoidlayer,sinelayer等,這些子類主要是派生forward和backward函式,這兩個函式主要用途就是用激化函式去處理輸入資料,如linearlayer的激化函式是線性的,sigmoidlayer的激化函式是1/(1+ex)等。

2)synapse主要是構建突觸的層次。它主要是用途有兩個:連線layer和儲存權矩陣。因為基於多執行緒,連線layer主要採用緩衝機制。synapse有個緩衝區,先用fwdget方法取資料,如果緩衝區內有資料就讓執行緒wait。再用forward方法更新資料,最後用fwdput方法輸出資料,如果緩衝區內沒有資料就讓執行緒wait。revget和revput的思想基本相似,中間的backward方法主要用於更新權矩陣。synapse下面有很多子類,如fullsynapse,kohonensynapse等,它們也是在forward和backward方法上面派生,主要差別是在連線機制上面,比如fullsynapse採用全連線機制。

3)layer層和synapse層結構非常類似,互相連線互相傳遞資料,子類繼承機制也非常相似,都是派生forward和backward方法,用基類完成基本的資料傳遞,讓子類完成特殊的資料處理。資料流和工作流清清楚楚,並能適用於任何情況。這不光包含了

神經網路

原理,更是包含了軟體設計藝術,真是值得學學!

4)monitor主要是監視類,用於監視和控制整個網路的執行

5)neuralnet是整個網路的控制中心。用於配置和連線各個層次,並控制網路的開始,結束,和中間迴圈的開始和結束。它的主要程式有三個步驟:一,迴圈初始化所有layer和synapse 二,迴圈進行向前和向後過程 三,結束程式。並且jooner提供了neuralnetlistener介面,用於監視和控制neuralnet的所有過程

基本上jooner的大致思想和過程就是這麼些,但它裡面的細節卻遠不止這些,以後的工作就在於深入學習它的學習機制,資料處理和分布式處理方式。並且可以寫自己的layer和synapse來做試驗。現在終於能體會到數學在程式設計中的應用了。以後爭取把

神經網路

用於自己的專案,比如搜尋引擎和crm。估計可以在專家決策和客戶

資料分析

等方面有些運用吧,不過估計蔡總不太會願意用這些比較虛幻的技術。

神經網路 python實現神經網路

神經網路系列目錄 神經網路 神經網路原理介紹 bp演算法 神經網路 sklearn引數介紹及應用 神經網路實戰 主播綜合評分回歸 實戰 最小二乘法 梯度下降法區別及python實現 本篇博文通過python 實現神經網路,採用sklearn自帶的手寫數字集,看分類情況如何 一 匯入資料集並標準化 資...

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...

神經網路 卷積神經網路

1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...