慢慢发现,百度上很多东西都没有,还是得自己去写,代码很简单,慢慢看就容易看懂,建议看之前,先看这篇文章
转载请注明: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();
}
原文链接: https://www.cnblogs.com/gambler/p/9039607.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/273983
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!