内容简介:JavaScript 實現類神經網路 (瀏覽器 Deep Learning 好棒棒)
記得古時候有寫過一篇「 用 Machine Learning 辨識鳶尾花 」搞搞 Machine Learning 建立 貝氏分類器 來辨識鳶尾花,最近想在 JavaScript 上面跑 Neural Network ( 類神經網路 ) 的演算法,刷刷存在感。很久以前有用過 Java 手刻類神經網路演算法,用來辨識昆蟲聲音,太久 Code 不知道丟到哪了,現在連 Bug 都寫不太出來。前陣子剛好 Google 到國外有個神人的 NodeJS Project ( node-neural-network ) 剛好符合我的需求,就先拿來玩看看囉。
用 JavaScript Deep Learning 辨識鳶尾花
由於我手邊沒有什麼數據可以跑,影像處理就是跑 PlayBoy Lenna 圖,AI 資料處理就是跑 鳶尾花 這些老梗,沒什麼創意,如果有人知道比較新潮的數據庫,可否麻煩留言告訴我一下,我也想趕流行!
先說明一下類神經網路的概念,基本上就是複合的迴歸分析,透過神經元的訓練,理論上可以學習任何模型,當然你給的 Feature 要合理,訓練樣本要夠充足 (類神經依賴大量的訓練資料)。可以把類神經網路想像為一個黑盒子 f(x),不停的告訴它什麼樣的 Input 會得到什麼樣的 Output,慢慢的累績訓練,有一天這個 f(x) 就會跟你說:「媽,我好像懂了什麼?」,表示收斂了學習完成,可以開始進行預測囉。典型的類神經網路長得像下面這樣:
上圖左邊的是輸入神經元 Input Layer,表示我們資料的 Feature 維度特徵值;中間的是隱藏層,可以多層多節點,一般來說數量是 Input 神經元的 1.5 倍;最後接上的是輸出層 Output Layer,就是我們預期的預測結果。單單這些複雜的神經元連接方法,就有上百篇論文再討論,我們今天測試的連接方法是最典型的模型。
實現 JavaScript 類神經網路機器學習
先說明一下程式執行的流程:
- 建構類神經網路 4-6-3 結構
- 載入 iris.csv 資料檔並且進行正規劃,將數值投影到 0~1 的範圍
- 每個種類隨機抽出三組後,剩餘的進入神經網路進行訓練 (因為資料樣本不多,所以隨機重複訓練 10,000 次)
- 最後從前一個步驟隨機抽出的數據進行預測,並計算正確率
- 將訓練好的網路存為 Json File,未來可以讀取後直接進行預測
測試的鳶尾花資料有四組 Feature,花分成三個種類,因此 Input 4 個節點,Output 3 個節點,中間的隱藏層使用 Input 節點的 1.5 倍,所以隱藏層使用了 6 個節點。連接方式與上圖相同,完整的程式碼已經放到 GitHub ,有興趣的可以輸入以下命令進行測試:
git clone https://github.com/samejack/blog-content
cd sj-nn
npm install
nom run example
執行畫面如下:
執行了幾次,正確率表現還不錯。這樣的規模說真的只會是玩具,聽說谷歌的網路都上億個節點,真正的深度學習。類神經屬於機器學習 (Machine Learning ) 中的 監督式學習 ,只在有足夠的資料下,可以自動學習找出的特徵與結果的關係。由於這次使用的是 JavaScript 語言,因此也可以在瀏覽器中執行, 作者的網站 上還有許多有趣而且很威的 Example,不管是訓練 XOR Gate 或者辨識貓等等,有興趣的可以進去看看囉,很廢的 JavaScript 深度學習結束了,下次見。
以上所述就是小编给大家介绍的《JavaScript 實現類神經網路 (瀏覽器 Deep Learning 好棒棒)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。