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

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

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

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

【連載】深度學習筆記1:利用numpy從零搭建一個神經(jīng)網(wǎng)絡

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

掃碼添加小助手

加入工程師交流群


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

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

640?wx_fmt=png

感知機結(jié)構


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

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

  • 定義網(wǎng)絡結(jié)構(指定輸出層、隱藏層、輸出層的大小)

  • 初始化模型參數(shù)

  • 循環(huán)操作:執(zhí)行前向傳播/計算損失/執(zhí)行后向傳播/權值更新


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


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

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

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

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

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

640?wx_fmt=jpeg

前后傳播與后向傳播

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

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

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

接下來循環(huán)操作的第二步就是進行反向傳播操作,計算每一步的當前損失根據(jù)損失對權值進行更新。同樣定義一個函數(shù) 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

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

如上所示,一個簡單的神經(jīng)網(wǎng)絡模型(感知機)就搭建起來了。通常模型建好之后我們還需要對測試數(shù)據(jù)進行預測,所以我們也定義一個預測函數(shù) predict,將模型的概率輸出轉(zhuǎn)化為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

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

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

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




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

    關注

    42

    文章

    4814

    瀏覽量

    103486
  • 人工智能
    +關注

    關注

    1806

    文章

    48987

    瀏覽量

    249042
  • 機器學習
    +關注

    關注

    66

    文章

    8501

    瀏覽量

    134533
  • 深度學習
    +關注

    關注

    73

    文章

    5560

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何優(yōu)化BP神經(jīng)網(wǎng)絡學習

    優(yōu)化BP神經(jīng)網(wǎng)絡學習率是提高模型訓練效率和性能的關鍵步驟。以下是些優(yōu)化BP神經(jīng)網(wǎng)絡學習率的方法:
    的頭像 發(fā)表于 02-12 15:51 ?914次閱讀

    BP神經(jīng)網(wǎng)絡深度學習的關系

    ),是種多層前饋神經(jīng)網(wǎng)絡,它通過反向傳播算法進行訓練。BP神經(jīng)網(wǎng)絡由輸入層、或多個隱藏層和輸出層組成,通過逐層遞減的方式調(diào)整
    的頭像 發(fā)表于 02-12 15:15 ?846次閱讀

    深度學習入門:簡單神經(jīng)網(wǎng)絡的構建與實現(xiàn)

    深度學習中,神經(jīng)網(wǎng)絡是核心模型。今天我們用 Python 和 NumPy 構建簡單的
    的頭像 發(fā)表于 01-23 13:52 ?518次閱讀

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

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

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

    卷積神經(jīng)網(wǎng)絡因其在圖像和視頻處理任務中的卓越性能而廣受歡迎。隨著深度學習技術的快速發(fā)展,多種實現(xiàn)工具和框架應運而生,為研究人員和開發(fā)者提供了強大的支持。 TensorFlow 概述
    的頭像 發(fā)表于 11-15 15:20 ?657次閱讀

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

    深度學習領域,神經(jīng)網(wǎng)絡模型被廣泛應用于各種任務,如圖像識別、自然語言處理和游戲智能等。其中,卷積神經(jīng)網(wǎng)絡(CNNs)和傳統(tǒng)神經(jīng)網(wǎng)絡是兩種常
    的頭像 發(fā)表于 11-15 14:53 ?1848次閱讀

    深度學習中的卷積神經(jīng)網(wǎng)絡模型

    深度學習近年來在多個領域取得了顯著的進展,尤其是在圖像識別、語音識別和自然語言處理等方面。卷積神經(jīng)網(wǎng)絡作為深度學習
    的頭像 發(fā)表于 11-15 14:52 ?835次閱讀

    卷積神經(jīng)網(wǎng)絡的基本原理與算法

    ),是深度學習的代表算法之、基本原理 卷積運算 卷積運算是卷積神經(jīng)網(wǎng)絡的核心,用于提取圖像中的局部特征。 定義卷積核:卷積核是
    的頭像 發(fā)表于 11-15 14:47 ?1764次閱讀

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

    構建LSTM(長短期記憶)神經(jīng)網(wǎng)絡模型是涉及多個步驟的過程。以下是使用Python和Keras庫構建LSTM模型的指南。
    的頭像 發(fā)表于 11-13 10:10 ?1552次閱讀

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

    深度學習領域,循環(huán)神經(jīng)網(wǎng)絡(RNN)因其能夠處理序列數(shù)據(jù)而受到廣泛關注。然而,傳統(tǒng)RNN在處理長序列時存在梯度消失或梯度爆炸的問題。為了解決這問題,LSTM(長短期記憶)
    的頭像 發(fā)表于 11-13 09:58 ?1194次閱讀

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

    不熟悉神經(jīng)網(wǎng)絡的基礎知識,或者想了解神經(jīng)網(wǎng)絡如何優(yōu)化加速實驗研究,請繼續(xù)閱讀,探索基于深度學習的現(xiàn)代智能化實驗的廣闊應用前景。什么是神經(jīng)網(wǎng)絡
    的頭像 發(fā)表于 11-01 08:06 ?653次閱讀
    Moku人工<b class='flag-5'>神經(jīng)網(wǎng)絡</b>101

    關于卷積神經(jīng)網(wǎng)絡,這些概念你厘清了么~

    隨著人工智能(AI)技術的快速發(fā)展,AI可以越來越多地支持以前無法實現(xiàn)或者難以實現(xiàn)的應用。本文基于此解釋了 卷積神經(jīng)網(wǎng)絡 (CNN)及其對人工智能和機器學習的意義。CNN是種能夠
    發(fā)表于 10-24 13:56

    FPGA在深度神經(jīng)網(wǎng)絡中的應用

    隨著人工智能技術的飛速發(fā)展,深度神經(jīng)網(wǎng)絡(Deep Neural Network, DNN)作為其核心算法之,在圖像識別、語音識別、自然語言處理等領域取得了顯著成果。然而,傳統(tǒng)的深度
    的頭像 發(fā)表于 07-24 10:42 ?1191次閱讀

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

    構建多層神經(jīng)網(wǎng)絡(MLP, Multi-Layer Perceptron)模型是在機器學習深度學習
    的頭像 發(fā)表于 07-19 17:19 ?1545次閱讀

    深度神經(jīng)網(wǎng)絡在雷達系統(tǒng)中的應用

    深度神經(jīng)網(wǎng)絡(Deep Neural Networks,DNN)在雷達系統(tǒng)中的應用近年來取得了顯著進展,為雷達信號處理、目標檢測、跟蹤以及識別等領域帶來了革命性的變化。以下將詳細探討深度神經(jīng)網(wǎng)
    的頭像 發(fā)表于 07-15 11:09 ?1543次閱讀
    主站蜘蛛池模板: 黄黄视频免费看 | 国产三a级日本三级日产三级 | 日本三级黄视频 | 美女写真mm爽爽爽 | 麻豆蜜桃| 在线你懂的网址 | 色秀视频免费网站在线观看 | 亚洲 午夜在线一区 | 99pao强力打造免费高清色 | 成人av电影在线 | 在线视频图片小说 | 日本欧美一区二区三区不卡视频 | 特黄特色视频 | 一区精品视频 | caopon在线| 中文字幕一二三区乱码老 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 国产小视频在线高清播放 | 91久久澡人人爽人人添 | 成人欧美一区二区三区小说 | 美女被免费视频的网站 | 1515hh四虎免费观38com | 国产精品怡红院永久免费 | 午夜网站在线播放 | 国产在线a不卡免费视频 | 免费观看黄a一级视频 | 日本番囗 | 美女扒开尿囗给男生桶爽 | 四虎在线观看一区二区 | 综合久久2o19 | 伊人久久综合成人网小说 | 日韩第十页 | a一级| 欧美三级图片 | 国产人成精品免费视频 | 在线视频亚洲欧美 | 欧美整片第一页 | 狠狠色噜噜狠狠狠狠97影音先锋 | 色先峰 | 亚洲天堂h | 欧美在线视 |