Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

深度學習的捲積神經網路 -- (使用JavaScript / node.js實作)

5,002 views

Published on

程式人《十分鐘系列》

Published in: Education

深度學習的捲積神經網路 -- (使用JavaScript / node.js實作)

  1. 1. 深度學習的捲積神經網路 ( 使用 ConvNetJS 套件在 node.js 中實作 ) 陳鍾誠 2017 年 6 月 30 日 程式人《十分鐘系列》程式人《十分鐘系列》 本文衍生自維基百科
  2. 2. 最近 ●《深度學習》技術爆紅!
  3. 3. 很多程式人 ● 都開始對《深度學習技術》 感到好奇!
  4. 4. 然後 ●就開始學習 Python ...
  5. 5. 因為 ●那些重要的深度學習套件 ●主要都是支援 Python
  6. 6. 於是 ●為了學習《深度學習技術》
  7. 7. Python 陣營也開始變得更強
  8. 8. 前一陣子
  9. 9. 我也因為深度學習 ●跑去學 Python
  10. 10. 但是 ●卻搞得自己很累!
  11. 11. 因為 ● 我原本的主力是用 node.js 寫 JavaScript ● 突然轉去學 Python 還真的有點適應不良!
  12. 12. 難道 ● 我就不能用 JavaScript 學習《深度學習技術》嗎?
  13. 13. 當我上網找了之後 ● 發現大家還是建議用 Python 學深度學習 不建議用 JavaScript
  14. 14. 像是這位老兄就有同樣的疑問
  15. 15. 於是有人回說 ● node.js 是 設計給 web 用的,不是 給機器學習 用的!
  16. 16. 還有 node.js 陣營的人 ● 也出來說 node.js 不太適合!
  17. 17. 但是也有人認為 ● 或許該重新考慮,因為有幾個 js 的深度學習套件
  18. 18. 這個訊息 ● 給了我一個起點! ● 於是我決定開始整理 node.js 的深度學習資源
  19. 19. 我找了又找 ●試了又試!
  20. 20. 終於發現一個可行的方案! ● 那就是用下列組合 – ConvNetJS: CNN 捲積神經網路 – Neataptic: LSTM 長短期記憶網路
  21. 21. 經過深入研究之後 ● 發現這兩個套件都包含基本的 《多層感知器網路》,而且寫得很不錯! ● Neataptic 還支援 Hopfield 容錯記憶網 路,與 NARX,GRU, Random 等網路架構
  22. 22. 而 ConvNetJS ● 還包含了很好的範例,讓我們可以 在 web 上直接看到《深度學習》的 過程與結果!
  23. 23. 現在 ● 就讓我們從 ConvNetJS 開始,來探 索一下 JavaScript 的深度學習世 界吧!
  24. 24. 這是 ConvNetJS 的首頁
  25. 25. 總共包含了八個展示範例
  26. 26. ConvNetJS 中 ● 最經典的兩個範例是 –《手寫數字辨識》 MNIST –《影像物體辨識》 CIFAR-10
  27. 27. MNIST 資料庫 ● 是 LeCun 教授他們所創建的手寫數字辨識資料庫 http://yann.lecun.com/exdb/mnist/
  28. 28. ConvNetJS 用 MNIST 來 測試其 CNN 網路的表現
  29. 29. 這是 ConvNetJS 使用的神經網路架構 ● 應該算是個簡單的架構! ( 層數很少,只有兩個捲積層 conv ,兩個池化層 pool ,最後使用 softmax 函數輸出 )
  30. 30. 你會看到正確率還不錯
  31. 31. 而且你可以看到每一層 在網頁上的立即展示
  32. 32. 這種網頁互動可是 JavaScript 的強項
  33. 33. 我們從網頁上可以明顯地看到辨識結果 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 數字 7 的輸出最強 ( 最白 ) 所以辨識結果為 7
  34. 34. 透過這個範例 ● 我們應該很容易理解 CNN 捲積神 經網路,到底在做些甚麼事了!
  35. 35. 透過捲積一層層的放大區塊 提取更高層次的特徵 http://cs231n.github.io/convolutional-networks/
  36. 36. 從初始特徵開始
  37. 37. 捲積綜合出上層特徵 http://cs231n.github.io/convolutional-networks/
  38. 38. 結合反傳遞演算法
  39. 39. 最後辨識出物體到底是那一類
  40. 40. 這種從影像辨識領域 ●發展出來的神經網路
  41. 41. 後來也被用在 ● 像 AlphoGo 這樣的圍棋程式上 ● 成為非常重要的深度學習神經網 路模型!
  42. 42. 除了剛剛的手寫數字辨識範例 ● ConvNetJS 還有另一個 CIFAR-10 影像物體辨識範例。
  43. 43. CIFAR-10 一樣是個資料庫 ● 只不過是包含十種物體的標記影 像資料庫。
  44. 44. Cifar10 的十種物體是 飛機 汽車 鳥 貓 鹿 狗 青蛙 馬 船 卡車 https://www.cs.toronto.edu/~kriz/cifar.html
  45. 45. ConvNetJS 的 Cifar-10 範例
  46. 46. 必須把網頁開一陣子之後 ● 正確率才會逐漸提高!
  47. 47. 不過你也可以選擇 載入預先訓練好的網路 http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html
  48. 48. 就可以得到 80% 以上的正確率 綠色為標準答案,綠色排第一個,就是預測正確的案例!
  49. 49. 這樣 ● 我們就不需要等個幾十分鐘 ● 也能立刻擁有有還不錯的 CNN 網路 模型了!
  50. 50. 但是 ● 上面這些範例,是給想理解 《深度學習技術》的一般人看的!
  51. 51. 對於程式人
  52. 52. 我們更想瞭解的是 ● 該怎麼寫程式建構一個 CNN 捲積 神經網路,來做上面的那些事情!
  53. 53. 雖然我們可以用 瀏覽器的《檢視原始碼》功能
  54. 54. 看到這個專案的原始碼
  55. 55. 也可以直接在 github 上面 下載或檢視 javascript 原始碼
  56. 56. 但光這個範例的 Javascript 程式就有六百多行
  57. 57. 這還不包含 ●真正的 convnet.js 網路模型 與學習算法!
  58. 58. 通常 ●我們學程式,都會從 Hello World 開始!
  59. 59. 那麼 ConvNetJS ●有沒有像 Hello World 這麼 簡單的範例呢?
  60. 60. 我查了又查
  61. 61. 沒有找到這樣的範例
  62. 62. 於是決定自己來
  63. 63. 先追蹤程式碼
  64. 64. 尋找關鍵點
  65. 65. 想辦法拼湊出極簡單的範例
  66. 66. 讓我們能在 node.js 直接執行
  67. 67. 不需要在網頁裡執行 ●這樣程式碼會變得更乾淨!
  68. 68. 例如 cifar10predict.js 程式 ● 會載入預先訓練好的網路,並預測輸入檔的影像類別
  69. 69. 我已經把範例放在 ai6 專案裏了
  70. 70. 您可以在 ● book/nn/convnetjs 這個資料夾中看到 cifar10predict.js 這個檔案 https://github.com/ccckmit/ai6/blob/master/book/nn/convnetjs/cifar10predict.js
  71. 71. 總共有四個範例 https://github.com/ccckmit/ai6/tree/master/book/nn/convnetjs
  72. 72. 您可以透過 git + npm 下載安裝
  73. 73. 然後就可以執行範例了 $ node regression $ node classified2d $ node mnistPredict mnist/3.png $ node cifar10predict cifar10/horse1.png
  74. 74. 像是 cifar10predict.js 輸入為一個影像檔,輸出為該影像的類別
  75. 75. 這些範例的程式碼 ●大概都在 50 行左右,應該很 容易理解!
  76. 76. 這樣 ● 我們就可以透過 ConvNetJS ,踏出深 度學習的第一步 ● 認識深度學習中非常重要的《捲積神 經網路》程式到底該如何使用,進而 研究背後的原始碼!
  77. 77. 從應用到原理 ● 透過簡單的 node.js 安裝 ● 以及我所熟悉的 javascript 程式 ● 逐漸掌握深度學習的理論與實作!
  78. 78. 這就是我們今天的
  79. 79. 十分鐘系列
  80. 80. 希望您會喜歡!
  81. 81. 我們下回見!
  82. 82. Bye Bye!

×