国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

【連載】深度學習筆記1:利用numpy從零搭建一個神經網絡

人工智能實訓營 ? 2018-08-06 17:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


很多人說深度學習就是個黑箱子,把圖像預處理之后丟進 tensorflow 就能出來預測結果,簡單有效又省時省力。但正如我在上一篇推送中所說,如果你已是一名功力純厚的深度學習工程師,這么做當然沒問題。但我想大多數人也和我一樣,都是走在學習深度學習的路上,一上來就上框架并沒有什么特別不妥之處,但總歸是對你理解深度學習的黑箱機制是了無裨益的。所以,我建議在學習深度學習的路上,從最簡單的感知機開始寫起,一步一步捋清神經網絡的結構,以至于激活函數怎么寫、采用何種損失函數、前向傳播怎么寫、后向傳播又怎么寫,權值如何迭代更新,都需要你自己去實現。若在一開始就直接調用框架,小的 demo 可以跑起來,糊弄一時,看起來就像是鳩摩智在內力未到的情形下強行練習少林寺的 72 絕技,最后走火入魔。

無論你是在看那本深度學習的書,還是在學習 Adrew NG 的 deeplearningai,或者是在cs231n ,對神經網絡的基本理論了如指掌的你一定想親手用 python 來實現它。在不借助任何深度學習框架的基礎上,利用 python 的科學計算庫 numpy 由最初級的感知機開始,從零搭建一個神經網絡模型。

640?wx_fmt=png

感知機結構


對于感知機模型、神經網絡理論這里就不再敘述,相信在精通深度學習的你對此一定很熟練了。至于對于神經網絡中的輸入層、隱藏層、輸出層、權重與偏置、激活函數、損失函數、前向傳播、反向傳播、權值更新、梯度下降、微積分中的鏈式求導、方向梯度等概念,我也假設你很熟練了。所以,接下來就讓我們從零搭建一個最初級的神經網絡模型。

在寫代碼前,必須先捋一下思路,咱們先要什么,然后再寫什么,你心中必須有個數。要從零開始寫一個神經網絡,通常的方法是:

  • 定義網絡結構(指定輸出層、隱藏層、輸出層的大小)

  • 初始化模型參數

  • 循環操作:執行前向傳播/計算損失/執行后向傳播/權值更新


有了上面這個思路,我們就可以開始寫了。當然了,本節是寫一個最簡單的感知機模型,所以網絡結構就無需特別定義。首先來定義我們的激活函數,激活函數有很多種,這里我們使用大名鼎鼎的 sigmoid 函數:


直接利用 numpy 進行定義 sigmoid()

import numpy as np
def sigmoid(x): return 1 / (1 + np.exp(-x))

在無需定義網絡結構的情形下,第二步我們就可以直接對模型參數進行初始化。模型參數主要包括權值 w 和偏置 b ,這也是神經網絡學習過程要學的東西。繼續利用 numpy 對參數進行初始化:

definitilize_with_zeros(dim):
w=np.zeros((dim,1))
b=0.0
#assert(w.shape==(dim,1))
#assert(isinstance(b,float)orisinstance(b,int))
returnw,b

接下來就要進入模型的主體部分,執行最后一步那個大的循環操作,這個循環中包括前向傳播和計算損失、反向傳播和權值更新。這也是神經網絡訓練過程中每一次需要迭代的部分。這里簡單說一下,很多初學者容易被這兩個概念繞住,前向傳播簡單而言就是計算預測 y 的過程,而后向傳播則是根據預測值和實際值之間的誤差不斷往回推更新權值和偏置的過程。

640?wx_fmt=jpeg

前后傳播與后向傳播

下面我們來定義一個大的前向傳播函數,預測值y為模型從輸入到經過激活函數處理后的輸出的結果。損失函數我們采用交叉熵損失,利用 numpy 定義如下函數:

def propagate(w, b, X, Y):
  m = X.shape[1]
  A = sigmoid(np.dot(w.T, X) + b)
  cost = -1/m * np.sum(Y*np.log(A) + (1-Y)*np.log(1-A))

  dw = np.dot(X, (A-Y).T)/m
  db = np.sum(A-Y)/m  
assert(dw.shape == w.shape)
assert(db.dtype == float) cost = np.squeeze(cost)
assert(cost.shape == ()) grads = { 'dw': dw,
'db': db }

return grads, cost

在上面的前向傳播函數中,我們先是通過激活函數直接表示了感知機輸出的預測值,然后通過定義的交叉熵損失函數計算了損失,最后根據損失函數計算了權值 w 和偏置 b的梯度,將參數梯度結果以字典和損失一起作為函數的輸出進行返回。這就是前向傳播的編寫思路。

接下來循環操作的第二步就是進行反向傳播操作,計算每一步的當前損失根據損失對權值進行更新。同樣定義一個函數 backward_propagation :

def backward_propagation(w, b, X, Y, num_iterations, learning_rate, print_cost=False):
  cost = []  
for i in range(num_iterations): grad, cost = propagate(w, b, X, Y) dw = grad['dw'] db = grad['db'] w = w - learing_rate * dw b = b - learning_rate * db
if i % 100 == 0: cost.append(cost)
if print_cost and i % 100 == 0: print("cost after iteration %i: %f" %(i, cost)) params
= {"dw": w,
"db": b } grads = {"dw": dw,
"db": db }

return params, grads, costs

在上述函數中,我們先是建立了一個損失列表容器,然后將前一步定義的前向傳播函數放進去執行迭代操作,計算每一步的當前損失和梯度,利用梯度下降法對權值進行更新,并用字典封裝迭代結束時的參數和梯度進行返回。

如上所示,一個簡單的神經網絡模型(感知機)就搭建起來了。通常模型建好之后我們還需要對測試數據進行預測,所以我們也定義一個預測函數 predict,將模型的概率輸出轉化為0/1值。

def predict(w, b, X):
  m = X.shape[1]
  Y_prediction = np.zeros((1, m))
  w = w.reshape(X.shape[0], 1)

  A = sigmoid(np.dot(w.T, X)+b)  
for i in range(A.shape[1]):
if A[:, i] > 0.5: Y_prediction[:, i] = 1 else: Y_prediction[:, i] = 0 assert(Y_prediction.shape == (1, m))
return Y_prediction

到這里整個模型算是寫完了,但是我們定義了這么多函數,調用起來太麻煩,所以致力于要寫出 pythonic的代碼的你們肯定想對這些函數進行一下簡單的封裝:

def model(X_train, Y_train, X_test, Y_test, num_iterations = 2000, learning_rate = 0.5, print_cost = False):  # initialize parameters with zeros (≈ 1 line of code)
  w, b = initialize_with_zeros(X_train.shape[0])  # Gradient descent (≈ 1 line of code)
  parameters, grads, costs = backwize(w, b, X_train, Y_train, num_iterations, learning_rate, print_cost)  # Retrieve parameters w and b from dictionary "parameters"
  w = parameters["w"]
  b = parameters["b"]  # Predict test/train set examples (≈ 2 lines of code)
  Y_prediction_train = predict(w, b, X_train)
  Y_prediction_test = predict(w, b, X_test)  # Print train/test Errors
  print("train accuracy: {} %".format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100))
  print("test accuracy: {} %".format(100 - np.mean(np.abs(Y_prediction_test - Y_test)) * 100))

  d = {"costs": costs,    
"Y_prediction_test": Y_prediction_test, "Y_prediction_train" : Y_prediction_train, "w" : w, "b" : b,
"learning_rate" : learning_rate,
"num_iterations": num_iterations}
return d

如此這般一個簡易的神經網絡就被你用 numpy就寫出來了。現在社會浮躁,很多人學習都沒有耐心,總是抱著鳩摩智的心態想要一步登天。學習機器學習和深度學習方法很多,但我相信,只有對基本的算法原理每一步都捋清楚,每一步都用最基礎的庫去實現,你成為一名優秀的機器學習工程師只是時間問題。加油吧各位!




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

    關注

    42

    文章

    4838

    瀏覽量

    107801
  • 人工智能
    +關注

    關注

    1817

    文章

    50098

    瀏覽量

    265423
  • 機器學習
    +關注

    關注

    66

    文章

    8553

    瀏覽量

    136962
  • 深度學習
    +關注

    關注

    73

    文章

    5599

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    神經網絡的初步認識

    日常生活中的智能應用都離不開深度學習,而深度學習則依賴于神經網絡的實現。什么是神經網絡
    的頭像 發表于 12-17 15:05 ?335次閱讀
    <b class='flag-5'>神經網絡</b>的初步認識

    自動駕駛中常提的卷積神經網絡啥?

    在自動駕駛領域,經常會聽到卷積神經網絡技術。卷積神經網絡,簡稱為CNN,是種專門用來處理網格狀數據(比如圖像)的深度學習模型。CNN在圖像
    的頭像 發表于 11-19 18:15 ?2079次閱讀
    自動駕駛中常提的卷積<b class='flag-5'>神經網絡</b>是<b class='flag-5'>個</b>啥?

    NMSIS神經網絡庫使用介紹

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

    構建CNN網絡模型并優化的般化建議

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

    開始利用NMSIS庫搭建神經網絡

    環境:Vivado2021.1、NucleiStudio_IDE_202102-win64 內容:從開始利用NMSIS庫搭建神經網絡,這
    發表于 10-24 13:47

    在Ubuntu20.04系統中訓練神經網絡模型的些經驗

    模型。 我們使用MNIST數據集,訓練卷積神經網絡(CNN)模型,用于手寫數字識別。旦模型被訓練并保存,就可以用于對新圖像進行推理和預測。要使用生成的模型進行推理,可以按照以下步
    發表于 10-22 07:03

    CICC2033神經網絡部署相關操作

    在完成神經網絡量化后,需要將神經網絡部署到硬件加速器上。首先需要將所有權重數據以及輸入數據導入到存儲器內。 在仿真環境下,可將其存于文件,并在 Verilog 代碼中通過 read
    發表于 10-20 08:00

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

    1.算法簡介液態神經網絡(LiquidNeuralNetworks,LNN)是種新型的神經網絡架構,其設計理念借鑒自生物神經系統,特別是秀
    的頭像 發表于 09-28 10:03 ?1226次閱讀
    液態<b class='flag-5'>神經網絡</b>(LNN):時間連續性與動態適應性的<b class='flag-5'>神經網絡</b>

    【「AI芯片:科技探索與AGI愿景」閱讀體驗】+神經形態計算、類腦芯片

    AI芯片不僅包括深度學細AI加速器,還有另外主要列別:類腦芯片。類腦芯片是模擬人腦神經網絡架構的芯片。它結合微電子技術和新型神經形態器件
    發表于 09-17 16:43

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

    1:基于深度學習的目標檢測可定位已訓練的目標類別,并通過矩形框(邊界框)對其進行標識。 在討論人工智能(AI)或深度學習時,經常會出現“
    的頭像 發表于 09-10 17:38 ?902次閱讀
    如何在機器視覺中部署<b class='flag-5'>深度</b><b class='flag-5'>學習</b><b class='flag-5'>神經網絡</b>

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

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

    神經網絡專家系統在電機故障診斷中的應用

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

    神經網絡RAS在異步電機轉速估計中的仿真研究

    眾多方法中,由于其結構簡單,穩定性好廣泛受到人們的重視,且已被用于產品開發。但是MRAS仍存在在低速區速度估計精度下降和對電動機參數變化非常敏感的問題。本文利用神經網絡的特點,使估計更為簡單、快速
    發表于 06-16 21:54

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

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

    嵌入式AI技術之深度學習:數據樣本預處理過程中使用合適的特征變換對深度學習的意義

    ? 作者:蘇勇Andrew 使用神經網絡實現機器學習網絡的每個層都將對輸入的數據做次抽象,多層神經網絡構成
    的頭像 發表于 04-02 18:21 ?1519次閱讀