成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
    此為臨時鏈接,僅用于文章預覽,將在時失效
    人工智能開發者 正文
    發私信給AI研習社-譯站
    發送

    0

    用C語言從頭開始實現一個神經網絡

    本文作者: AI研習社-譯站 2020-08-13 16:28
    導語:為了了解神經網絡的基本原理和反向傳播算法,使用C語言來實現一個神經網絡框架。

    字幕組雙語原文:用C從頭實現神經網絡

    英語原文:Building Neural Network Framework in C using Backpropagation

    翻譯:雷鋒字幕組(Mr.水方子

    在本文中,我們將用C語言從頭開始實現一個基本的神經網絡框架。之所以在C語言中這樣做,是因為大多數庫和其他高級語言(如Python)都抽象出了實現細節。在C語言中實現反向傳播實際上會讓我們更詳細地了解改變權重和偏差是如何改變網絡的整體行為的。

    注意:本文假設您了解反向傳播算法背后的數學原理。如果你不熟悉,請參考這個

    我們的目標是建立一個通用的框架,其中的層數和神經元將由用戶根據他的要求指定。因此,我們將從用戶獲得以下輸入來定義我們的神經網絡框架:

    1. 層數

    2.每層神經元數目

    3.學習速率

    4.訓練例子

    5.輸出標簽

    定義層和神經元結構:

    一旦我們有了層的數量和每層神經元的數量,我們就可以創建我們的神經網絡的架構。但首先我們必須定義神經元和層的結構。

    神經元結構將包含以下參數:

    用C語言從頭開始實現一個神經網絡

    層結構將有許多神經元在該層和一個指針的neuron_t結構。

    用C語言從頭開始實現一個神經網絡

    創建架構:  

    現在,讓我們使用create_architecture()函數創建我們的神經網絡的體系結構。

    在下面的代碼片段中,外部For循環創建層,內部For循環將指定數量的神經元添加到該層。我們也隨機初始化神經元的權值在0到1之間。

    用C語言從頭開始實現一個神經網絡

    訓練的例子:

    我們將使用get_input()函數存儲訓練示例:

    用C語言從頭開始實現一個神經網絡

    得到輸出標簽:

    我們將使用get_desired_exports()函數存儲輸出標簽

    用C語言從頭開始實現一個神經網絡

    前向傳遞:

    第i層第j個神經元的激活與(i?1)第(i?1)層神經元的激活關系為:

    用C語言從頭開始實現一個神經網絡

    注意:σ是激活函數。這里輸出層使用sigmoid激活函數,隱藏層使用Relu激活函數。

    sigmoid函數:

    用C語言從頭開始實現一個神經網絡

    Relu函數:

    用C語言從頭開始實現一個神經網絡

    讓我們實現forward_prop()函數

    用C語言從頭開始實現一個神經網絡

    反向傳遞:

    反向傳播的目標是反向傳播錯誤并更新權值以最小化錯誤。這里,我們將使用均方誤差函數來計算誤差。

    用C語言從頭開始實現一個神經網絡

    權重(dw)和偏差(dbias)的變化是使用成本函數C對網絡中的權重和偏差的偏導數(?C/ ?weights和?C/? bias)來計算的。

    sigmoid函數的導數:

    用C語言從頭開始實現一個神經網絡

    relu函數的導數:

    用C語言從頭開始實現一個神經網絡

    反向傳播背后的四個基本方程:

    用C語言從頭開始實現一個神經網絡

    讓我們在back_prop()函數中實現這些公式:

    用C語言從頭開始實現一個神經網絡

    更新權重:

    在每個epoch中,我們將使用update_weights()函數更新網絡權值和偏差

    用C語言從頭開始實現一個神經網絡

    測試框架:

    現在我們已經準備好了所有的部分,我們將驗證框架的工作情況。因此,讓我們創建一個4層的神經網絡,輸入層有2個神經元,第一隱含層有4個神經元,第二隱含層有4個神經元,輸出層有1個神經元。另外,隱藏的和輸出的神經元會有偏差。

    用C語言從頭開始實現一個神經網絡

    現在,我們可以針對不同的邏輯門訓練這個神經網絡,比如XOR, OR等等。在下面的示例中,我們將實現XOR gate。

    首先,提供所需的層數和每層神經元的數目:

    Enter the number of Layers in Neural Network: 4

    Enter number of neurons in layer[1]: 2

    Enter number of neurons in layer[2]: 4

    Enter number of neurons in layer[3]: 4

    Enter number of neurons in layer[4]: 1

    神經網絡體系結構將根據給定的規范創建:

    Created Layer: 1

    Number of Neurons in Layer 1: 2

    Neuron 1 in Layer 1 created

    Neuron 2 in Layer 1 created


    Created Layer: 2

    Number of Neurons in Layer 2: 4

    Neuron 1 in Layer 2 created

    Neuron 2 in Layer 2 created

    Neuron 3 in Layer 2 created

    Neuron 4 in Layer 2 created


    Created Layer: 3

    Number of Neurons in Layer 3: 4

    Neuron 1 in Layer 3 created

    Neuron 2 in Layer 3 created

    Neuron 3 in Layer 3 created

    Neuron 4 in Layer 3 created


    Created Layer: 4

    Number of Neurons in Layer 4: 1

    Neuron 1 in Layer 4 created

    所有的權值將在0和1之間隨機初始化。

    接下來,提供學習率和輸入訓練示例。下面是XOR邏輯門的真值表。

    用C語言從頭開始實現一個神經網絡

    我們將以上4個輸入作為神經網絡的訓練實例。

    Enter the learning rate (Usually 0.15): 0.15


    Enter the number of training examples: 4


    Enter the Inputs for training example[0]: 0 0

    Enter the Inputs for training example[1]: 0 1

    Enter the Inputs for training example[2]: 1 0

    Enter the Inputs for training example[3]: 1 1

    輸出標簽: 

     Enter the Desired Outputs (Labels) for training example[0]: 0

    Enter the Desired Outputs (Labels) for training example[1]: 1

    Enter the Desired Outputs (Labels) for training example[2]: 1

    Enter the Desired Outputs (Labels) for training example[3]: 0

    我們的神經網絡將在這4個訓練實例上訓練20000個epoch。現在,測試訓練好的神經網絡:

    Enter input to test: 0 0

    Output: 0

    Enter input to test: 0 1

    Output: 1

    Enter input to test: 1 0

    Output: 1

    Enter input to test: 1 1

    Output: 0

    總結:

    這是一個神經網絡框架的基本實現,目的是了解神經網絡的基本原理和反向傳播算法。可以通過實現各種損失函數和提供保存/裝載重量來增強代碼。


    雷鋒字幕組是由AI愛好者組成的志愿者翻譯團隊;團隊成員有大數據專家、算法工程師、圖像處理工程師、產品經理、產品運營、IT咨詢人、在校師生;志愿者們來自IBM、AVL、Adobe、阿里、百度等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。

    了解字幕組請聯系微信:tlacttlact

    轉載請聯系字幕組微信并注明出處:雷鋒字幕組

    雷鋒網雷鋒

    雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

    用C語言從頭開始實現一個神經網絡

    分享:
    相關文章

    知情人士

    AI研習社(yanxishe.com)譯站頻道,傳播前沿人工智能知識,讓語言不再成為學習知識的門檻。(原雷鋒字幕組)
    當月熱門文章
    最新文章
    請填寫申請人資料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗證郵箱
    您的郵箱還未驗證,完成可獲20積分喲!
    請驗證您的郵箱
    立即驗證
    完善賬號信息
    您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
    立即設置 以后再說