乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

       imelee 2019-05-23
      點(diǎn)擊上放關(guān)注,All in AI中國
      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      動機(jī)

      如果你是一個(gè)了解神經(jīng)網(wǎng)絡(luò)如何工作的初級數(shù)據(jù)科學(xué)家,或者只是對深度學(xué)習(xí)有所了解的機(jī)器學(xué)習(xí)愛好者,那么這篇文章是你不能錯(cuò)過的。以下是如何使用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)的9個(gè)步驟,從數(shù)據(jù)預(yù)處理到反向傳播必須要做的事情。

      對機(jī)器學(xué)習(xí)、人工神經(jīng)網(wǎng)絡(luò)、Python語法和編程邏輯的基本理解是首選(但不是必需的,因?yàn)槟梢噪S時(shí)學(xué)習(xí))。

      代碼可在Github上獲得。ML-in-NumPy/neural-net.ipynb at master · edenau/ML-in-NumPy · GitHub

      1.初始化

      第一步,導(dǎo)入NumPy。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      2.數(shù)據(jù)生成

      深度學(xué)習(xí)需要數(shù)據(jù)。盡管網(wǎng)上有許多干凈的數(shù)據(jù)集,但為了簡單起見,我們將生成自己的數(shù)據(jù)集——對于輸入a和b,我們有輸出a + b、a-b和| a-b |,生成10,000個(gè)基準(zhǔn)點(diǎn)。

      X_num_row, X_num_col = [2, 10000] # Row is no. of feature, col is no. of datum points
      X_raw = np.random.rand(X_num_row,X_num_col) * 100

      y_raw = np.concatenate(([(X_raw[0,:] + X_raw[1,:])], [(X_raw[0,:] - X_raw[1,:])], np.abs([(X_raw[0,:] - X_raw[1,:])])))
      # for input a and b, output is a+b; a-b and |a-b|
      y_num_row, y_num_col = y_raw.shape
      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      3.Train-test分裂

      我們的數(shù)據(jù)集分為訓(xùn)練集(70%)和測試集(30%)。僅利用訓(xùn)練集來調(diào)整神經(jīng)網(wǎng)絡(luò)。測試集僅在訓(xùn)練完成時(shí)用于性能評估。

      train_ratio=0.7
      num_train_datum = int(train_ratio*X_num_col)
      X_raw_train = X_raw[:,0:num_train_datum]
      X_raw_test = X_raw[:,num_train_datum:]

      y_raw_train = y_raw[:,0:num_train_datum]
      y_raw_test = y_raw[:,num_train_datum:]

      4.數(shù)據(jù)標(biāo)準(zhǔn)化

      訓(xùn)練集中的數(shù)據(jù)是標(biāo)準(zhǔn)化的,因此每個(gè)標(biāo)準(zhǔn)化特征的分布是零均值和單位方差。然后可以將由上述過程產(chǎn)生的定標(biāo)器應(yīng)用于測試集。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      這些線條可能看起來很嚇人,但它們都是重復(fù)的。

      因此,縮放器不包含來自我們的測試裝置的任何信息。我們不希望神經(jīng)網(wǎng)絡(luò)在網(wǎng)絡(luò)調(diào)整之前獲得有關(guān)測試集的任何信息。

      我們現(xiàn)在已經(jīng)完成了數(shù)據(jù)預(yù)處理的4個(gè)步驟。

      5.神經(jīng)網(wǎng)絡(luò)構(gòu)建

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      我們使用Python中的類對象進(jìn)行客觀化。每個(gè)層(輸入層除外)都有權(quán)重矩陣W、偏置矢量b和一個(gè)激活函數(shù)。每個(gè)圖層都附加到名為neural_net的列表中。然后,該列表將表示您的完全連接的神經(jīng)網(wǎng)絡(luò)。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      最后,我們使用以下公式并通過計(jì)數(shù)對超參數(shù)的數(shù)量進(jìn)行全面檢查。可用的基準(zhǔn)數(shù)量應(yīng)該超過超參數(shù)的數(shù)量,否則它肯定會過度擬合。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      N ^ l是第l層的超參數(shù)個(gè)數(shù),L是層數(shù)(不包括輸入層)

      6.前向傳播

      在給定一組權(quán)重和偏差的情況下,我們定義了前向傳播的函數(shù)。層之間的連接以矩陣形式定義為:

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      σ是element-wise激活函數(shù),上標(biāo)T表示矩陣的轉(zhuǎn)置

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      激活函數(shù)是逐個(gè)定義的。 ReLU實(shí)現(xiàn)為→max(a,0),而sigmoid函數(shù)應(yīng)返回→1 /(1 + e ^( - a)),其實(shí)現(xiàn)留給讀者作為練習(xí)。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      7.反向傳播

      這是我們許多人根本不理解的最棘手的部分。一旦我們定義了用于評估性能的損失度量標(biāo)準(zhǔn),我們就想知道當(dāng)我們擾亂每個(gè)權(quán)重或偏差時(shí)損失度量是如何變化的。

      我們想知道每個(gè)權(quán)重和偏差對損失度量的敏感程度。

      這由分?jǐn)?shù)導(dǎo)數(shù)?e/?W(在代碼中表示為dW)和?e/?b(在代碼中表示為db)表示,并且可以分析計(jì)算。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      ⊙表示元素乘法

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!
      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      這些反向傳播方程假設(shè)只有一個(gè)基準(zhǔn)y被比較。梯度更新過程中,因?yàn)槊看蔚男阅軆H受一個(gè)基準(zhǔn)點(diǎn)的影響。可以使用多個(gè)基準(zhǔn)來減少噪聲,其中?W(y_1,y_2,...)將是?W(y_1),?W(y_2),...的平均值,?b也是如此。這些方程中沒有顯示這一點(diǎn),但是在下面的代碼中實(shí)現(xiàn)了這一點(diǎn)。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      8.迭代優(yōu)化

      我們現(xiàn)在擁有用了訓(xùn)練神經(jīng)網(wǎng)絡(luò)的每個(gè)構(gòu)建塊。

      一旦我們知道權(quán)重和偏差的敏感性,我們嘗試使用以下更新規(guī)則通過梯度下降迭代地最小化(因此減號)損失度量:

      ?W=?W - learning_rate *?W
      ?b=?b - learning_rate *?b
      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!
      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      訓(xùn)練損失應(yīng)該隨著迭代而下降

      9.測試

      如果測試損失不高于訓(xùn)練損失,該模型可以很好地推廣。我們還制作了一些測試用例,以了解模型的執(zhí)行情況。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      這就是你如何使用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)的9個(gè)步驟。你們中的一些人可能已經(jīng)使用一些高級框架(如TensorFlow,PyTorch或Keras)構(gòu)建了神經(jīng)網(wǎng)絡(luò)。然而,僅使用低級庫構(gòu)建神經(jīng)網(wǎng)絡(luò)使我們能夠真正理解這個(gè)神秘背后的數(shù)學(xué)。

      我的實(shí)現(xiàn)絕不是構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)最有效的方法,還有很大的改進(jìn)空間。

      9步教你用NumPy從頭開始構(gòu)建神經(jīng)網(wǎng)絡(luò)!

      編譯出品

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多