一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從零開(kāi)始學(xué)習(xí)用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

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

掃碼添加小助手

加入工程師交流群

這是一份用于理解深度學(xué)習(xí)內(nèi)部運(yùn)作方式的初學(xué)者指南。作者根據(jù)自己從零開(kāi)始學(xué)習(xí)用 Python 構(gòu)建神經(jīng)網(wǎng)絡(luò)的經(jīng)驗(yàn),編寫(xiě)了一份攻略。內(nèi)容涵蓋神經(jīng)網(wǎng)絡(luò)定義、損失函數(shù)、前向傳播、反向傳播、梯度下降算法,對(duì)于想要了解深度學(xué)習(xí)運(yùn)作原理的各位來(lái)說(shuō),內(nèi)容精彩不可錯(cuò)過(guò)。

動(dòng)機(jī):為了深入了解深度學(xué)習(xí),我決定從零開(kāi)始構(gòu)建神經(jīng)網(wǎng)絡(luò),并且不使用類(lèi)似 Tensorflow 的深度學(xué)習(xí)庫(kù)。我相信,對(duì)于任何有理想的數(shù)據(jù)科學(xué)家而言,理解神經(jīng)網(wǎng)絡(luò)內(nèi)部的運(yùn)作方式都非常重要。

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

什么是神經(jīng)網(wǎng)絡(luò)?

許多有關(guān)神經(jīng)網(wǎng)絡(luò)的介紹資料會(huì)將神經(jīng)網(wǎng)絡(luò)與大腦進(jìn)行類(lèi)比。但我發(fā)現(xiàn),將神經(jīng)網(wǎng)絡(luò)簡(jiǎn)單地描述為一個(gè)從輸入映射到輸出的數(shù)學(xué)函數(shù)理解起來(lái)更容易。

神經(jīng)網(wǎng)絡(luò)由以下部分組成:

一個(gè)輸入層,x

任意數(shù)量的隱藏層

一個(gè)輸出層,?

每?jī)蓪又g都有一組權(quán)重和偏置,W 和 b

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

下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(請(qǐng)注意,在計(jì)算神經(jīng)網(wǎng)絡(luò)層數(shù)的時(shí)候,通常不計(jì)入輸入層)。

二層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)

利用 Python 建立神經(jīng)網(wǎng)絡(luò)非常容易。

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)

訓(xùn)練神經(jīng)網(wǎng)絡(luò)

一個(gè)簡(jiǎn)單 2 層神經(jīng)網(wǎng)絡(luò)的輸出 ? 可以表示為:

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

自然,權(quán)重和偏差的正確值決定了預(yù)測(cè)的強(qiáng)度。根據(jù)輸入數(shù)據(jù)微調(diào)權(quán)重和偏置的過(guò)程稱(chēng)為神經(jīng)網(wǎng)絡(luò)訓(xùn)練。

訓(xùn)練過(guò)程的每一次迭代包含以下步驟:

計(jì)算預(yù)測(cè)的輸出 ?,稱(chēng)為前向傳播

更新權(quán)重和偏置,稱(chēng)為反向傳播

以下流程圖說(shuō)明了這個(gè)過(guò)程:

前向傳播

正如我們?cè)谏蠄D中所看到的,前向傳播只是一個(gè)簡(jiǎn)單的計(jì)算。對(duì)于一個(gè)基本的 2 層神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)的輸出計(jì)算如下:

我們可以在 Python 代碼中添加一個(gè)前向傳播函數(shù)來(lái)做到這一點(diǎn)。簡(jiǎn)單起見(jiàn),我們假設(shè)偏置為 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))

然而,我們?nèi)匀恍枰环N方法來(lái)評(píng)估我們的預(yù)測(cè)的「優(yōu)秀程度」(即,我們的預(yù)測(cè)與真實(shí)值相差多少?)這就需要用到損失函數(shù)了。

損失函數(shù)

損失函數(shù)有很多種,而我們問(wèn)題的性質(zhì)會(huì)決定我們使用哪種損失函數(shù)。在本文中,我們將采用簡(jiǎn)單的誤差平方和。

誤差平方和,即每個(gè)預(yù)測(cè)值和真實(shí)值之間差值的平均值。這個(gè)差值是取了平方項(xiàng)的,所以我們測(cè)量的是差值的絕對(duì)值。

在訓(xùn)練過(guò)程中,我們的目標(biāo)是找到一組最佳的權(quán)重和偏置,使損失函數(shù)最小化。

反向傳播

現(xiàn)在,我們已經(jīng)找到了預(yù)測(cè)誤差的方法(損失函數(shù)),那么我們需要一種方法將錯(cuò)誤「?jìng)鞑ァ够厝ィ瑥亩聶?quán)重和偏置。

為了確定權(quán)重和偏置調(diào)整的適當(dāng)值,我們需要知道損失函數(shù)對(duì)權(quán)重和偏置的偏導(dǎo)數(shù)。

從微積分的角度來(lái)看,函數(shù)的偏導(dǎo)數(shù)也就是函數(shù)的斜率。

梯度下降算法

如果我們知道了偏導(dǎo)數(shù),我們可以通過(guò)簡(jiǎn)單增加或減少偏導(dǎo)數(shù)(如上圖所示)的方式來(lái)更新權(quán)重和偏置。這就是所謂的梯度下降。

然而,由于損失函數(shù)的方程不包含權(quán)重和偏置,所以我們不能直接計(jì)算損失函數(shù)對(duì)權(quán)重和偏置的偏導(dǎo)數(shù)。因此,我們需要鏈?zhǔn)椒▌t來(lái)幫助計(jì)算。

以上是用于計(jì)算損失函數(shù)對(duì)權(quán)重偏導(dǎo)數(shù)的鏈?zhǔn)椒▌t。簡(jiǎn)單起見(jiàn),我們只展示了一層神經(jīng)網(wǎng)絡(luò)的偏導(dǎo)數(shù)。

??!這看起來(lái)不大好看,但這能讓我們獲得所需——損失函數(shù)對(duì)權(quán)重的偏導(dǎo)數(shù)(斜率),以便相應(yīng)調(diào)整權(quán)重。

既然我們已經(jīng)有了鏈?zhǔn)椒▌t公式,接下來(lái)我們把反向傳播函數(shù)添加到 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

整合

既然我們已經(jīng)有了做前向傳播和反向傳播的完整 Python 代碼,我們可以將神經(jīng)網(wǎng)絡(luò)應(yīng)用到一個(gè)示例中,看看它的效果。

我們的神經(jīng)網(wǎng)絡(luò)應(yīng)該能夠習(xí)得理想的權(quán)重集合以表示這個(gè)函數(shù)。請(qǐng)注意,對(duì)于我們來(lái)說(shuō),僅通過(guò)檢查來(lái)計(jì)算權(quán)重并非一件小事。

如果我們將神經(jīng)網(wǎng)絡(luò)進(jìn)行 1500 次迭代,看看會(huì)發(fā)生什么。下圖展示了每次迭代的損失函數(shù)值,我們可以清晰地發(fā)現(xiàn)損失函數(shù)單調(diào)下降到最小值。這與我們前面討論的梯度下降算法是一致的。

讓我們看看神經(jīng)網(wǎng)絡(luò)在進(jìn)行 1500 次迭代后的最終預(yù)測(cè)(輸出):

進(jìn)行 1500 次迭代后的預(yù)測(cè)值

我們成功了!我們的前向傳播和反向傳播算法成功訓(xùn)練了神經(jīng)網(wǎng)絡(luò),且預(yù)測(cè)值收斂到了真實(shí)值。

請(qǐng)注意,預(yù)測(cè)值和真實(shí)值之間還是有一些輕微差異的。這是可取的,因?yàn)樗乐沽诉^(guò)度擬合,并且使得神經(jīng)網(wǎng)絡(luò)具有更強(qiáng)的泛化能力。

下一步

幸運(yùn)的是,我們的探索還沒(méi)有結(jié)束。關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)還有很多需要學(xué)習(xí)的地方。例如:

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

在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)使用學(xué)習(xí)率

使用卷積進(jìn)行圖像分類(lèi)任務(wù)

最后一點(diǎn)想法

在撰寫(xiě)此文的過(guò)程中,我已經(jīng)學(xué)到了很多,希望本文也能對(duì)你有所幫助。

在沒(méi)有完全了解神經(jīng)網(wǎng)絡(luò)內(nèi)部工作原理的情況下,雖然使用諸如 TensorFlow 和 Keras 之類(lèi)的深度學(xué)習(xí)庫(kù)可以讓我們很容易地建立深度網(wǎng)絡(luò),但我認(rèn)為對(duì)于有抱負(fù)的數(shù)據(jù)科學(xué)家而言,深入理解神經(jīng)網(wǎng)絡(luò)還是大有裨益的。

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

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86701
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5561

    瀏覽量

    122789

原文標(biāo)題:無(wú)需深度學(xué)習(xí)框架,如何從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

文章出處:【微信號(hào):gh_ecbcc3b6eabf,微信公眾號(hào):人工智能和機(jī)器人研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    低功耗+AI識(shí)別:基于樹(shù)莓派的 LoRa 神經(jīng)網(wǎng)絡(luò)安防系統(tǒng)!

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

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)在多個(gè)方面存在顯著差異,以下是對(duì)兩者的比較: 一、結(jié)構(gòu)特點(diǎn) BP神經(jīng)網(wǎng)絡(luò) : BP神經(jīng)網(wǎng)絡(luò)是一種多層的前饋神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 02-12 15:53 ?659次閱讀

    如何優(yōu)化BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)

    優(yōu)化BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)率是提高模型訓(xùn)練效率和性能的關(guān)鍵步驟。以下是一些優(yōu)化BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)率的方法: 一、理解學(xué)習(xí)率的重要性
    的頭像 發(fā)表于 02-12 15:51 ?928次閱讀

    BP神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點(diǎn)分析

    BP神經(jīng)網(wǎng)絡(luò)(Back Propagation Neural Network)作為一種常用的機(jī)器學(xué)習(xí)模型,具有顯著的優(yōu)點(diǎn),同時(shí)也存在一些不容忽視的缺點(diǎn)。以下是對(duì)BP神經(jīng)網(wǎng)絡(luò)優(yōu)缺點(diǎn)的分析: 優(yōu)點(diǎn)
    的頭像 發(fā)表于 02-12 15:36 ?914次閱讀

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)之間存在著密切的關(guān)系,以下是對(duì)它們之間關(guān)系的介紹: 一、BP神經(jīng)網(wǎng)絡(luò)的基本概念 BP神經(jīng)網(wǎng)絡(luò),即反向傳播神經(jīng)網(wǎng)絡(luò)(Ba
    的頭像 發(fā)表于 02-12 15:15 ?850次閱讀

    深度學(xué)習(xí)入門(mén):簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)構(gòu)建與實(shí)現(xiàn)

    深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)是核心模型。今天我們用 Python 和 NumPy 構(gòu)建一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)。 神經(jīng)
    的頭像 發(fā)表于 01-23 13:52 ?528次閱讀

    人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

    在上一篇文章中,我們介紹了傳統(tǒng)機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)和多種算法。在本文中,我們會(huì)介紹人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法,供各位老師選擇。 01 人工神經(jīng)網(wǎng)絡(luò) ? 人工
    的頭像 發(fā)表于 01-09 10:24 ?1183次閱讀
    人工<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理和多種<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>架構(gòu)方法

    卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)工具與框架

    : TensorFlow是由Google Brain團(tuán)隊(duì)開(kāi)發(fā)的開(kāi)源機(jī)器學(xué)習(xí)框架,它支持多種深度學(xué)習(xí)模型的構(gòu)建和訓(xùn)練,包括卷積神經(jīng)網(wǎng)絡(luò)。TensorFlow以其靈活性和可擴(kuò)展性而聞名,適
    的頭像 發(fā)表于 11-15 15:20 ?666次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較

    在深度學(xué)習(xí)領(lǐng)域,神經(jīng)網(wǎng)絡(luò)模型被廣泛應(yīng)用于各種任務(wù),如圖像識(shí)別、自然語(yǔ)言處理和游戲智能等。其中,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)是兩種常見(jiàn)的模型。 1. 結(jié)構(gòu)差異 1.1 傳統(tǒng)
    的頭像 發(fā)表于 11-15 14:53 ?1864次閱讀

    深度學(xué)習(xí)中的卷積神經(jīng)網(wǎng)絡(luò)模型

    深度學(xué)習(xí)近年來(lái)在多個(gè)領(lǐng)域取得了顯著的進(jìn)展,尤其是在圖像識(shí)別、語(yǔ)音識(shí)別和自然語(yǔ)言處理等方面。卷積神經(jīng)網(wǎng)絡(luò)作為深度學(xué)習(xí)的一個(gè)分支,因其在圖像處理任務(wù)中的卓越性能而受到廣泛關(guān)注。 卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 11-15 14:52 ?844次閱讀

    RNN模型與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的區(qū)別

    神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)領(lǐng)域中的一種強(qiáng)大工具,它們能夠模擬人腦處理信息的方式。隨著技術(shù)的發(fā)展,神經(jīng)網(wǎng)絡(luò)的類(lèi)型也在不斷增加,其中循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和傳統(tǒng)
    的頭像 發(fā)表于 11-15 09:42 ?1124次閱讀

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò)模型

    構(gòu)建一個(gè)LSTM(長(zhǎng)短期記憶)神經(jīng)網(wǎng)絡(luò)模型是一個(gè)涉及多個(gè)步驟的過(guò)程。以下是使用Python和Keras庫(kù)構(gòu)建LSTM模型的指南。 1. 安裝必要的庫(kù) 首先,確保你已經(jīng)安裝了
    的頭像 發(fā)表于 11-13 10:10 ?1571次閱讀

    Moku人工神經(jīng)網(wǎng)絡(luò)101

    Moku3.3版更新在Moku:Pro平臺(tái)新增了全新的儀器功能【神經(jīng)網(wǎng)絡(luò)】,使用戶(hù)能夠在Moku設(shè)備上部署實(shí)時(shí)機(jī)器學(xué)習(xí)算法,進(jìn)行快速、靈活的信號(hào)分析、去噪、傳感器調(diào)節(jié)校準(zhǔn)、閉環(huán)反饋等應(yīng)用。如果您
    的頭像 發(fā)表于 11-01 08:06 ?661次閱讀
    Moku人工<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>101

    如何構(gòu)建多層神經(jīng)網(wǎng)絡(luò)

    構(gòu)建多層神經(jīng)網(wǎng)絡(luò)(MLP, Multi-Layer Perceptron)模型是一個(gè)在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域廣泛使用的技術(shù),尤其在處理分類(lèi)和回歸問(wèn)題時(shí)。在本文中,我們將深入探討如何從頭
    的頭像 發(fā)表于 07-19 17:19 ?1554次閱讀

    Python自動(dòng)訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)

    人工神經(jīng)網(wǎng)絡(luò)(ANN)是機(jī)器學(xué)習(xí)中一種重要的模型,它模仿了人腦神經(jīng)元的工作方式,通過(guò)多層節(jié)點(diǎn)(神經(jīng)元)之間的連接和權(quán)重調(diào)整來(lái)學(xué)習(xí)和解決問(wèn)題。
    的頭像 發(fā)表于 07-19 11:54 ?698次閱讀