在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

人工智能和機器人研究院 ? 來源:未知 ? 作者:胡薇 ? 2018-05-30 08:54 ? 次閱讀

這是一份用于理解深度學習內部運作方式的初學者指南。作者根據自己從零開始學習用 Python 構建神經網絡的經驗,編寫了一份攻略。內容涵蓋神經網絡定義、損失函數、前向傳播、反向傳播、梯度下降算法,對于想要了解深度學習運作原理的各位來說,內容精彩不可錯過。

動機:為了深入了解深度學習,我決定從零開始構建神經網絡,并且不使用類似 Tensorflow 的深度學習庫。我相信,對于任何有理想的數據科學家而言,理解神經網絡內部的運作方式都非常重要。

本文涵蓋了我學到的所有東西,希望你也能從中獲益!

什么是神經網絡?

許多有關神經網絡的介紹資料會將神經網絡與大腦進行類比。但我發現,將神經網絡簡單地描述為一個從輸入映射到輸出的數學函數理解起來更容易。

神經網絡由以下部分組成:

一個輸入層,x

任意數量的隱藏層

一個輸出層,?

每兩層之間都有一組權重和偏置,W 和 b

每個隱藏層都要選擇一個激活函數 σ。在本文中,我們選用 Sigmoid 激活函數。

下圖展示了 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)

訓練神經網絡

一個簡單 2 層神經網絡的輸出 ? 可以表示為:

你可能注意到,在上面的等式當中,權重 W 和偏置 b 是影響輸出 ? 的唯一變量。

自然,權重和偏差的正確值決定了預測的強度。根據輸入數據微調權重和偏置的過程稱為神經網絡訓練。

訓練過程的每一次迭代包含以下步驟:

計算預測的輸出 ?,稱為前向傳播

更新權重和偏置,稱為反向傳播

以下流程圖說明了這個過程:

前向傳播

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

我們可以在 Python 代碼中添加一個前向傳播函數來做到這一點。簡單起見,我們假設偏置為 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))

然而,我們仍然需要一種方法來評估我們的預測的「優秀程度」(即,我們的預測與真實值相差多少?)這就需要用到損失函數了。

損失函數

損失函數有很多種,而我們問題的性質會決定我們使用哪種損失函數。在本文中,我們將采用簡單的誤差平方和。

誤差平方和,即每個預測值和真實值之間差值的平均值。這個差值是取了平方項的,所以我們測量的是差值的絕對值。

在訓練過程中,我們的目標是找到一組最佳的權重和偏置,使損失函數最小化。

反向傳播

現在,我們已經找到了預測誤差的方法(損失函數),那么我們需要一種方法將錯誤「傳播」回去,從而更新權重和偏置。

為了確定權重和偏置調整的適當值,我們需要知道損失函數對權重和偏置的偏導數。

從微積分的角度來看,函數的偏導數也就是函數的斜率。

梯度下降算法

如果我們知道了偏導數,我們可以通過簡單增加或減少偏導數(如上圖所示)的方式來更新權重和偏置。這就是所謂的梯度下降。

然而,由于損失函數的方程不包含權重和偏置,所以我們不能直接計算損失函數對權重和偏置的偏導數。因此,我們需要鏈式法則來幫助計算。

以上是用于計算損失函數對權重偏導數的鏈式法則。簡單起見,我們只展示了一層神經網絡的偏導數。

唷!這看起來不大好看,但這能讓我們獲得所需——損失函數對權重的偏導數(斜率),以便相應調整權重。

既然我們已經有了鏈式法則公式,接下來我們把反向傳播函數添加到 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

整合

既然我們已經有了做前向傳播和反向傳播的完整 Python 代碼,我們可以將神經網絡應用到一個示例中,看看它的效果。

我們的神經網絡應該能夠習得理想的權重集合以表示這個函數。請注意,對于我們來說,僅通過檢查來計算權重并非一件小事。

如果我們將神經網絡進行 1500 次迭代,看看會發生什么。下圖展示了每次迭代的損失函數值,我們可以清晰地發現損失函數單調下降到最小值。這與我們前面討論的梯度下降算法是一致的。

讓我們看看神經網絡在進行 1500 次迭代后的最終預測(輸出):

進行 1500 次迭代后的預測值

我們成功了!我們的前向傳播和反向傳播算法成功訓練了神經網絡,且預測值收斂到了真實值。

請注意,預測值和真實值之間還是有一些輕微差異的。這是可取的,因為它防止了過度擬合,并且使得神經網絡具有更強的泛化能力。

下一步

幸運的是,我們的探索還沒有結束。關于神經網絡和深度學習還有很多需要學習的地方。例如:

除了 Sigmoid 函數之外,我們還可以使用哪些激活函數?

在訓練神經網絡時使用學習率

使用卷積進行圖像分類任務

最后一點想法

在撰寫此文的過程中,我已經學到了很多,希望本文也能對你有所幫助。

在沒有完全了解神經網絡內部工作原理的情況下,雖然使用諸如 TensorFlow 和 Keras 之類的深度學習庫可以讓我們很容易地建立深度網絡,但我認為對于有抱負的數據科學家而言,深入理解神經網絡還是大有裨益的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4801

    瀏覽量

    84867
  • 深度學習
    +關注

    關注

    73

    文章

    5510

    瀏覽量

    121345

原文標題:無需深度學習框架,如何從零開始用Python構建神經網絡

文章出處:【微信號:gh_ecbcc3b6eabf,微信公眾號:人工智能和機器人研究院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    人工神經網絡的原理和多種神經網絡架構方法

    在上一篇文章中,我們介紹了傳統機器學習的基礎知識和多種算法。在本文中,我們會介紹人工神經網絡的原理和多種神經網絡架構方法,供各位老師選擇。 01 人工神經網絡 ? 人工
    的頭像 發表于 01-09 10:24 ?185次閱讀
    人工<b class='flag-5'>神經網絡</b>的原理和多種<b class='flag-5'>神經網絡</b>架構方法

    如何使用Python構建LSTM神經網絡模型

    構建一個LSTM(長短期記憶)神經網絡模型是一個涉及多個步驟的過程。以下是使用Python和Keras庫構建LSTM模型的指南。 1. 安裝必要的庫 首先,確保你已經安裝了
    的頭像 發表于 11-13 10:10 ?488次閱讀

    如何構建多層神經網絡

    構建多層神經網絡(MLP, Multi-Layer Perceptron)模型是一個在機器學習和深度學習領域廣泛使用的技術,尤其在處理分類和回歸問題時。在本文中,我們將深入探討如何從頭
    的頭像 發表于 07-19 17:19 ?947次閱讀

    Python自動訓練人工神經網絡

    人工神經網絡(ANN)是機器學習中一種重要的模型,它模仿了人腦神經元的工作方式,通過多層節點(神經元)之間的連接和權重調整來學習和解決問題。
    的頭像 發表于 07-19 11:54 ?385次閱讀

    如何構建三層bp神經網絡模型

    引言 BP神經網絡(Backpropagation Neural Network)是一種前饋神經網絡,通過反向傳播算法進行訓練。三層BP神經網絡由輸入層、隱藏層和輸出層組成,具有較好的泛化能力和
    的頭像 發表于 07-11 10:55 ?543次閱讀

    BP神經網絡學習機制

    BP神經網絡(Backpropagation Neural Network),即反向傳播神經網絡,是一種基于梯度下降算法的多層前饋神經網絡,其學習機制的核心在于通過反向傳播算法
    的頭像 發表于 07-10 15:49 ?679次閱讀

    BP神經網絡和卷積神經網絡的關系

    BP神經網絡(Backpropagation Neural Network)和卷積神經網絡(Convolutional Neural Network,簡稱CNN)是兩種在人工智能和機器學習領域
    的頭像 發表于 07-10 15:24 ?1666次閱讀

    PyTorch神經網絡模型構建過程

    PyTorch,作為一個廣泛使用的開源深度學習庫,提供了豐富的工具和模塊,幫助開發者構建、訓練和部署神經網絡模型。在神經網絡模型中,輸出層是尤為關鍵的部分,它負責將模型的預測結果以合適
    的頭像 發表于 07-10 14:57 ?532次閱讀

    深度神經網絡與基本神經網絡的區別

    在探討深度神經網絡(Deep Neural Networks, DNNs)與基本神經網絡(通常指傳統神經網絡或前向神經網絡)的區別時,我們需要從多個維度進行深入分析。這些維度包括
    的頭像 發表于 07-04 13:20 ?1000次閱讀

    神經網絡的基本原理及Python編程實現

    神經網絡作為深度學習算法的基本構建模塊,模擬了人腦的行為,通過互相連接的節點(也稱為“神經元”)實現對輸入數據的處理、模式識別和結果預測等功能。本文將深入探討
    的頭像 發表于 07-03 16:11 ?725次閱讀

    卷積神經網絡和bp神經網絡的區別

    化能力。隨著深度學習技術的不斷發展,神經網絡已經成為人工智能領域的重要技術之一。卷積神經網絡和BP神經
    的頭像 發表于 07-02 14:24 ?4509次閱讀

    使用PyTorch構建神經網絡

    PyTorch是一個流行的深度學習框架,它以其簡潔的API和強大的靈活性在學術界和工業界得到了廣泛應用。在本文中,我們將深入探討如何使用PyTorch構建神經網絡,包括從基礎概念到高級特性的全面解析。本文旨在為讀者提供一個完整的
    的頭像 發表于 07-02 11:31 ?743次閱讀

    基于神經網絡算法的模型構建方法

    神經網絡是一種強大的機器學習算法,廣泛應用于各種領域,如圖像識別、自然語言處理、語音識別等。本文詳細介紹了基于神經網絡算法的模型構建方法,包括數據預處理、
    的頭像 發表于 07-02 11:21 ?608次閱讀

    構建神經網絡模型方法有幾種

    構建神經網絡模型是深度學習領域的核心任務之一。本文將詳細介紹構建神經網絡模型的幾種方法,包括前饗神經網絡
    的頭像 發表于 07-02 10:15 ?393次閱讀

    如何使用Python進行神經網絡編程

    。 為什么使用PythonPython是一種廣泛使用的高級編程語言,以其易讀性和易用性而聞名。Python擁有強大的庫,如TensorFlow、Keras和PyTorch,這些庫提供了構建
    的頭像 發表于 07-02 09:58 ?432次閱讀
    主站蜘蛛池模板: 成人综合激情| 欧美色图一区二区| 欧美黄色一级片视频| 免费一区二区视频| 6一10周岁毛片免费| 国产二区三区毛片| 人阁色第四影院在线观看| 亚洲一区二区三区电影| 亚洲第一成网站| 狠狠色丁香六月色| 日韩高清一级| 亚洲youjizz| 国产美女精品一区二区三区| 400部大量精品情侣网站| www.色黄| 在线视频一区二区| jinv在线视频| 3344成年在线视频免费播放男男| seetube18日本第一次| 欧美精品高清在线xxxx| 丁香色综合| 国内精品哆啪啪| 1000部禁片黄的免费看| 欧美黑人xxxxxxxxxx| 热re99久久国产精品| 亚洲成在| 特黄特色视频| 婷婷综合久久中文字幕蜜桃三| 最近最新视频中文字幕4| 男女在线视频| 香蕉久久夜色精品国产2020| 午夜色婷婷| 女人被男人免费播放网站| 米奇久久| 久久瑟| 久久精品视频7| 永久观看| 一本到在线观看视频不卡| 最近免费hd| 夜色福利| 成人黄网大全在线观看|