国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用C語言構(gòu)建一個手寫數(shù)字識別神經(jīng)網(wǎng)絡(luò)

這篇具有很好參考價值的文章主要介紹了用C語言構(gòu)建一個手寫數(shù)字識別神經(jīng)網(wǎng)絡(luò)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

用C語言構(gòu)建一個手寫數(shù)字識別神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò),人工智能,深度學(xué)習(xí),c語言

用C語言構(gòu)建一個手寫數(shù)字識別神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò),人工智能,深度學(xué)習(xí),c語言

(原理和程序基本框架請參見前一篇 "用C語言構(gòu)建了一個簡單的神經(jīng)網(wǎng)路")

1.準(zhǔn)備訓(xùn)練和測試數(shù)據(jù)集
從http://yann.lecun.com/exdb/mnist/下載手寫數(shù)字訓(xùn)練數(shù)據(jù)集, 包括圖像數(shù)據(jù)train-images-idx3-ubyte.gz 和標(biāo)簽數(shù)據(jù) train-labels-idx1-ubyte.gz.
分別將他們解壓后放在本地文件夾中,解壓后文件名為train-images-idx3-ubyte和train-labels-idx1-ubyte. 訓(xùn)練數(shù)據(jù)集一共包含了6萬個手寫數(shù)字灰度圖和對應(yīng)的標(biāo)簽.
為圖方便,我們直接從訓(xùn)練數(shù)據(jù)集中提取5000個作為測試數(shù)據(jù).當(dāng)然,實際訓(xùn)練數(shù)據(jù)中并不包含這些測試數(shù)據(jù).


2.設(shè)計神經(jīng)網(wǎng)絡(luò)
采用簡單的三層全連接神經(jīng)網(wǎng)絡(luò),包括輸入層(wi),中間層(wm)和輸出層(wo).這里暫時不使用卷積層,下次替換后進(jìn)行比較.
輸入層: 一共20個神經(jīng)元,每一張手寫數(shù)字的圖片大小為28x28,將全部展平后的784個灰度數(shù)據(jù)歸一化,即除以255.0, 使其數(shù)值位于[0 1]區(qū)間,這樣可以防止數(shù)據(jù)在層層計算和傳遞后變得過分大.將這784個[0 1]之間的數(shù)據(jù)與20個神經(jīng)元進(jìn)行全連接.神經(jīng)元激活函數(shù)用func_ReLU.
中間層: 一共20個神經(jīng)元,與輸入層的20個神經(jīng)元輸出進(jìn)行全連接.神經(jīng)元激活函數(shù)用func_ReLU.
輸出層: 一共10個神經(jīng)元,分別對應(yīng)0~9數(shù)字的可能性,與中間層的20個神經(jīng)元輸出進(jìn)行全連接.層的激活函數(shù)用func_softmax.
特別地,神經(jīng)元的激活函數(shù)在new_nvcell()中設(shè)定,層的激活函數(shù)直接賦給nerve_layer->transfunc.
損失函數(shù): 采用期望和預(yù)測值的交叉熵?fù)p失函數(shù)func_lossCrossEntropy. 損失函數(shù)在nvnet_feed_forward()中以參數(shù)形式輸入.

3.訓(xùn)練神經(jīng)網(wǎng)絡(luò)
由于整個程序是以nvcell神經(jīng)元結(jié)構(gòu)為基礎(chǔ)進(jìn)行構(gòu)建的,其不同于矩陣/張量形式的批量數(shù)據(jù)描述,因此這個神經(jīng)網(wǎng)絡(luò)只能以神經(jīng)元為單位,逐個逐層地進(jìn)行前向和反向傳導(dǎo).
相應(yīng)地,這里采用SGD(Stochastic Gradient Descent)梯度下降更新法,即對每一個樣本先進(jìn)行前向和反向傳導(dǎo)計算,接著根據(jù)計算得到的梯度值馬上更新所有參數(shù).與此不同,mini-batch GD采用小批量樣本進(jìn)行前向和反向傳導(dǎo)計算,然后根據(jù)累積的梯度數(shù)值做1次參數(shù)更新.顯然,采用SGD方法參數(shù)更新更加頻繁,計算時間相應(yīng)也變長了.不過,據(jù)網(wǎng)文分析,采用SGD也更容易趨近全局最優(yōu)解,盡管逼近的途徑會比較曲折.本文程序中的分批計算是為了方便監(jiān)控計算過程和打印中間值.(當(dāng)然,要實現(xiàn)mini-batch GD也是可以的,先完成一批量樣本的前后傳導(dǎo)計算,期間將各參數(shù)的梯度累計起來,? 最后取其平均值更新一次參數(shù).)
這里使用平均損失值mean_err<=0.0025來作為訓(xùn)練的終止條件,為防止無法收斂到此數(shù)值,同時設(shè)置最大的epoch計數(shù).
訓(xùn)練的樣本數(shù)量由TRAIN_IMGTOTAL來設(shè)定, 訓(xùn)練時,先讀取一個樣本數(shù)據(jù)和一個標(biāo)簽,分別存入到data_input[28*28]和data_target[10], 為了配合應(yīng)用softmax函數(shù),這里data_target[]是one-hot編碼格式.讀入樣本數(shù)據(jù)后先進(jìn)行前向傳導(dǎo)計算nvnet_feed_forward(),接著進(jìn)行反向傳導(dǎo)計算nvnet_feed_backward(), 最后更新參數(shù)nvnet_update_params(), 這樣就完成了一個樣本的訓(xùn)練.如此循環(huán)計算,完成一次所有樣本的訓(xùn)練(epoch)后計算mean_err, 看是否達(dá)到預(yù)設(shè)目標(biāo).

4.測試訓(xùn)練后的神經(jīng)網(wǎng)絡(luò)
訓(xùn)練完成后,對模型進(jìn)行簡單評估.方法就是用訓(xùn)練后的模型來預(yù)測(predict)或推理(infer)前面的測試數(shù)據(jù)集中的圖像數(shù)據(jù),將結(jié)果與對應(yīng)的標(biāo)簽值做對比.
同樣,將一個測試樣本加載到data_input[], 跑一次nvnet_feed_forward(),直接讀取輸出層的wo_layer->douts[k] (k=0~9),如果其值大于0.5,就認(rèn)為模型預(yù)測圖像上的數(shù)字是k.

5.小結(jié)
取5萬條訓(xùn)練樣本進(jìn)行訓(xùn)練,訓(xùn)練后再進(jìn)行測試,其準(zhǔn)確率可接近94%.
與卷積神經(jīng)網(wǎng)絡(luò)相比較,為達(dá)到相同的結(jié)果,全連接的神經(jīng)網(wǎng)絡(luò)的所需要的訓(xùn)練時間會更長.

6.實驗和改進(jìn)
可以先將28*28的圖片下采樣到14*14后再連接到輸入層.這樣可以提高速度.

可以增加神經(jīng)網(wǎng)絡(luò)層數(shù)進(jìn)行驗證。

可以試著調(diào)整輸入層和中間層的神經(jīng)元數(shù)目.

也可以試著調(diào)整單個神經(jīng)元的輸入連接方式...

源代碼:
https://github.com/midaszhou/nnc
下載后編譯:
make TEST_NAME=test_nnc2

用C語言構(gòu)建一個手寫數(shù)字識別神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò),人工智能,深度學(xué)習(xí),c語言

參考資料:
1.? MNIST手寫數(shù)字集 http://yann.lecun.com/exdb/mnist/
2.? peterroelants神經(jīng)網(wǎng)絡(luò)例子 https://peterroelants.github.io/posts/neural-network-implementation-part05/

下一篇: 用C語言構(gòu)建一個數(shù)字識別卷積神經(jīng)網(wǎng)絡(luò)文章來源地址http://www.zghlxwxcb.cn/news/detail-619305.html

到了這里,關(guān)于用C語言構(gòu)建一個手寫數(shù)字識別神經(jīng)網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 手寫數(shù)字識別--神經(jīng)網(wǎng)絡(luò)實驗

    手寫數(shù)字識別--神經(jīng)網(wǎng)絡(luò)實驗

    ?我自己搞的代碼,預(yù)測精度才94% 神經(jīng)網(wǎng)絡(luò)實驗報告源碼.zip - 藍(lán)奏云 ?老師給的實驗源碼答案和資料,預(yù)測精度高達(dá)99% 深度學(xué)習(xí)實驗報告.zip - 藍(lán)奏云 上深度學(xué)習(xí)的課程,老師布置了一個經(jīng)典的實驗報告,我做了好久才搞懂,所以把實驗報告放到CSDN保存,自己忘了方便查閱

    2024年02月06日
    瀏覽(22)
  • 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)-手寫數(shù)字識別

    神經(jīng)網(wǎng)絡(luò)基礎(chǔ)-手寫數(shù)字識別

    基本原理 圖像本質(zhì)上被認(rèn)為是一個矩陣,每個像素點都是一個對應(yīng)的像素值,相當(dāng)于在多維數(shù)據(jù)上進(jìn)行相關(guān)的歸類或者其他操作。 線性函數(shù) 線性函數(shù)的一個從輸入到輸出的映射,用于給目標(biāo)一個每個類別對應(yīng)的得分。 圖像 ( 32 ? 32 ? 3 ) → f ( x , W ) Y 圖像(32*32*3) stackrel{

    2024年02月02日
    瀏覽(24)
  • 手寫數(shù)字識別-基于卷積神經(jīng)網(wǎng)絡(luò)

    手寫數(shù)字識別-基于卷積神經(jīng)網(wǎng)絡(luò)

    ??歡迎來到機(jī)器學(xué)習(xí)的世界? ??博客主頁:卿云閣 ???歡迎關(guān)注??點贊??收藏??留言?? ??本文由卿云閣原創(chuàng)! ??本階段屬于練氣階段,希望各位仙友順利完成突破 ??首發(fā)時間:??2021年6月5日?? ??希望可以和大家一起完成進(jìn)階之路! ??作者水平很有限,如果發(fā)

    2024年02月10日
    瀏覽(18)
  • 【深度學(xué)習(xí)】2-4 神經(jīng)網(wǎng)絡(luò)-手寫數(shù)字識別

    在實現(xiàn)對手寫數(shù)字圖像的分類,可以先假設(shè)學(xué)習(xí)已經(jīng)全部結(jié)束,我們使用學(xué)習(xí)到的參數(shù),先實現(xiàn)神經(jīng)網(wǎng)絡(luò)的“推理處理”。該處理也稱為神經(jīng)網(wǎng)絡(luò)的 前向傳播 。 和求解機(jī)器學(xué)習(xí)問題的步驟(分成學(xué)習(xí)和推理兩個階段進(jìn)行)一樣 使用神經(jīng)網(wǎng)絡(luò)解決問題時,也需要 首先使用訓(xùn)練數(shù)

    2024年02月09日
    瀏覽(23)
  • 【神經(jīng)網(wǎng)絡(luò)手寫數(shù)字識別-最全源碼(pytorch)】

    【神經(jīng)網(wǎng)絡(luò)手寫數(shù)字識別-最全源碼(pytorch)】

    Torch安裝的方法 學(xué)習(xí)方法 1.邊用邊學(xué),torch只是一個工具,真正用,查的過程才是學(xué)習(xí)的過程 2.直接就上案例就行,先來跑,遇到什么來解決什么 Mnist分類任務(wù): 網(wǎng)絡(luò)基本構(gòu)建與訓(xùn)練方法,常用函數(shù)解析 torch.nn.functional模塊 nn.Module模塊 讀取Mnist數(shù)據(jù)集 會自動進(jìn)行下載 784是m

    2024年02月14日
    瀏覽(47)
  • pytorch集智-5手寫數(shù)字識別器-卷積神經(jīng)網(wǎng)絡(luò)

    pytorch集智-5手寫數(shù)字識別器-卷積神經(jīng)網(wǎng)絡(luò)

    簡稱:CNN,convolutional neural network 應(yīng)用場景:圖像識別與分類(CNN),看圖說話(CNN+RNN)等 優(yōu)越性:和多層感知機(jī)相比,cnn可以識別獨(dú)特的模式,可以自動從數(shù)據(jù)中提取特征。一般機(jī)器學(xué)習(xí)需要特征工程,cnn可以自動識別,極大代替或取代了特征工程 和多層感知機(jī)原理不同

    2024年01月19日
    瀏覽(24)
  • CNN卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)手寫數(shù)字識別(基于tensorflow)

    CNN卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)手寫數(shù)字識別(基于tensorflow)

    卷積網(wǎng)絡(luò)的 核心思想 是將: 局部感受野 權(quán)值共享(或者權(quán)值復(fù)制) 時間或空間亞采樣 卷積神經(jīng)網(wǎng)絡(luò) (Convolutional Neural Networks,簡稱: CNN )是深度學(xué)習(xí)當(dāng)中一個非常重要的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。它主要用于用在 圖像圖片處理 , 視頻處理 , 音頻處理 以及 自然語言處理 等等。

    2024年02月11日
    瀏覽(23)
  • PyTorch訓(xùn)練簡單的全連接神經(jīng)網(wǎng)絡(luò):手寫數(shù)字識別

    數(shù)據(jù)集:MNIST 該數(shù)據(jù)集的內(nèi)容是手寫數(shù)字識別,其分為兩部分,分別含有60000張訓(xùn)練圖片和10000張測試圖片 神經(jīng)網(wǎng)絡(luò):全連接網(wǎng)絡(luò) 【1】https://www.youtube.com/watch?v=Jy4wM2X21u0list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vzindex=3

    2024年02月16日
    瀏覽(31)
  • 卷積神經(jīng)網(wǎng)絡(luò)(CNN)入門:使用Python實現(xiàn)手寫數(shù)字識別

    在上一篇文章中,我們介紹了如何使用Python實現(xiàn)一個簡單的前饋神經(jīng)網(wǎng)絡(luò)。本文將重點介紹卷積神經(jīng)網(wǎng)絡(luò)(CNN),這是一種在計算機(jī)視覺任務(wù)中表現(xiàn)優(yōu)異的深度學(xué)習(xí)模型。我們將從卷積神經(jīng)網(wǎng)絡(luò)的基本原理開始,介紹卷積層、池化層和全連接層等概念,然后使用Python和Keras庫

    2023年04月15日
    瀏覽(22)
  • (神經(jīng)網(wǎng)絡(luò))MNIST手寫體數(shù)字識別MATLAB完整代碼

    (神經(jīng)網(wǎng)絡(luò))MNIST手寫體數(shù)字識別MATLAB完整代碼

    ????????在此次實驗中,筆者針對 MNIST 數(shù)據(jù)集,利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練與測試,提 出了一系列的改進(jìn)方法,并對這些改進(jìn)的方法進(jìn)行了逐一驗證,比較了改進(jìn)方法與淺層 神經(jīng)網(wǎng)絡(luò)的優(yōu)劣。 ????????首先,筆者對實驗中所用的 MNIST 數(shù)據(jù)集進(jìn)行了簡單的介紹;接著,

    2024年02月03日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包