神经网络:晶体管显示

版权声明:所有文章都是自己编写整理,可以转载分享。--Zen in Zen https://blog.csdn.net/weixin_32393347/article/details/86018581

神经网络晶体管显示

题目要求

一、题目要求
设用7个短线段构成1,2,…,9,0共10个数码图形,令这7个线段分别用一个矢量来代表,又设对数码图形中用到的线段,相应分量取值为1,未用到的线段相应的分量取值为0,因此每个数码图形分别可由一个矢量表示,其顺序编号为:,试设计一神经网络,能够区分奇数码和偶数码。

流程图

在这里插入图片描述

源代码

#include<iostream.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <fstream.h>
void main()
{
	double X[10][8]={{1,0,0,1,1,0,0,0},{1,0,1,1,0,1,1,1},{1,0,1,1,1,1,0,1},{1,1,0,1,1,0,0,1},{1,1,1,0,1,1,0,1},{1,1,1,0,1,1,1,1},{1,1,1,1,1,0,0,0},{1,1,1,1,1,1,1,1},{1,1,1,1,1,1,0,1},{1,1,1,1,1,1,1,0}};//样本输入
	double Y[10]={1,0,1,0,1,0,1,0,1,0};//目标输出
	double y[10]={0};
	float s=0.0,e=0.000,E=0.000;//误差
	int i,j,pass=0;
	double step=0.02;//学习步长
	double W[8]={0};//权值
	double dertw[8]={0};//权值调整量
	/////////////////////////////////权值/////////////////////////////////
	srand((unsigned)time(NULL));//以时间为种子产生随机数
	ofstream   out("数码管.txt");
	out<<"初始的连接权值和阈值:\n";
	for (i=0;i<8;i++)
	{
		W[i]=(rand()%100)/100.0;//权值赋初始值[0,1]
		out<<"W["<<i<<"]="<<W[i]<<endl;
	}
	do //训练样本
	{
		++pass;
		E=0;
		double max=0;
		///////////////////////////////学习样本//////////////////////
		for (i=0;i<10;i++)
		{
			for (j=0;j<8;j++)
			{
				s=s+X[i][j]*W[j];
			}
			if (s<0)
			{
				y[i]=0;
			} 
			else
			{
				y[i]=1;
			}
			s=0.00;//活化值置零
			e=fabs(Y[i]-y[i]);//计算偏差
			E=E+fabs(e);
			if (e>max)
			{
				max=e;
			}
		}
      //////////////////////////////判断误差/////////////////////////////
		if (max<0.00001)
		{
			break;
		}
     ///////////////////////////////权值修改///////////////////////////
		for (i=0;i<10;i++)
		{
			for (j=0;j<8;j++)
			{
				dertw[j]=step*(Y[i]-y[i])*X[i][j];
				W[j]=W[j]+dertw[j];
				
			}
		}
	} while(pass<6000);
	out<<"训练次数为:"<<pass<<"小于最大训练次数6000,结果可靠!\n";
	out<<"输出训练后的权值:"<<"\n";
	for (i=0;i<8;i++)
	{
		out<<"w["<<i<<"]="<<W[i]<<"\n";
	}
    out<<"输出训练后样本测试结果:训练结果与真实值的对比"<<"\n";
	out<<"\n";
	for (i=0;i<10;i++)//对样本进行验证
	{
		for (j=0;j<8;j++)
		{
			y[i]=y[i]+X[i][j]*W[j];
		}
		if (y[i]<0)
		{
			y[i]=0;
		} 
		else
		{
			y[i]=1;
		}
     out<<"y["<<i<<"]="<<y[i]<<"     ";
	 out<<"Y["<<i<<"]="<<Y[i]<<"     \n";
	}

}

结果显示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_32393347/article/details/86018581