人工智能——神經網絡算法初體驗

轉自http://blog.csdn.net/cnyali/article/details/50864942

這個程序其實就是讓人工智能學習並認識怎麼判斷一個0~9的數是奇數還是偶數,最簡單的人工智能程序

// 感知器判斷數字奇偶性   
#include<stdlib.h>  
#include<stdio.h>  
#include<time.h>  
  
int M[10];//權值   
int X[10]={1,2,3,4,5,6,7,8,9,10};//輸入向量   
int Y[10]={1,0,1,0,1,0,1,0,1,0};//理想輸出向量,0,奇數,1,偶數   
int O[10];//保存輸出向量   
int ST=52;//閾值   
  
void initM(){//初始化權值      
    srand((unsigned int)time(0));  
    for(int x=0;x<10;++x)  
        M[x]=rand()%100;  
}   
  
int active(int m,int x){// 躍遷型激活函數    
    int o=m*x;  
    if(o>ST)return 1;  
    else return 0;  
}  
  
void calcY(){//計算輸出向量   
    for(int x=0;x<10;++x)  
        O[x]=active(M[x],X[x]);  
}  
  
//根據實際輸出向量和理想輸出向量調整權向量,  
//返回實際輸出和理想輸出不匹配的數目  
int adjustM(){  
    int err=0;  
    for(int x=0;x<10;++x)  
        if(O[x]!=Y[x]){  
            err++;  
            if(0==O[x])  
                M[x]+=X[x];  
            else  
                M[x]-=X[x];  
        }   
    return err;  
}  
  
void printM(){//打印權向量   
    for(int x=0;x<10;++x)  
        printf("M[%i]=%i\n",x,M[x]);  
}  
  
void test(int input){  
    printf("[%i][%i]",M[input],X[input]);  
    if(active(M[input],X[input]))  
        printf("%d 是偶數\n",input);  
    else  
        printf("%d 是奇數\n",input);  
}  
  
int main(){  
    int n=0;  
    initM();  
    while(1){// 一直訓練直到能夠100%正確爲止    
        n++;  
        calcY();  
        int err=adjustM();  
        if(0>=err)break;//能夠 100 %正確地回答問題了,結束訓練  
        printf("錯誤數%d\n",err);  
    }  
    printM();  
    printf("閾值%d 訓練次數%d\n",ST,n);  
      
    while(1){  
        int a=0;  
        scanf("%i",&a);  
        if(0>a || 9<a)break;  
        test(a);  
    }  
    return 0;  
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章