91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【連載】深度學(xué)習(xí)筆記2:手寫(xiě)一個(gè)單隱層的神經(jīng)網(wǎng)絡(luò)

人工智能實(shí)訓(xùn)營(yíng) ? 2018-08-06 17:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

筆記1中我們利用 numpy 搭建了神經(jīng)網(wǎng)絡(luò)最簡(jiǎn)單的結(jié)構(gòu)單元:感知機(jī)。筆記2將繼續(xù)學(xué)習(xí)如何手動(dòng)搭建神經(jīng)網(wǎng)絡(luò)。我們將學(xué)習(xí)如何利用 numpy 搭建一個(gè)含單隱層的神經(jīng)網(wǎng)絡(luò)。單隱層顧名思義,即僅含一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò),抑或是成為兩層網(wǎng)絡(luò)。

繼續(xù)回顧一下搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的基本思路和步驟:

  • 定義網(wǎng)絡(luò)結(jié)構(gòu)(指定輸出層、隱藏層、輸出層的大?。?/span>

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

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

定義網(wǎng)絡(luò)結(jié)構(gòu)

假設(shè) X 為神經(jīng)網(wǎng)絡(luò)的輸入特征矩陣,y標(biāo)簽向量。則含單隱層的神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如下所示:

640?wx_fmt=png

網(wǎng)絡(luò)結(jié)構(gòu)的函數(shù)定義如下:

deflayer_sizes(X,Y):
n_x=X.shape[0]#sizeofinputlayer
n_h=4#sizeofhiddenlayer
n_y=Y.shape[0]#sizeofoutputlayer
return(n_x,n_h,n_y)

其中輸入層和輸出層的大小分別與 Xyshape 有關(guān)。而隱層的大小可由我們手動(dòng)指定。這里我們指定隱層的大小為4。

初始化模型參數(shù)

假設(shè) W1 為輸入層到隱層的權(quán)重?cái)?shù)組、b1 為輸入層到隱層的偏置數(shù)組;W2 為隱層到輸出層的權(quán)重?cái)?shù)組,b2 為隱層到輸出層的偏置數(shù)組。于是我們定義參數(shù)初始化函數(shù)如下:

def initialize_parameters(n_x, n_h, n_y):
  W1 = np.random.randn(n_h, n_x)*0.01
  b1 = np.zeros((n_h, 1))
  W2 = np.random.randn(n_y, n_h)*0.01
  b2 = np.zeros((n_y, 1)) 

assert (W1.shape == (n_h, n_x))
assert (b1.shape == (n_h, 1))
assert (W2.shape == (n_y, n_h))
assert (b2.shape == (n_y, 1)) parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2}

return parameters

其中對(duì)權(quán)值的初始化我們利用了 numpy 中的生成隨機(jī)數(shù)的模塊 np.random.randn ,偏置的初始化則使用了 np.zero 模塊。通過(guò)設(shè)置一個(gè)字典進(jìn)行封裝并返回包含初始化參數(shù)之后的結(jié)果。

前向傳播

在定義好網(wǎng)絡(luò)結(jié)構(gòu)并初始化參數(shù)完成之后,就要開(kāi)始執(zhí)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程了。而訓(xùn)練的第一步則是執(zhí)行前向傳播計(jì)算。假設(shè)隱層的激活函數(shù)為 tanh 函數(shù), 輸出層的激活函數(shù)為 sigmoid 函數(shù)。則前向傳播計(jì)算表示為:

640?wx_fmt=png


定義前向傳播計(jì)算函數(shù)為:

def forward_propagation(X, parameters):  # Retrieve each parameter from the dictionary "parameters"
  W1 = parameters['W1']
  b1 = parameters['b1']
  W2 = parameters['W2']
  b2 = parameters['b2']  
# Implement Forward Propagation to calculate A2 (probabilities) Z1 = np.dot(W1, X) + b1 A1 = np.tanh(Z1) Z2 = np.dot(W2, Z1) + b2 A2 = sigmoid(Z2)
assert(A2.shape == (1, X.shape[1]))
cache = {"Z1": Z1, "A1": A1, "Z2": Z2, "A2": A2}
return A2, cache

從參數(shù)初始化結(jié)果字典里取到各自的參數(shù),然后執(zhí)行一次前向傳播計(jì)算,將前向傳播計(jì)算的結(jié)果保存到 cache 這個(gè)字典中, 其中 A2 為經(jīng)過(guò) sigmoid 激活函數(shù)激活后的輸出層的結(jié)果。

計(jì)算當(dāng)前訓(xùn)練損失

前向傳播計(jì)算完成后我們需要確定以當(dāng)前參數(shù)執(zhí)行計(jì)算后的的輸出與標(biāo)簽值之間的損失大小。與筆記1一樣,損失函數(shù)同樣選擇為交叉熵?fù)p失:

640?wx_fmt=png

定義計(jì)算損失函數(shù)為:

def compute_cost(A2, Y, parameters):
  m = Y.shape[1] # number of example
  # Compute the cross-entropy cost
  logprobs = np.multiply(np.log(A2),Y) + np.multiply(np.log(1-A2), 1-Y)
  cost = -1/m * np.sum(logprobs)
  cost = np.squeeze(cost)   # makes sure cost is the dimension we expect.

  assert(isinstance(cost, float))  
return cost
執(zhí)行反向傳播

當(dāng)前向傳播和當(dāng)前損失確定之后,就需要繼續(xù)執(zhí)行反向傳播過(guò)程來(lái)調(diào)整權(quán)值了。中間涉及到各個(gè)參數(shù)的梯度計(jì)算,具體如下圖所示:

640?wx_fmt=png

根據(jù)上述梯度計(jì)算公式定義反向傳播函數(shù):

def backward_propagation(parameters, cache, X, Y):
  m = X.shape[1]  
# First, retrieve W1 and W2 from the dictionary "parameters". W1 = parameters['W1'] W2 = parameters['W2']
# Retrieve also A1 and A2 from dictionary "cache". A1 = cache['A1'] A2 = cache['A2']
# Backward propagation: calculate dW1, db1, dW2, db2. dZ2 = A2-Y dW2 = 1/m * np.dot(dZ2, A1.T) db2 = 1/m * np.sum(dZ2, axis=1, keepdims=True) dZ1 = np.dot(W2.T, dZ2)*(1-np.power(A1, 2)) dW1 = 1/m * np.dot(dZ1, X.T) db1 = 1/m * np.sum(dZ1, axis=1, keepdims=True) grads = {"dW1": dW1,
"db1": db1,
"dW2": dW2,
"db2": db2}
return grads

將各參數(shù)的求導(dǎo)計(jì)算結(jié)果放入字典 grad 進(jìn)行返回。

這里需要提一下的是涉及到的關(guān)于數(shù)值優(yōu)化方面的知識(shí)。在機(jī)器學(xué)習(xí)中,當(dāng)所學(xué)問(wèn)題有了具體的形式之后,機(jī)器學(xué)習(xí)就會(huì)形式化為一個(gè)求優(yōu)化的問(wèn)題。不論是梯度下降法、隨機(jī)梯度下降、牛頓法、擬牛頓法,抑或是 Adam 之類(lèi)的高級(jí)的優(yōu)化算法,這些都需要花時(shí)間掌握去掌握其數(shù)學(xué)原理。

640?wx_fmt=gif

權(quán)值更新

迭代計(jì)算的最后一步就是根據(jù)反向傳播的結(jié)果來(lái)更新權(quán)值了,更新公式如下:

640?wx_fmt=png

由該公式可以定義權(quán)值更新函數(shù)為:

def update_parameters(parameters, grads, learning_rate = 1.2):  # Retrieve each parameter from the dictionary "parameters"
  W1 = parameters['W1']
  b1 = parameters['b1']
  W2 = parameters['W2']
  b2 = parameters['b2']  
# Retrieve each gradient from the dictionary "grads" dW1 = grads['dW1'] db1 = grads['db1'] dW2 = grads['dW2'] db2 = grads['db2']
# Update rule for each parameter W1 -= dW1 * learning_rate b1 -= db1 * learning_rate W2 -= dW2 * learning_rate b2 -= db2 * learning_rate parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2}
return parameters

這樣,前向傳播-計(jì)算損失-反向傳播-權(quán)值更新的神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程就算部署完成了。當(dāng)前了,跟筆記1一樣,為了更加 pythonic 一點(diǎn),我們也將各個(gè)模塊組合起來(lái),定義一個(gè)神經(jīng)網(wǎng)絡(luò)模型:

def nn_model(X, Y, n_h, num_iterations = 10000, print_cost=False):
  np.random.seed(3)
  n_x = layer_sizes(X, Y)[0]
  n_y = layer_sizes(X, Y)[2]  
# Initialize parameters, then retrieve W1, b1, W2, b2. Inputs: "n_x, n_h, n_y". Outputs = "W1, b1, W2, b2, parameters". parameters = initialize_parameters(n_x, n_h, n_y) W1 = parameters['W1'] b1 = parameters['b1'] W2 = parameters['W2'] b2 = parameters['b2']
# Loop (gradient descent) for i in range(0, num_iterations):
# Forward propagation. Inputs: "X, parameters". Outputs: "A2, cache". A2, cache = forward_propagation(X, parameters)
# Cost function. Inputs: "A2, Y, parameters". Outputs: "cost". cost = compute_cost(A2, Y, parameters)
# Backpropagation. Inputs: "parameters, cache, X, Y". Outputs: "grads". grads = backward_propagation(parameters, cache, X, Y)
# Gradient descent parameter update. Inputs: "parameters, grads". Outputs: "parameters". parameters = update_parameters(parameters, grads, learning_rate=1.2)
# Print the cost every 1000 iterations if print_cost and i % 1000 == 0:
print ("Cost after iteration %i: %f" %(i, cost))

return parameters

以上便是本節(jié)的主要內(nèi)容,利用 numpy 手動(dòng)搭建一個(gè)含單隱層的神經(jīng)網(wǎng)路。從零開(kāi)始寫(xiě)起,打牢基礎(chǔ),待到結(jié)構(gòu)熟練,原理吃透,再去接觸一些主流的深度學(xué)習(xí)框架才是學(xué)習(xí)深度學(xué)習(xí)的最佳途徑。

本文來(lái)自《自興動(dòng)腦人工智能》項(xiàng)目部:凱文。






聲明:本文內(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)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4838

    瀏覽量

    107747
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39755

    瀏覽量

    301358
  • 人工智能
    +關(guān)注

    關(guān)注

    1817

    文章

    50094

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    神經(jīng)網(wǎng)絡(luò)的初步認(rèn)識(shí)

    日常生活中的智能應(yīng)用都離不開(kāi)深度學(xué)習(xí),而深度學(xué)習(xí)則依賴(lài)于神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)。什么是神經(jīng)網(wǎng)絡(luò)?
    的頭像 發(fā)表于 12-17 15:05 ?323次閱讀
    <b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的初步認(rèn)識(shí)

    自動(dòng)駕駛中常提的卷積神經(jīng)網(wǎng)絡(luò)個(gè)啥?

    在自動(dòng)駕駛領(lǐng)域,經(jīng)常會(huì)聽(tīng)到卷積神經(jīng)網(wǎng)絡(luò)技術(shù)。卷積神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱(chēng)為CNN,是種專(zhuān)門(mén)用來(lái)處理網(wǎng)格狀數(shù)據(jù)(比如圖像)的深度學(xué)習(xí)模型。CNN在圖像
    的頭像 發(fā)表于 11-19 18:15 ?2072次閱讀
    自動(dòng)駕駛中常提的卷積<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>是<b class='flag-5'>個(gè)</b>啥?

    CNN卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)原理及在MCU200T上仿真測(cè)試

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

    NMSIS神經(jīng)網(wǎng)絡(luò)庫(kù)使用介紹

    (q7_t) 和 16 位整數(shù) (q15_t)。 卷積神經(jīng)網(wǎng)絡(luò)示例: 本示例中使用的 CNN 基于來(lái)自 Caffe 的 CIFAR-10 示例。神經(jīng)網(wǎng)絡(luò)由 3 個(gè)卷積組成,中間散布
    發(fā)表于 10-29 06:08

    構(gòu)建CNN網(wǎng)絡(luò)模型并優(yōu)化的般化建議

    :Dropout隨機(jī)跳過(guò)神經(jīng)網(wǎng)絡(luò)模型中某些神經(jīng)元之間的連接,通過(guò)隨機(jī)制造缺陷進(jìn)行訓(xùn)練提升整個(gè)神經(jīng)網(wǎng)絡(luò)的魯棒性。 6)指定合理的學(xué)習(xí)率策
    發(fā)表于 10-28 08:02

    在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的些經(jīng)驗(yàn)

    本帖欲分享在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的些經(jīng)驗(yàn)。我們采用jupyter notebook作為開(kāi)發(fā)IDE,以TensorFlow2為訓(xùn)練框架,目標(biāo)是訓(xùn)練
    發(fā)表于 10-22 07:03

    CICC2033神經(jīng)網(wǎng)絡(luò)部署相關(guān)操作

    在完成神經(jīng)網(wǎng)絡(luò)量化后,需要將神經(jīng)網(wǎng)絡(luò)部署到硬件加速器上。首先需要將所有權(quán)重?cái)?shù)據(jù)以及輸入數(shù)據(jù)導(dǎo)入到存儲(chǔ)器內(nèi)。 在仿真環(huán)境下,可將其存于個(gè)文件,并在 Verilog 代碼中通過(guò) read
    發(fā)表于 10-20 08:00

    液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)

    1.算法簡(jiǎn)介液態(tài)神經(jīng)網(wǎng)絡(luò)(LiquidNeuralNetworks,LNN)是種新型的神經(jīng)網(wǎng)絡(luò)架構(gòu),其設(shè)計(jì)理念借鑒自生物神經(jīng)系統(tǒng),特別是秀麗
    的頭像 發(fā)表于 09-28 10:03 ?1197次閱讀
    液態(tài)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    神經(jīng)網(wǎng)絡(luò)的并行計(jì)算與加速技術(shù)

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

    如何在機(jī)器視覺(jué)中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

    圖 1:基于深度學(xué)習(xí)的目標(biāo)檢測(cè)可定位已訓(xùn)練的目標(biāo)類(lèi)別,并通過(guò)矩形框(邊界框)對(duì)其進(jìn)行標(biāo)識(shí)。 在討論人工智能(AI)或深度學(xué)習(xí)時(shí),經(jīng)常會(huì)出現(xiàn)“神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-10 17:38 ?900次閱讀
    如何在機(jī)器視覺(jué)中部署<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    無(wú)刷電機(jī)小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測(cè)方法的研究

    摘要:論文通過(guò)對(duì)無(wú)刷電機(jī)數(shù)學(xué)模型的推導(dǎo),得出轉(zhuǎn)角:與三相相電壓之間存在映射關(guān)系,因此構(gòu)建了個(gè)以三相相電壓為輸人,轉(zhuǎn)角為輸出的小波神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)轉(zhuǎn)角預(yù)測(cè),并采用改進(jìn)遺傳算法來(lái)訓(xùn)練網(wǎng)絡(luò)結(jié)
    發(fā)表于 06-25 13:06

    神經(jīng)網(wǎng)絡(luò)專(zhuān)家系統(tǒng)在電機(jī)故障診斷中的應(yīng)用

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

    基于FPGA搭建神經(jīng)網(wǎng)絡(luò)的步驟解析

    本文的目的是在個(gè)神經(jīng)網(wǎng)絡(luò)已經(jīng)通過(guò)python或者M(jìn)ATLAB訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型,將訓(xùn)練好的模型的權(quán)重和偏置文件以TXT文件格式導(dǎo)出,然后通過(guò)python程序?qū)xt文件轉(zhuǎn)化為coe
    的頭像 發(fā)表于 06-03 15:51 ?1194次閱讀
    基于FPGA搭建<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的步驟解析

    嵌入式AI技術(shù)之深度學(xué)習(xí):數(shù)據(jù)樣本預(yù)處理過(guò)程中使用合適的特征變換對(duì)深度學(xué)習(xí)的意義

    ? 作者:蘇勇Andrew 使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)機(jī)器學(xué)習(xí),網(wǎng)絡(luò)的每個(gè)都將對(duì)輸入的數(shù)據(jù)做次抽象,多層神經(jīng)網(wǎng)
    的頭像 發(fā)表于 04-02 18:21 ?1516次閱讀

    神經(jīng)網(wǎng)絡(luò)壓縮框架 (NNCF) 中的過(guò)濾器修剪統(tǒng)計(jì)數(shù)據(jù)怎么查看?

    無(wú)法觀察神經(jīng)網(wǎng)絡(luò)壓縮框架 (NNCF) 中的過(guò)濾器修剪統(tǒng)計(jì)數(shù)據(jù)
    發(fā)表于 03-06 07:10