<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

      從零開始用 Python 構建神經網絡

      本文作者: AI研習社-譯站 2018-07-02 14:55
      導語:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經網絡,而不是使用像 Tensorflow 那樣的封裝好的框架。


      雷鋒網 AI 研習社按:本文為雷鋒網字幕組編譯的技術博客,原文章標題為:How to build your own Neural Network from scratch in Python,作者 James Loy

      原文鏈接:https://towardsdatascience.com/how-to-build-your-own-neural-network-from-scratch-in-python-68998a08e4f6

      翻譯 | 劉彩虹 周輝  校對 | 于志鵬    整理 | 孔令雙

      動機:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經網絡,而不是使用像 Tensorflow 那樣的封裝好的框架。我認為理解神經網絡的內部工作原理,對數據科學家來說至關重要。

      這篇文章的內容是我的所學,希望也能對你有所幫助。

      神經網絡是什么?

      介紹神經網絡的文章大多數都會將它和大腦進行類比。如果你沒有深入研究過大腦與神經網絡的類比,那么將神經網絡解釋為一種將給定輸入映射為期望輸出的數學關系會更容易理解。

      神經網絡包括以下組成部分

      • 一個輸入層,x

      • 任意數量的隱藏層

      • 一個輸出層,?

      • 每層之間有一組權值和偏置,W and b

      • 為隱藏層選擇一種激活函數,σ。在教程中我們使用 Sigmoid 激活函數

      下圖展示了 2 層神經網絡的結構(注意:我們在計算網絡層數時通常排除輸入層)

      從零開始用 Python 構建神經網絡

      2 層神經網絡的結構

      用 Python 可以很容易的構建神經網絡類

      class NeuralNetwork:

          def __init__(self, x, y):

              self.input      = x

              self.weights1   = np.random.rand(self.input.shape[1],4) 

              self.weights2   = np.random.rand(4,1)                 

              self.y          = y

              self.output     = np.zeros(y.shape)

      訓練神經網絡

      這個網絡的輸出 ? 為:

      從零開始用 Python 構建神經網絡

      你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數。

      因此 W 和 b 的值影響預測的準確率. 所以根據輸入數據對 W 和 b 調優的過程就被成為訓練神經網絡。

      每步訓練迭代包含以下兩個部分:

      • 計算預測結果 ?,這一步稱為前向傳播

      • 更新 W 和 b,,這一步成為反向傳播

      下面的順序圖展示了這個過程:

      從零開始用 Python 構建神經網絡

      前向傳播

      正如我們在上圖中看到的,前向傳播只是簡單的計算。對于一個基本的 2 層網絡來說,它的輸出是這樣的:

      從零開始用 Python 構建神經網絡

      我們在 NeuralNetwork 類中增加一個計算前向傳播的函數。為了簡單起見我們假設偏置 b 為0:

      class NeuralNetwork:

          def __init__(self, x, y):

              self.input      = x

              self.weights1   = np.random.rand(self.input.shape[1],4) 

              self.weights2   = np.random.rand(4,1)                 

              self.y          = y

              self.output     = np.zeros(self.y.shape)


          def feedforward(self):

              self.layer1 = sigmoid(np.dot(self.input, self.weights1))

              self.output = sigmoid(np.dot(self.layer1, self.weights2))

      但是我們還需要一個方法來評估預測結果的好壞(即預測值和真實值的誤差)。這就要用到損失函數。

      損失函數

      常用的損失函數有很多種,根據模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數。

      誤差平方和是求每個預測值和真實值之間的誤差再求和,這個誤差是他們的差值求平方以便我們觀察誤差的絕對值。

      訓練的目標是找到一組 W 和 b,使得損失函數最好小,也即預測值和真實值之間的距離最小。

      反向傳播

      我們已經度量出了預測的誤差(損失),現在需要找到一種方法來傳播誤差,并以此更新權值和偏置。

      為了知道如何適當的調整權值和偏置,我們需要知道損失函數對權值 W 和偏置 b 的導數。

      回想微積分中的概念,函數的導數就是函數的斜率。

      從零開始用 Python 構建神經網絡

      梯度下降法

      如果我們已經求出了導數,我們就可以通過增加或減少導數值來更新權值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。

      但是我們不能直接計算損失函數對權值和偏置的導數,因為在損失函數的等式中并沒有顯式的包含他們。因此,我們需要運用鏈式求導發在來幫助計算導數。

      從零開始用 Python 構建神經網絡

      鏈式法則用于計算損失函數對 W 和 b 的導數。注意,為了簡單起見。我們只展示了假設網絡只有 1 層的偏導數。

      這雖然很簡陋,但是我們依然能得到想要的結果—損失函數對權值 W 的導數(斜率),因此我們可以相應的調整權值。

      現在我們將反向傳播算法的函數添加到 Python 代碼中

      class NeuralNetwork:

          def __init__(self, x, y):

              self.input      = x

              self.weights1   = np.random.rand(self.input.shape[1],4) 

              self.weights2   = np.random.rand(4,1)                 

              self.y          = y

              self.output     = np.zeros(self.y.shape)


          def feedforward(self):

              self.layer1 = sigmoid(np.dot(self.input, self.weights1))

              self.output = sigmoid(np.dot(self.layer1, self.weights2))


          def backprop(self):

              # application of the chain rule to find derivative of the loss function with respect to weights2 and weights1

              d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))

              d_weights1 = np.dot(self.input.T,  (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))


              # update the weights with the derivative (slope) of the loss function

              self.weights1 += d_weights1

              self.weights2 += d_weights2

      為了更深入的理解微積分原理和反向傳播中的鏈式求導法則,我強烈推薦 3Blue1Brown 的如下教程:

      Youtube:https://youtu.be/tIeHLnjs5U8

      整合并完成一個實例

      既然我們已經有了包括前向傳播和反向傳播的完整 Python 代碼,那么就將其應用到一個例子上看看它是如何工作的吧。

      從零開始用 Python 構建神經網絡

      神經網絡可以通過學習得到函數的權重。而我們僅靠觀察是不太可能得到函數的權重的。

      讓我們訓練神經網絡進行 1500 次迭代,看看會發生什么。 注意觀察下面每次迭代的損失函數,我們可以清楚地看到損失函數單調遞減到最小值。這與我們之前介紹的梯度下降法一致。

      從零開始用 Python 構建神經網絡

      讓我們看看經過 1500 次迭代后的神經網絡的最終預測結果:

      從零開始用 Python 構建神經網絡

      經過 1500 次迭代訓練后的預測結果

      我們成功了!我們應用前向和方向傳播算法成功的訓練了神經網絡并且預測結果收斂于真實值。

      注意預測值和真實值之間存在細微的誤差是允許的。這樣可以防止模型過擬合并且使得神經網絡對于未知數據有著更強的泛化能力。

      下一步是什么?

      幸運的是我們的學習之旅還沒有結束,仍然有很多關于神經網絡和深度學習的內容需要學習。例如:

      • 除了 Sigmoid 以外,還可以用哪些激活函數

      • 在訓練網絡的時候應用學習率

      • 在面對圖像分類任務的時候使用卷積神經網絡

      我很快會寫更多關于這個主題的內容,敬請期待!

      最后的想法

      我自己也從零開始寫了很多神經網絡的代碼

      雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學習框架方便的搭建深層網絡而不需要完全理解其內部工作原理。但是我覺得對于有追求的數據科學家來說,理解內部原理是非常有益的。

      這種練習對我自己來說已成成為重要的時間投入,希望也能對你有所幫助。

      文章首發于雷鋒網 AI 研習社(okweiwu)。

      從零開始用 Python 構建神經網絡

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

      從零開始用 Python 構建神經網絡

      分享:
      相關文章

      知情人士

      AI研習社(yanxishe.com)譯站頻道,傳播前沿人工智能知識,讓語言不再成為學習知識的門檻。(原雷鋒字幕組)
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 高跟熟女中文字幕在线亚洲| 中文字幕日韩精品人妻| 色窝视频在线在线视频| 国产精品天堂蜜av在线播放| 少妇极品熟妇人妻| 威海市| 色色色资源| 亚洲福利视频一区二区| 在线观看视频91| 张家川| 亚洲欧美日韩一区在线观看| 99久久国产精品无码| 国产成人高清精品免费软件| 亚洲日韩欧美国产高清αv| 午夜亚洲www湿好爽| 在线无码国产精品亚洲а∨| 国产九九| 亚洲色无码| 国产在线乱子伦一区二区| 亚洲AV秘?无码一区二三月夜| 亚洲中文字幕av| 日韩精品亚洲 国产| 亚卅AV| 亚洲av噜噜狠狠蜜桃| 激情综合亚洲色婷婷五月app | 久久婷婷成人综合色综合| 最新精品国偷自产在线美女足| 碰碰免费视频| 91福利电影| 国模小黎自慰gogo人体| 国产欧美精品一区二区三区| 青草青草视频2免费观看| 精品无码一区二区三区电影| 亚洲老熟女一区二区三区| 精品亚洲国产成人av| 人人网aV| 粗大的内捧猛烈进出视频| 色妞av永久一区二区国产av| 亚洲国产精品一区二区视频| 欧美色综合| 亚洲AV综合网|