人工智能——神经网络算法初体验 【精华】

永远支持LG,转自:http://blog.csdn.net/cnyali/article/details/50864942

cnyali的博客

这个程序其实就是让人工智能学习并认识怎么判断一个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;

}

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/ILECY/article/details/50867208
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞