慢慢发现,百度上很多东西都没有,还是得自己去写,代码很简单,慢慢看就容易看懂,建议看之前,先看这篇文章
转载请注明:http://www.cnblogs.com/gambler/p/9039607.html
#include<bits/stdc++.h> using namespace std; #define MAX_SIZE 1000000 //或运算结果图 //0 0 0 //1 0 1 //0 1 0 //1 1 0 // int expdata[MAX_SIZE][2];//训练数据 double w[2];//权值 double jud;//阈值 double spe;//训练速率 int Y=0;//实际输出值 int M;//理论输出值 int N;//表示有多少组数据 void init(void){//初始化数据 cout<<"请输入初始权值:"<<endl; cin>>w[0]>>w[1]; cout<<"请输入初始阈值和训练速率:"<<endl; cin>>jud>>spe; cout<<"开始训练!"<<endl; freopen("input.txt","r",stdin); cin>>N; int j; for(j=0;j<N;j++){ cin>>expdata[j][0]>>expdata[j][1]; } } int T(int a,int b){ if(a==1||b==1){ return 1; }else{ return 0; } } //加权修正公式为:w[i]=w[i]+spe*(T-Y)*x void weighteinterpolation(int a,int b){ w[0]=w[0]+spe*(M-Y)*a; w[1]=w[1]+spe*(M-Y)*b; } void display(int a){ cout<<"第"<<a+1<<"次训练:"<<endl; cout<<"输入: X0="<<expdata[a][0]<<"\tX1="<<expdata[a][1]<<endl; cout<<"权值: w[0]="<<w[0]<<"\tw[1]="<<w[1]<<endl; cout<<"理论值:M="<<M<<"\ts实际值="<<Y<<endl; } void trainperceptron(){//进行训练 int result=0; int i; for(i=0;i<N;i++){ result=w[0]*expdata[i][0]+w[1]*expdata[i][1]-jud; if(result<=0){ Y=0; }else{ Y=1; } M=T(expdata[i][0],expdata[i][1]); if(T(expdata[i][0],expdata[i][1])!=Y){ weighteinterpolation(expdata[i][0],expdata[i][1]); } display(i); } } void show(){ cout<<"训练结束!!!"<<endl; cout<<"训练后的权值是:"<<endl; cout<<"w[0]:"<<w[0]<<"\tw[1]:"<<w[1]<<endl; } int main(){ init(); trainperceptron(); show(); }