chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

人工智能和機器人研究院 ? 來源:未知 ? 作者:胡薇 ? 2018-05-30 08:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

什么是神經網絡?

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

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

一個輸入層,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))

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

損失函數

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

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

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

反向傳播

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

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

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

梯度下降算法

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

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

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

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

既然我們已經有了鏈式法則公式,接下來我們把反向傳播函數添加到 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 次迭代,看看會發(fā)生什么。下圖展示了每次迭代的損失函數值,我們可以清晰地發(fā)現(xiàn)損失函數單調下降到最小值。這與我們前面討論的梯度下降算法是一致的。

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

進行 1500 次迭代后的預測值

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

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

下一步

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

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

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

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

最后一點想法

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

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

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

    關注

    57

    文章

    4876

    瀏覽量

    90016
  • 深度學習
    +關注

    關注

    73

    文章

    5598

    瀏覽量

    124389

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    神經網絡的初步認識

    日常生活中的智能應用都離不開深度學習,而深度學習則依賴于神經網絡的實現(xiàn)。什么是神經網絡?神經網絡的核心思想是模仿生物
    的頭像 發(fā)表于 12-17 15:05 ?317次閱讀
    <b class='flag-5'>神經網絡</b>的初步認識

    京東拍立淘API開發(fā)指南:從零開始構建圖像搜索應用

    京東圖片識別搜索API(拍立淘)是基于深度學習的視覺搜索服務,通過卷積神經網絡提取圖像特征向量,結合近似最近鄰搜索算法實現(xiàn)商品精準匹配?。該技術解決了傳統(tǒng)文字搜索難以描述商品外觀的痛點,支持以圖搜圖的智能購物體驗?。
    的頭像 發(fā)表于 11-09 17:40 ?2155次閱讀

    CNN卷積神經網絡設計原理及在MCU200T上仿真測試

    數的提出很大程度的解決了BP算法在優(yōu)化深層神經網絡時的梯度耗散問題。當x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當x&lt;0 時,該層的輸出為0。 CNN
    發(fā)表于 10-29 07:49

    NMSIS神經網絡庫使用介紹

    NMSIS NN 軟件庫是一組高效的神經網絡內核,旨在最大限度地提高 Nuclei N 處理器內核上的神經網絡的性能并最??大限度地減少其內存占用。 該庫分為多個功能,每個功能涵蓋特定類別
    發(fā)表于 10-29 06:08

    構建CNN網絡模型并優(yōu)化的一般化建議

    通過實踐,本文總結了構建CNN網絡模型并優(yōu)化的一般化建議,這些建議將會在構建高準確率輕量級CNN神經網絡模型方面提供幫助。 1)避免單層神經網絡
    發(fā)表于 10-28 08:02

    從零開始利用NMSIS庫搭建神經網絡(一)

    環(huán)境:Vivado2021.1、NucleiStudio_IDE_202102-win64 內容:從零開始利用NMSIS庫搭建神經網絡,這一節(jié)主講基本的NMSIS庫卷積函數的解讀。 一、自測檢查
    發(fā)表于 10-24 13:47

    在Ubuntu20.04系統(tǒng)中訓練神經網絡模型的一些經驗

    構建卷積神經網絡模型 model = models.Sequential()model.add(layers.Conv2D(input_shape=(28, 28, 1), filters=4
    發(fā)表于 10-22 07:03

    液態(tài)神經網絡(LNN):時間連續(xù)性與動態(tài)適應性的神經網絡

    1.算法簡介液態(tài)神經網絡(LiquidNeuralNetworks,LNN)是一種新型的神經網絡架構,其設計理念借鑒自生物神經系統(tǒng),特別是秀麗隱桿線蟲的神經結構,盡管這種微生物的
    的頭像 發(fā)表于 09-28 10:03 ?1194次閱讀
    液態(tài)<b class='flag-5'>神經網絡</b>(LNN):時間連續(xù)性與動態(tài)適應性的<b class='flag-5'>神經網絡</b>

    神經網絡的并行計算與加速技術

    隨著人工智能技術的飛速發(fā)展,神經網絡在眾多領域展現(xiàn)出了巨大的潛力和廣泛的應用前景。然而,神經網絡模型的復雜度和規(guī)模也在不斷增加,這使得傳統(tǒng)的串行計算方式面臨著巨大的挑戰(zhàn),如計算速度慢、訓練時間長等
    的頭像 發(fā)表于 09-17 13:31 ?1118次閱讀
    <b class='flag-5'>神經網絡</b>的并行計算與加速技術

    如何在機器視覺中部署深度學習神經網絡

    圖 1:基于深度學習的目標檢測可定位已訓練的目標類別,并通過矩形框(邊界框)對其進行標識。 在討論人工智能(AI)或深度學習時,經常會出現(xiàn)“神經網絡”、“黑箱”、“標注”等術語。這些概念對非專業(yè)
    的頭像 發(fā)表于 09-10 17:38 ?897次閱讀
    如何在機器視覺中部署深度<b class='flag-5'>學習</b><b class='flag-5'>神經網絡</b>

    無刷電機小波神經網絡轉子位置檢測方法的研究

    摘要:論文通過對無刷電機數學模型的推導,得出轉角:與三相相電壓之間存在映射關系,因此構建了一個以三相相電壓為輸人,轉角為輸出的小波神經網絡來實現(xiàn)轉角預測,并采用改進遺傳算法來訓練網絡結構與參數,借助
    發(fā)表于 06-25 13:06

    低功耗+AI識別:基于樹莓派的 LoRa 神經網絡安防系統(tǒng)!

    這篇博客展示了如何使用樹莓派上的神經網絡USB插件來檢測或“推斷”一個人的位置,從而構建一個安全系統(tǒng)。Arduino型接收器從零開始構建,通過遠程LoRa射頻協(xié)議從樹莓派發(fā)射器獲取數據
    的頭像 發(fā)表于 06-24 16:24 ?2675次閱讀
    低功耗+AI識別:基于樹莓派的 LoRa <b class='flag-5'>神經網絡</b>安防系統(tǒng)!

    神經網絡專家系統(tǒng)在電機故障診斷中的應用

    摘要:針對傳統(tǒng)專家系統(tǒng)不能進行自學習、自適應的問題,本文提出了基于種經網絡專家系統(tǒng)的并步電機故障診斷方法。本文將小波神經網絡和專家系統(tǒng)相結合,充分發(fā)揮了二者故障診斷的優(yōu)點,很大程度上降低了對電機
    發(fā)表于 06-16 22:09

    基于FPGA搭建神經網絡的步驟解析

    本文的目的是在一個神經網絡已經通過python或者MATLAB訓練好的神經網絡模型,將訓練好的模型的權重和偏置文件以TXT文件格式導出,然后通過python程序將txt文件轉化為coe
    的頭像 發(fā)表于 06-03 15:51 ?1190次閱讀
    基于FPGA搭建<b class='flag-5'>神經網絡</b>的步驟解析

    神經網絡壓縮框架 (NNCF) 中的過濾器修剪統(tǒng)計數據怎么查看?

    無法觀察神經網絡壓縮框架 (NNCF) 中的過濾器修剪統(tǒng)計數據
    發(fā)表于 03-06 07:10