丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習社-譯站
發(fā)送

0

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

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

字幕組雙語原文:用C從頭實現(xiàn)神經(jīng)網(wǎng)絡

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

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

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

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

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

1. 層數(shù)

2.每層神經(jīng)元數(shù)目

3.學習速率

4.訓練例子

5.輸出標簽

定義層和神經(jīng)元結構:

一旦我們有了層的數(shù)量和每層神經(jīng)元的數(shù)量,我們就可以創(chuàng)建我們的神經(jīng)網(wǎng)絡的架構。但首先我們必須定義神經(jīng)元和層的結構。

神經(jīng)元結構將包含以下參數(shù):

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

創(chuàng)建架構:  

現(xiàn)在,讓我們使用create_architecture()函數(shù)創(chuàng)建我們的神經(jīng)網(wǎng)絡的體系結構。

在下面的代碼片段中,外部For循環(huán)創(chuàng)建層,內(nèi)部For循環(huán)將指定數(shù)量的神經(jīng)元添加到該層。我們也隨機初始化神經(jīng)元的權值在0到1之間。

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

訓練的例子:

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

得到輸出標簽:

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

前向傳遞:

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

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

sigmoid函數(shù):

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

Relu函數(shù):

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

讓我們實現(xiàn)forward_prop()函數(shù)

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

反向傳遞:

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

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

sigmoid函數(shù)的導數(shù):

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

relu函數(shù)的導數(shù):

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

讓我們在back_prop()函數(shù)中實現(xiàn)這些公式:

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

更新權重:

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

測試框架:

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

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

現(xiàn)在,我們可以針對不同的邏輯門訓練這個神經(jīng)網(wǎng)絡,比如XOR, OR等等。在下面的示例中,我們將實現(xiàn)XOR gate。

首先,提供所需的層數(shù)和每層神經(jīng)元的數(shù)目:

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

神經(jīng)網(wǎng)絡體系結構將根據(jù)給定的規(guī)范創(chuàng)建:

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語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

我們將以上4個輸入作為神經(jīng)網(wǎng)絡的訓練實例。

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

我們的神經(jīng)網(wǎng)絡將在這4個訓練實例上訓練20000個epoch?,F(xiàn)在,測試訓練好的神經(jīng)網(wǎng)絡:

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

總結:

這是一個神經(jīng)網(wǎng)絡框架的基本實現(xiàn),目的是了解神經(jīng)網(wǎng)絡的基本原理和反向傳播算法??梢酝ㄟ^實現(xiàn)各種損失函數(shù)和提供保存/裝載重量來增強代碼。


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

了解字幕組請聯(lián)系微信:tlacttlact

轉(zhuǎn)載請聯(lián)系字幕組微信并注明出處:雷鋒字幕組

雷鋒網(wǎng)雷鋒

雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

用C語言從頭開始實現(xiàn)一個神經(jīng)網(wǎng)絡

分享:
相關文章

知情人士

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