久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

最簡單的人工神經網絡實現

 arm_embed 2012-07-30

最簡單的人工神經網絡實現

分類: 人工神經網絡 1401人閱讀 評論(14) 收藏 舉報

人工神經網絡算法是模擬 人的神經網絡的一種算法.

該算法像人一樣,,具有一定的學習能力,。  人工神經網絡可以學會它所能表達的任何東西.

該算法在模擬人類抽象思維方面較傳統的算法具有優(yōu)勢,如圖像識別 (人臉識別,,車牌識別),, 聲音識別方面已經有成熟的運用。

 

舉個簡單的例子可以說明人工神經網絡和傳統算法的差別所在 (等會也要實現):

假設要解決這個問題: 寫一個程序,, 判斷 0, 1, 2, 3 ... 9 這10個數的奇偶性

1. 如果是傳統算法,, 則是模擬人的邏輯思維,對這個問題進行形式化和邏輯化 :

if (input 模  2  == 零) {

    input 是 偶數

} else {

    input 是 奇數

}

2. 如果是ANN算法,,則要提供一組正確的數據對處理這個問題的神經網絡ANN進行訓練 :

未進行訓練的神經網絡,,就像剛出生的嬰兒一樣,什么都不懂,。這個時候, 你要教他 0 是偶數,,  1是奇數....,

教完之后問ANN懂了沒有,懂了則停止訓練 (網絡已經形成),,不懂則繼續(xù)訓練.

while (1) {

    訓練;

    if (測試通過)  {

         跳出循環(huán);

    } 

}

訓練完之后,,這個ANN以后便能夠正確處理 奇偶性判斷的問題了.

處理上面這個問題,只需要模擬一個神經元即可,,再復雜的問題,,可能需要多個神經元,再再復雜,,需要多層多神經元的配合來實現 (以后再研究)

 

下面是實現:

  1. /***************************************** 
  2.  * 感知器判斷數字奇偶性 
  3.  * 
  4.  * 關鍵點,閾值應該怎么定? 
  5.  ****************************************/  
  6. #include <stdlib.h>  
  7. #include <stdio.h>  
  8. #include <time.h>  
  9.   
  10.   
  11. int M[10];  /** 權值 **/  
  12. int X[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; /** 輸入向量 **/  
  13. int Y[10] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0};  /** 理想輸出向量, 0 表示奇數,, 1表示偶數 **/  
  14. int O[10];  /** 保存輸出向量 **/  
  15. int ST = 52; /** 閾值 **/  
  16.   
  17.   
  18.   
  19. /** 初始化權值 **/  
  20. void initM ()  
  21. {  
  22.     int x = 0;  
  23.     srand ((unsigned int)time(0));  
  24.     for (x = 0; x < 10; ++x) {  
  25.         /** 隨機數在 0 - 99 之間 **/  
  26.         M[x] = rand () % 100;  
  27.     }  
  28. }  
  29.   
  30. /** 躍遷型激活函數 **/  
  31. int active (int m, int x)  
  32. {  
  33.     int o = m * x;  
  34.     if (o > ST) {  
  35.         return 1;  
  36.     } else {  
  37.         return 0;  
  38.     }      
  39. }  
  40.   
  41. /** 計算輸出向量 **/  
  42. void calcY ()  
  43. {  
  44.     int x = 0;  
  45.     for (x = 0; x < 10; ++x) {  
  46.         O[x] = active (M[x], X[x]);  
  47.     }  
  48. }  
  49.   
  50.   
  51. /** 根據實際輸出向量和理想輸出向量調整權向量,  
  52.     返回 實際輸出和理想輸出不匹配的數目 **/  
  53. int adjustM ()  
  54. {  
  55.     int err = 0;  
  56.     int x = 0;  
  57.     for (x = 0; x < 10; ++x) {  
  58.         if (O[x] != Y[x])  
  59.         {  
  60.             err ++;  
  61.             if (0 == O[x]) {  
  62.                 M[x] += X[x];  
  63.             } else {  
  64.                 M[x] -= X[x];  
  65.             }  
  66.         }  
  67.     }  
  68.     return err;  
  69. }  
  70.   
  71.   
  72. /** 打印權向量 **/  
  73. void printM ()  
  74. {  
  75.     int x = 0;  
  76.     for (x = 0; x < 10; ++x) {  
  77.         printf ("M[%i] = %i/n", x, M[x]);  
  78.     }  
  79. }  
  80.   
  81.   
  82. void test (int input)  
  83. {  
  84.     printf ("[%i] [%i] ", M[input], X[input]);  
  85.     if (active (M[input], X[input]))  
  86.     {  
  87.         printf ("%d 是 偶數/n", input);  
  88.     } else {  
  89.         printf ("%d 是 奇數/n", input);  
  90.     }  
  91. }  
  92.   
  93. int main ()  
  94. {  
  95.     int n = 0;  
  96.     initM ();  
  97.   
  98.     /** 一直訓練直到能夠100%正確為止 **/  
  99.     while (1) {  
  100.         n ++;  
  101.         calcY ();  
  102.         int err = adjustM ();  
  103.         if (0  >= err) {  
  104.             /** 能夠 100 %正確地回答問題了,結束訓練 **/  
  105.             break;  
  106.         }  
  107.         printf ("錯誤數 %d/n", err);  
  108.     }  
  109.   
  110.     printM ();  
  111.     printf ("閾值 %d 訓練次數 %d/n", ST, n);  
  112.   
  113.   
  114.     while (1) {  
  115.         int a = 0;  
  116.         scanf ("%i", &a);  
  117.         if (0 > a || 9 < a) {  
  118.             break;  
  119.         }  
  120.   
  121.         test (a);  
  122.     }  
  123.     return 0;  
  124. }  
測試, 選擇 閾值 52 作為測試,,經過25次訓練之后,,能夠給100 % 回答問題.
  1. M[0] = 53  
  2. M[1] = 26  
  3. M[2] = 40  
  4. M[3] = 11  
  5. M[4] = 59  
  6. M[5] = 4  
  7. M[6] = 21  
  8. M[7] = -1  
  9. M[8] = 68  
  10. M[9] = 4  
  11. 閾值 52 訓練次數 25  

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多