<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給AI研習社
      發送

      0

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      本文作者: AI研習社 2017-04-20 17:30
      導語:怎樣用最簡單的方式實現神經網絡?

      雷鋒網按:本文作者陶言祺,原文載于作者個人博客,雷鋒網已獲授權。

      聲明:本文是根據英文教程 A Neural Network in 11 lines of Python(用 11 行 Python 代碼實現的神經網絡)學習總結而來,關于更詳細的神經網絡的介紹可以參考我的另一篇博客:從感知機到人工神經網絡

      如果你讀懂了下面的文章,你會對神經網絡有更深刻的認識,有任何問題,請多指教。

        Very simple Neural Network

      首先確定我們要實現的任務:

      一篇文章教你用 11 行 Python 代碼實現神經網絡


      輸出的為樣本為 X 為 4*3,有 4 個樣本 3 個屬性,每一個樣本對于這一個真實值 y,為 4*1 的向量,我們要根據 input 的值輸出與 y 值損失最小的輸出。

        Two Layer Neural Network

      首先考慮最簡單的神經網絡,如下圖所示:

      一篇文章教你用 11 行 Python 代碼實現神經網絡


      輸入層有3個神經元(因為有3個屬性),輸出為一個值,w1,w2,w3為其權重。輸出為: 

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      這里的f為sigmoid函數: 

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      一個重要的公式: 

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      神經網絡的優化過程是:

      1. 前向傳播求損失 
      2. 反向傳播更新w

      簡單是實現過程如下所示:

      import numpy as np

      # sigmoid function

      # deriv=ture 是求的是導數

      def nonlin(x,deriv=False):

          if(deriv==True):

              return x*(1-x)

          return 1/(1+np.exp(-x))

      # input dataset

      X = np.array([  [0,0,1],

                      [1,1,1],

                      [1,0,1],

                      [0,1,1] ])

      # output dataset            

      y = np.array([[0,1,1,0]]).T

      # seed random numbers to make calculation

      np.random.seed(1)

      # initialize weights randomly with mean 0

      syn0 = 2*np.random.random((3,1)) - 1

      # 迭代次數

      for iter in xrange(10000):

          # forward propagation

          # l0也就是輸入層

          l0 = X

          l1 = nonlin(np.dot(l0,syn0))

          # how much did we miss?

          l1_error = y - l1

          # multiply how much we missed by the 

          # slope of the sigmoid at the values in l1

          l1_delta = l1_error * nonlin(l1,True)

          # update weights

          syn0 += np.dot(l0.T,l1_delta)

      print "Output After Training:"

      print l1

      注意這里整體計算了損失,X(4*3) dot w(3*1) = 4*1 為輸出的 4 個值,所以 
      l1_error = y - l1 同樣為一個 4*1 的向量。

      重點理解:

         # slope of the sigmoid at the values in l1

         #nonlin(l1,True),這里是對sigmoid求導

         #前向計算,反向求導

         l1_delta = l1_error * nonlin(l1,True)  

        # update weights

         syn0 += np.dot(l0.T,l1_delta)

      下面看一個單獨的訓練樣本的情況,真實值y==1,訓練出來的為0.99已經非常的接近于正確的值了,因此這時應非常小的改動syn0的值,因此:

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      運行輸出結果為,可以看到其訓練的不錯:

      Output After Training:
      Output After Training:[[ 0.00966449]
      [ 0.99211957]
      [ 0.99358898]
      [ 0.00786506]]123456123456

        Three Layer Neural Network

      我們知道,兩層的神經網絡即為一個小的感知機(參考:感知機到人工神經網絡),它只能出來線性可分的數據,如果線性不可分,則其出來的效果較差,如下圖所示的數據:

       一篇文章教你用 11 行 Python 代碼實現神經網絡

      如果仍用上述的代碼(2層的神經網絡)則其結果為:

      Output After Training:[[ 0.5]
      [ 0.5]
      [ 0.5]
      [ 0.5]]1234512345

      因為數據并不是線性可分的,因此它是一個非線性的問題,神經網絡的強大之處就是其可以搭建更多的層來對非線性的問題進行處理。

      下面我將搭建一個含有5個神經元的隱含層,其圖形如下,(自己畫的,略丑),這來要說下神經網絡其實很簡單,只要你把層次的結果想清楚。

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      要搞清楚w的維度:第一層到第二層的w為3*5,第二層到第三層的W為5*1,因此還是同樣的兩個步驟,前向計算誤差,然后反向求導更新w。 

      完整的代碼如下:

      import numpy as np

      def nonlin(x,deriv=False):

          if(deriv==True):

              return x*(1-x)

          return 1/(1+np.exp(-x))

      X = np.array([[0,0,1],

                  [0,1,1],

                  [1,0,1],

                  [1,1,1]])

      y = np.array([[0],

                  [1],

                  [1],

                  [0]])

      np.random.seed(1)

      # randomly initialize our weights with mean 0

      syn0 = 2*np.random.random((3,5)) - 1

      syn1 = 2*np.random.random((5,1)) - 1

      for j in xrange(60000):

          # Feed forward through layers 0, 1, and 2

          l0 = X

          l1 = nonlin(np.dot(l0,syn0))

          l2 = nonlin(np.dot(l1,syn1))

          # how much did we miss the target value?

          l2_error = y - l2

          if (j% 10000) == 0:

              print "Error:" + str(np.mean(np.abs(l2_error)))

          # in what direction is the target value?

          # were we really sure? if so, don't change too much.

          l2_delta = l2_error*nonlin(l2,deriv=True)

          # how much did each l1 value contribute to the l2 error (according to the weights)?

          l1_error = l2_delta.dot(syn1.T)

          # in what direction is the target l1?

          # were we really sure? if so, don't change too much.

          l1_delta = l1_error * nonlin(l1,deriv=True)

          syn1 += l1.T.dot(l2_delta)

          syn0 += l0.T.dot(l1_delta)

      print l2

      運行的結果為:

      Error:0.500628229093

      Error:0.00899024507125

      Error:0.0060486255435

      Error:0.00482794013965

      Error:0.00412270116481

      Error:0.00365084766242

      # 這一部分是最后的輸出結果

      [[ 0.00225305]
      [ 0.99723356]
      [ 0.99635205]
      [ 0.00456238]]

      如果上面的代碼看懂了,那么你就可以自己搭建自己的神經網絡了,無論他是多少層,或者每個層有多少個神經元,都能很輕松的完成。當然上面搭建的神經網絡只是一個很簡單的網絡,同樣還有許多的細節需要學習,比如說反向傳回來的誤差我們可以用隨機梯度下降的方法去更新W,同時還可以加上偏置項b,還有學習率 α 等問題。

      雷鋒網相關文章:

      不到 200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)

      如何在 i5 上實現 20 倍的 Python 運行速度?

      詳解 Kaggle 房價預測競賽優勝方案:用 Python 進行全面數據探索

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      一篇文章教你用 11 行 Python 代碼實現神經網絡

      分享:
      相關文章

      編輯

      聚焦數據科學,連接 AI 開發者。更多精彩內容,請訪問:yanxishe.com
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 97碰碰碰人妻视频无码| 国产成人精品久久综合| 日韩精品一区二区蜜臀av| 韩国三级网址| 国产美女亚洲精品久久久毛片| 醉酒后少妇被疯狂内射视频| 久久人妻无码AⅤ毛片评价| 18禁男女爽爽爽午夜网站免费| 亚洲熟伦熟女新五十路熟妇| 黑人av无码一区| 久草福利资源站| 久久亚洲色www成人网址| 亚洲精品另类有吗中文字幕| 潮喷在线播放| 精品国产午夜福利在线观看| 欧美精品国产综合久久| 人妻少妇视频| 亚洲精品在线视频自拍| 亚洲天堂自拍| 精品无码专区久久久水蜜桃| 国产怡春院无码一区二区| 人妻日韩精品中文字幕| 关岭| 久久夜色国产噜噜亚洲av| 久久人妻在线| 精品无码专区毛片| 91精品91久久久久久| 久草精品视频| 国产精品视频一区二区三区观看| 国产精品久久久久影院嫩草| 先锋影音av最新资源| 国产亚洲精品在av| 松下纱荣子被c到高潮下不了床 | 欧美色色色| 97人妻视频| 国产精品美女黄色av| 美女黄网站视频免费视频| 国产偷倩视频| 亚洲va在线va天堂xx xx| 蜜臀久久99精品久久久久久牛牛| 南昌市|