C# BP程序.docx

上传人:b****5 文档编号:11568683 上传时间:2023-03-19 格式:DOCX 页数:17 大小:16.61KB
下载 相关 举报
C# BP程序.docx_第1页
第1页 / 共17页
C# BP程序.docx_第2页
第2页 / 共17页
C# BP程序.docx_第3页
第3页 / 共17页
C# BP程序.docx_第4页
第4页 / 共17页
C# BP程序.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C# BP程序.docx

《C# BP程序.docx》由会员分享,可在线阅读,更多相关《C# BP程序.docx(17页珍藏版)》请在冰豆网上搜索。

C# BP程序.docx

C#BP程序

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.IO;

usingSystem.Text;

usingSystem.Data;

namespaceNN_HYL

{

classNN

{

intk=100,Tk=30,jj=0;

intNi=4,No=1,time=10000,Nh;

double[,]W1,W2,deltaW1,deltaW2,betaO,betaH,Ohidden,Ooutput;

double[]thrH,thrO,deltathrH,deltathrO;//p;

doubler,eps,a,P;

publicNN()

{

Nh=3;

r=2.5;

eps=0.01;

a=1;

W1=newdouble[Ni,Nh];

W2=newdouble[Nh,No];

deltaW1=newdouble[Ni,Nh];

deltaW2=newdouble[Nh,No];

betaO=newdouble[k,No];

betaH=newdouble[k,Nh];

Ohidden=newdouble[k,Nh];

Ooutput=newdouble[k,No];

thrH=newdouble[Nh];

thrO=newdouble[No];

deltathrH=newdouble[Nh];

deltathrO=newdouble[No];

//p=newdouble[k];

}

protectedList>m_XExamples;//输入训练样本

protectedList>m_YExamples;//输出训练样本

publicboolXY()

{

//初始化样本,输入初始化为1,输出初始化为0

m_XExamples=newList>();

m_YExamples=newList>();

for(inti=0;i

{

Listrow=newList();

for(intj=0;j

{

row.Add(1.0);

}

m_XExamples.Add(row);

Listrow1=newList();

for(intj=0;j

{

row1.Add(0.0);

}

m_YExamples.Add(row1);

}

returntrue;

}

publicboolGet_XExamValue(intexamIndex,intindex,refdoublea)

{

if(examIndex<1||examIndex>k)

{

returnfalse;

}

if(index<1||index>Ni)

{

returnfalse;

}

a=m_XExamples[examIndex-1][index-1];

returntrue;

}

//设置输入样本值

publicboolSet_XExamValue(intexamIndex,intindex,doubleexamValue)

{

if(examIndex<1||examIndex>k)

{

returnfalse;

}

if(index<1||index>Ni)

{

returnfalse;

}

m_XExamples[examIndex-1][index-1]=examValue;

returntrue;

}

//获得输出样本

publicboolGet_YExamValue(intexamIndex,intindex,refdoublea)

{

if(examIndex<1||examIndex>k)

{

returnfalse;

}

if(index<1||index>No)

{

returnfalse;

}

a=m_YExamples[examIndex-1][index-1];

returntrue;

}

//设置输出样本值

publicboolSet_YExamValue(intexamIndex,intindex,doubleexamValue)

{

if(examIndex<1||examIndex>k)

{

returnfalse;

}

if(index<1||index>No)

{

returnfalse;

}

m_YExamples[examIndex-1][index-1]=examValue;

returntrue;

}

protectedList>m_TXExamples;//输入测试样本

protectedList>m_TYExamples;//输出测试样本

publicboolTXY()

{

//初始化样本,输入初始化为1,输出初始化为0

m_TXExamples=newList>();

m_TYExamples=newList>();

for(inti=0;i

{

Listrow=newList();

for(intj=0;j

{

row.Add(1.0);

}

m_TXExamples.Add(row);

Listrow1=newList();

for(intj=0;j

{

row1.Add(0.0);

}

m_TYExamples.Add(row1);

}

returntrue;

}

publicboolGet_TXExamValue(intexamIndex,intindex,refdoublea)

{

if(examIndex<1||examIndex>Tk)

{

returnfalse;

}

if(index<1||index>Ni)

{

returnfalse;

}

a=m_TXExamples[examIndex-1][index-1];

returntrue;

}

//设置输入样本值

publicboolSet_TXExamValue(intexamIndex,intindex,doubleexamValue)

{

if(examIndex<1||examIndex>k)

{

returnfalse;

}

if(index<1||index>Ni)

{

returnfalse;

}

m_TXExamples[examIndex-1][index-1]=examValue;

returntrue;

}

publicboolInit()

{

inti,j;

Randomrd=newRandom();

for(i=0;i

{

for(j=0;j

{

W1[i,j]=rd.NextDouble()-0.5;//%12/10.0-1.2;

}

}

for(i=0;i

{

for(j=0;j

{

W2[i,j]=rd.NextDouble()-0.5;//%12/10.0-1.2;

}

}

for(i=0;i

for(i=0;i

returntrue;

}

doublesigmoid(doublex)

{

return1.0/(1.0+Math.Exp(-a*x));

}

doublesum1(intk,inth,inti)

{

doublet=0;

intj;

switch(h)

{

case1:

for(j=0;j

{

t+=W1[j,i]*m_XExamples[k][j];

}

t-=thrH[i];

break;

case2:

for(j=0;j

{

t+=W2[j,i]*Ohidden[k,j];

}

t-=thrO[i];

break;

default:

break;

}

returnt;

}

doublesum2(intk,inth,inti)

{

doublet=0;

for(intj=0;j

{

t+=W2[i,j]*Ooutput[k,j]*(1.0-Ooutput[k,j])*betaO[k,j];

}

returnt;

}

voidforward(intk)

{

doubleerrorsum=0;

for(inti=0;i

{

Ohidden[k,i]=sigmoid(sum1(k,1,i));

}

for(inti=0;i

{

Ooutput[k,i]=sigmoid(sum1(k,2,i));

if(m_YExamples[k][i]!

=0)

{

P=Math.Abs((m_YExamples[k][i]-Ooutput[k,i])/m_YExamples[k][i]);

errorsum+=P;

}

else

{

P=Math.Abs(m_YExamples[k][i]-Ooutput[k,i]);

errorsum+=P;

}

}

P=errorsum/No;

}

voidbackward(intk)

{

inti,j;

for(i=0;i

{

betaO[k,i]=m_YExamples[k][i]-Ooutput[k,i];

}

for(i=0;i

{

betaH[k,i]=sum2(k,1,i);

}

for(i=0;i

{

for(j=0;j

{

deltaW2[i,j]=r*Ohidden[k,i]*Ooutput[k,j]*(1-Ooutput[k,j])*betaO[k,j];

}

}

for(i=0;i

{

deltathrO[i]=-r*Ooutput[k,i]*(1-Ooutput[k,i])*betaO[k,i];

}

for(i=0;i

{

for(j=0;j

{

deltaW1[i,j]=r*m_XExamples[k][i]*Ohidden[k,j]*(1-Ohidden[k,j])*betaH[k,j];

}

}

for(i=0;i

{

deltathrH[i]=-r*Ohidden[k,i]*(1-Ohidden[k,i])*betaH[k,i];;

}

for(i=0;i

for(j=0;j

{

W2[i,j]+=deltaW2[i,j];

}

for(i=0;i

for(j=0;j

{

W1[i,j]+=deltaW1[i,j];

}

for(i=0;i

for(i=0;i

}

publicboolTrain()

{

do

{

jj++;

for(inti=0;i

{

forward(i);

backward(i);

}

}

while(P>eps&&jj

returntrue;

}

publicboolshuchu()

{

//********************************

//写文本

FileStreamfs=newFileStream("最后输出节点的值.txt",FileMode.Create);

StreamWritersw=newStreamWriter(fs);

for(inti=0;i

for(intj=0;j

sw.WriteLine("{0,-20}{1,-20}{2,-20}",i+1,j+1,Ooutput[i,j]);

sw.Close();

fs.Close();

//********************************

//写文本

FileStreamfss=newFileStream("误差值.txt",FileMode.Create);

StreamWritersww=newStreamWriter(fss);

sww.WriteLine("{0,-20}{1,-20}",P,jj);

sww.Close();

fss.Close();

//********************************

//写文本

FileStreamfffs=newFileStream("最终输入节点与隐层节点的权值.txt",FileMode.Create);

StreamWritersssw=newStreamWriter(fffs);

for(inti=0;i

{

for(intj=0;j

{

sssw.WriteLine("{0,-20}{1,-20}{2,-20}",i+1,j+1,W1[i,j]);

}

}

sssw.Close();

fffs.Close();

//********************************

//写文本

FileStreamffs=newFileStream("最终隐层节点与输出节点的权值.txt",FileMode.Create);

StreamWriterssw=newStreamWriter(ffs);

for(inti=0;i

{

for(intj=0;j

{

ssw.WriteLine("{0,-20}{1,-20}{2,-20}",i+1,j+1,W2[i,j]);

}

}

ssw.Close();

ffs.Close();

//********************************

//写文本

FileStreamffss=newFileStream("最终隐含层阈值.txt",FileMode.Create);

StreamWriterssww=newStreamWriter(ffss);

for(inti=0;i

{

ssww.WriteLine("{0,-20}",thrH[i]);

}

ssww.Close();

ffss.Close();

ssw.Close();

ffs.Close();

//********************************

//写文本

FileStreamff=newFileStream("最终输出层阈值.txt",FileMode.Create);

StreamWriterss=newStreamWriter(ff);

for(inti=0;i

{

ss.WriteLine("{0,-20}",thrO[i]);

}

ss.Close();

ff.Close();

returntrue;

}

doublesum12(double[]ti,inth,inti)

{

doublet=0;

intj;

switch(h)

{

case1:

for(j=0;j

{

t+=W1[j,i]*ti[j];

}

t-=thrH[i];

break;

case2:

for(j=0;j

{

t+=W2[j,i]*Ohidden[0,j];

}

t-=thrO[i];

break;

default:

break;

}

returnt;

}

publicboolTest()

{

double[]t=newdouble[Ni];

for(intkk=0;kk

{

//double[]O=newdouble[No];

t[0]=m_TXExamples[kk][0];

t[1]=m_TXExamples[kk][1];

t[2]=m_TXExamples[kk][2];

t[3]=m_TXExamples[kk][3];

for(inti=0;i

{

Ohidden[0,i]=sigmoid(sum12(t,1,i));

}

for(inti=0;i

{

Ooutput[0,i]=sigmoid(sum12(t,2,i));

m_TYExamples[kk][i]=Ooutput[0,i];

//O[i]=Ooutput[0,i];

}

}

//********************************

//写文本

FileStreamff=newFileStream("TEST_0ut.txt",FileMode.Create);

StreamWriterss=newStreamWriter(ff);

for(intj=0;j

for(inti=0;i

{

ss.WriteLine("{0,-20}",m_TYExamples[j][i]);

}

ss.Close();

ff.Close();

returntrue;

}

}

}

 

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.IO;

usingSystem.Text;

usingSystem.Data;

namespaceNN_HYL

{

classProgram

{

staticvoidMain(string[]args)

{

NNnet=newNN();

net.XY();

intkk=100,Tk=30,aa=5,In=4;

StreamReaderT_file=newStreamReader("test.txt");//读取训练文件的名字

for(inti=1;i<=kk;i++)

{

stringinSample=T_file.ReadLine();

if(inSample!

=null)

{

string[]str=System.Text.RegularExpressions.Regex.Split(inSample,@"['']+");

for(intj=1;j<=aa;j++)

{

doubletemp=double.Parse(str[j-1]);

if(j<=In)

net.Set_XExamValue(i,j,temp);

else

net.Set_YExamValue(i,j-In,temp);

}

}

}

net.TXY();

StreamReaderTT_file=newStreamReader("ce.txt");//读取测试文件的名字

for(inti=1;i<=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1