#include"stdio.h" #include"conio.h" #include"dos.h" #include"math.h" //VersionPMV1.0 //ENTRENAMIENTOPERCEPTRONMULTICAPA:(Parala //ENTRENAMIENTOPERCEP TRONMULTICAPA:(ParalafuncionlogicaXOR funcionlogicaXOR ) //2neuronasdeentradas //1capaocultacon2neuronas //1neuronadesalida voidmain() { //*************************************INICIOPASO1(Inicializaciónde //*************************************INICIO PASO1(Inicializacióndevariables) variables) **************************************// //ValoresinicialesALEATORIOSpesosyumbrales //Pesosdelacapadeentradaalacapaoculta //Pesosdelacapaocultaalacapadesalida //Umbralesdelacapaoculta(u12,u22)ycapadesalida(u3) /////////////////////////////////////////// /////////////////// ///////////////////////////////////////////// ///////////////////// floatw11=.1,w12=.3,w21=.1,w22=.5; floatv1=.5,v2=.2; floatu21=.2,u22=.5,u3=.4; /////////////////////////////////////////// /////////////////// ////////////////////////////////////////////// ////////////////////// floatdelta3=0,delta21=0,delta22=0;//D floatdelta3=0,delt a21=0,delta22=0;//Deltasparalamodificacio eltasparalamodificaciondelos ndelos pesosyumbrales floatalfa=0;//A floatalfa=0; //Alfa=Razondeaprendizaje lfa=Razondeaprendizaje
floatx1=0,x2=0;//Inicializaciónde floatx1=0,x2=0; //Inicializacióndevariables variables delPatrondeentradaalared floata11=0,a12=0; floata11=0,a12=0; //Activacionesdel //Activacionesdelasneuron asneuron asdelacapadeentrada(c=1) floata21=0,a22=0; floata21=0,a22=0; //Activacionesdel //Activacionesdelasneuron asneuron asdelacapaoculta(c=2) floata31=0; floata31=0; //Activacionesdel //Activacionesdelasneuron asneuron asdelacapadesalida(c=3) floaty=0; floaty=0; //Salidadelared //Salidadelared floats=0; floats=0; //Salidadeseada //Salidadeseada floatsum=0;//Variableusada floatsum=0; //Variableusadaparacalcularpartedel paracalcularpartedelerrrorto errrorto tal floate=0;//Errorcuadraticoparaelpatronn floatE=0;//Errortotalcometidoporlared intn=1;//n= intn=1; //n=#depatrondeentrada #depatrondeentrada floatN=0;//N= floatN=0; //N=Cantidadtotaldepatron Cantidadtotaldepatrones(Nmay es(Nmay uscula)
intm=1;//m=#deciclodeaprendizaje(unsign intm=1;//m=#deci clodeaprendizaje(unsignedparav edparav aloresmayoresde32000) intM=0;//M=Cantida intM=0; //M=Cantidadtotaldeciclosdeapre dtotaldeciclosdeaprendizaje(u ndizaje(u nsignedparavaloresmayoresde32000) //FININICIALIZACIONDEVARIABLES(FINPASO1) //************************************INICIOPASO2(Calculodelasali //************************************INICIOP ASO2(Calculodelasalidadela dadela red)**********************************// FILE*stream;// // clrscr();// // stream=fopen("c:prueba1","w"); stream=fopen("c: prueba1","w");//segeneraela //segeneraelarchivo"p rchivo"p rueba1"seguardaenC:TC/bin/prueba1 fprintf(stream,"VALORESINICIALESDELOSPESOSYUMBRALES\n\n"); fprintf(stream,"VALORESINICIALESDELOSPES OSYUMBRALES\n\n");//Seguar //Seguar dael"titulo"en"prueba1" fprintf(stream,"w11=%.6f\n",w11);// fprintf(stream,"w12=%.6f\n",w12);// fprintf(stream,"w21=%.6f\n",w21);// fprintf(stream,"w22=%.6f\n",w22);// fprintf(stream,"v1=%.6f\n",v1);//S fprintf(stream,"v1= %.6f\n",v1);//Seguardaelvalorytexto eguardaelvalorytextodelosp delosp esosyumbralesiniciales fprintf(stream,"v2=%.6f\n",v2);//( fprintf(stream,"v2= %.6f\n",v2);//(6decimales)en"prueba1" 6decimales)en"prueba1" fprintf(stream,"u21=%.6f\n",u21);// fprintf(stream,"u22=%.6f\n",u22);// fprintf(stream,"u3=%.6f\n\n",u3);//
printf("\nDameel#totaldepatrones(teclea4)N=\n"); printf("\nDameel#totaldepatrones(te clea4)N=\n");/ / / scanf("%f",&N); scanf("%f",&N); // //Cantidad Cantidad totaldepatrones printf("\n\nCantidadtotaldepatrones% printf("\n\nCant idadtotaldepatrones%f\n",N);// f\n",N);// fprintf(stream,"\n*****************************************\n"); fprintf(stream,"\n********************** *******************\n");//Seguar //Seguar daunalineadeasteriscosen"prueba1" fprintf(stream,"Cantidadtotaldepatron fprintf(stream," CantidadtotaldepatronesN=%f\n",N); esN=%f\n",N);//Seguar //Seguar daelvalorytextodeNenarchivo"prueba1" fprintf(stream,"************************ fprintf(stream," *****************************************\n"); *****************\n");//Seguar //Seguar daunalineadeasteriscosen"prueba1" printf("\nDameel#totaldeciclosM=\n");// printf("\nDameel#totaldeciclosM=\n ");// scanf("%i",&M); scanf("%i",&M); // //Cantidad Cantidad totaldeciclos printf("\n\nCantidadtotaldeciclos%i printf("\n\nCant idadtotaldeciclos%i\n",M);// \n",M);// fprintf(stream,"\n*****************************************\n"); fprintf(stream,"\n********************** *******************\n");//Seguar //Seguar daunalineadeasteriscosen"prueba1" fprintf(stream,"Cantidadtotaldeciclos fprintf(stream," CantidadtotaldeciclosM=%i\n",M); M=%i\n",M);//Seguar //Seguar daelvalorytextodeMenarchivo"prueba1" fprintf(stream,"************************ fprintf(stream," *****************************************\n"); *****************\n");//Seguar //Seguar daunalineadeasteriscosen"prueba1"
printf("\nDamelarazondeaprendizajealfa(Positivaentre0y1) printf("\nDamelarazondeaprendizajea lfa(Positivaentre0y1)=\n"); =\n"); // scanf("%f",&alfa); scanf("%f",&alfa ); //Razondeaprendizaje printf("\n\nAlfa=%f\n",alfa); printf("\n\nAlfa =%f\n",alfa); // fprintf(stream,"\n*****************************************\n"); fprintf(stream,"\n********************** *******************\n");//Segu //Segu ardaunalineadeasteriscosen"prueba1" fprintf(stream,"Razondeaprendizajealf fprintf(stream," Razondeaprendizajealfa=%f\n",alfa); a=%f\n",alfa);//Segu //Segu ardaelvalorytextodealfaenarchivo"prueba1" fprintf(stream,"************************ fprintf(stream," *****************************************\n"); *****************\n");//Segu //Segu ardaunalineadeasteriscosen"prueba1"
printf("\n\nVALORESINICIALESDELOSPESOSYUMBRALES\n");// printf("\n\nVALORESINICIALESDELOSPES OSYUMBRALES\n");// printf("ValorW11=%.6f\n",w11); printf("ValorW1 1=%.6f\n",w11);// // printf("ValorW12=%.6f\n",w12); printf("ValorW1 2=%.6f\n",w12);// // printf("ValorW21=%.6f\n",w21); printf("ValorW2 1=%.6f\n",w21);// // printf("ValorW22=%.6f\n",w22); printf("ValorW2 2=%.6f\n",w22);//S //Sepresent epresent anenpantallalosvaloresiniciales printf("Valorv1=%.6f\n",v1); printf("Valorv1 =%.6f\n",v1);//d //delospes elospes osyumbralesdelared printf("Valorv2=%.6f\n",v2); printf("Valorv2 =%.6f\n",v2);// // printf("Valoru12=%.6f\n",u21); printf("Valoru1 2=%.6f\n",u21);// // printf("Valoru22=%.6f\n",u22); printf("Valoru2 2=%.6f\n",u22);// // printf("Valoru3=%.6f\n",u3); printf("Valoru3 =%.6f\n",u3);// // for(m=1;m<=M;m++){//CicloFOR1 fprintf(stream,"############################################## fprintf(stream,"##################### ################################## ######### ############\n");//Lineade#en"prueba1" printf("\n#deciclom=%i\n",m); fprintf(stream,"#deciclom=%i\n\n\n",m); sum=0;//Seresetealavariablesumparacalcularel sum=0;//Seresetealavari ablesumparacalcularelerrorto errorto talparacadaciclo for(n=1;n<=N;n++){//CicloFor2 switch(n) { case1:// x1=0;// x2=0;// s=0;// break;// // case2:// x1=0;// x2=1;//
s=1;//Seintroducenlospatrones(x1, s=1;//Sein troducenlospatrones(x1,x2,s)uno x2,s)uno porunoalincrementarsendelciclofor2 break;// // case3:// x1=1;// x2=0;// s=1;// break;// // case4:// x1=1;// x2=1;// s=0;// break;// } /////////////////////////////////////////////////// a11=x1;// a11=x1; // a12=x2; a12=x2; // //Calculod Calculod elasactivacionesdelasneuronasde printf("\n\nActivaciondelacapadeentra printf("\n\nActiva ciondelacapadeentradaa11=%f\n",a11);// daa11=%f\n",a11);//lacapad lacapad eentrada(c=1) printf("Activaciondelacapadeentradaa printf("Activacion delacapadeentradaa12=%f\n",a12);// 12=%f\n",a12);// a21=1/(1+exp(-(w11*a11+w21*a12+u21)));// a21=1/(1+exp(-(w11*a11+w21*a12+u21))); // a22=1/(1+exp(-(w12*a11+w22*a12+u22))); a22=1/(1+exp(-(w12 *a11+w22*a12+u22)));// //Calculod Calculod elasactivacionesdelasneuronasde printf("\n\nActivaciondelacapaocultaa printf("\n\nActiva ciondelacapaocultaa21=%f\n",a21);// 21=%f\n",a21);//lacapao lacapao culta(c=2) printf("Activaciondelacapaocultaa22= printf("Activacion delacapaocultaa22=%f\n",a22);// %f\n",a22);// a31=1/(1+exp(-(v1*a21+v2*a22+u3))); a31=1/(1+exp(-(v1*a21+v2*a22+u3))); //Calcul //Calcul odelaactivaciondelaneuronade printf("\n\nActivaciondelacapadesalid printf("\n\nActiva ciondelacapadesalidaa31=%f\n",a31); aa31=%f\n",a31);//lacap //lacap adesalida(c=3) y=a31; y=a31; //Salida //Salida delared printf("\n\nSalidadelaredy=%f\n",y); printf("\n\nSalida delaredy=%f\n",y); // //
fprintf(stream,"PATRONn=%i\n\n",n);//Seguardaelvalory fprintf(stream,"PATRONn=%i\n\n",n); //Seguardaelvalorytextode textode n(entero)enarchivo"prueba1" fprintf(stream,"valordex1=%.6f\n",x1); fprintf(stream,"valo rdex1=%.6f\n",x1);//Seguardaelvalory //Seguardaelvalorytextode textode x1(6decimales)en"prueba1" fprintf(stream,"valordex2=%.6f\n",x2); fprintf(stream,"valo rdex2=%.6f\n",x2);//Seguardaelvalory //Seguardaelvalorytextode textode x2(6decimales)en"prueba1" fprintf(stream,"valordes=%.6f\n",s); fprintf(stream,"valo rdes=%.6f\n",s);//Seguardaelvalory //Seguardaelvalorytextode textode lasalidadeseadasen"prueba1" fprintf(stream,"valordea11=%.6f\n",a11); fprintf(stream,"valo rdea11=%.6f\n",a11);//Seguardaelvalory //Seguardaelvalorytextode textode a11(6decimales)en"prueba1" fprintf(stream,"valordea12=%.6f\n",a12); fprintf(stream,"valo rdea12=%.6f\n",a12);//Seguardaelvalory //Seguardaelvalorytextode textode a12(6decimales)en"prueba1" fprintf(stream,"valordea21=%.6f\n",a21); fprintf(stream,"valo rdea21=%.6f\n",a21);//Seguardaelvalory //Seguardaelvalorytextode textode a21(6decimales)en"prueba1" fprintf(stream,"valordea22=%.6f\n",a22); fprintf(stream,"valo rdea22=%.6f\n",a22);//Seguardaelvalory //Seguardaelvalorytextode textode
a22(6decimales)en"prueba1" fprintf(stream,"valordea31=%.6f\n",a31); fprintf(stream,"valo rdea31=%.6f\n",a31);//Seguardaelvalory //Seguardaelvalorytextode textode a31(6decimales)en"prueba1" fprintf(stream,"valordey=%.6f\n\n\n",y); fprintf(stream,"valo rdey=%.6f\n\n\n",y);//Seguardaelvalo //Seguardaelvalorytexto rytexto dey(6decimales)en"prueba1" //FINPASO2 //FINPASO2 //*****************************INICIOPASO3(Calculodelerrorcuadrat //*****************************INICIOPASO3( Calculodelerrorcuadraticodela icodela redparaelpatronn)****************// e=((s-y)*(s-y))/2; e=((s-y)*(s-y))/2; //Secalcu //Secalculaelerr laelerr orcuadratico printf("\n\nErrorcuadratico%f\n",e); printf("\n\nErrorcu adratico%f\n",e);//Seprese //Sepresentaeen ntaeen pantalla fprintf(stream,"Errorcuadraticoe=%.6f\n\ fprintf(stream,"Erro rcuadraticoe=%.6f\n\n\n",e);//Seguard n\n",e);//Seguardaeen"P aeen"P rueba1" sum=sum+e;//Guardando sum=sum+e; //Guardandolasumad lasumad elerroracumulado fprintf(stream,"sum=%.6f\n\n\n",sum); fprintf(stream,"sum= %.6f\n\n\n",sum);//Seguardasumen"Pru //Seguardasumen"Prueba1" eba1" //**********************************INICIOPASO4(Modificarpesosyum //**********************************INICIOPAS O4(Modificarpesosyumbralesde bralesde lared)******************************// //CalculodelosDeltas delta3=-(s-y)*y*(1-y);//Delta3 delta21=a21*(1-a21)*delta3*v1;//Delta21 delta22=a22*(1-a22)*delta3*v2;//Delta22
v1=v1-(alfa*delta3*a21);// v2=v2-(alfa*delta3*a22);// u3=u3-(alfa*delta3);// // w11=w11-(alfa*delta21*a11); w11=w11-(alfa*delt a21*a11);//Calculodelosnu //Calculodelosnuevospeso evospeso syumbrales w12=w12-(alfa*delta22*a11);// w21=w21-(alfa*delta21*a12);// w22=w22-(alfa*delta22*a12);// u21=u21-(alfa*delta21);// u22=u22-(alfa*delta22);//
fprintf(stream,"VALORESDELOSPESOSYUMBRALESMODIFICADOS\n"); fprintf(stream,"VALORESDELOSPESOSYUMBRA LESMODIFICADOS\n");//Seguar //Seguar dael"titulo"en"prueba1" fprintf(stream,"Delta3=%.6f\n",delta3);// fprintf(stream,"Delta21=%.6f\n",delta21); fprintf(stream,"Delt a21=%.6f\n",delta21);//Seguardanen"pr //Seguardanen"prueba1"V ueba1"V aloresdelosdeltas fprintf(stream,"Delta22=%.6f\n",delta22);// fprintf(stream,"w11=%.6f\n",w11);// fprintf(stream,"w12=%.6f\n",w12);// fprintf(stream,"w21=%.6f\n",w21);// fprintf(stream,"w22=%.6f\n",w22);// fprintf(stream,"v1=%.6f\n",v1);//S fprintf(stream,"v1= %.6f\n",v1);//Seguardaelvalorytexto eguardaelvalorytextodelosp delosp esosyumbralesMODIFICADOS
fprintf(stream,"v2=%.6f\n",v2);//(6decimales)en"prueba1" fprintf(stream,"v2=%.6f\n",v2);//( 6decimales)en"prueba1" fprintf(stream,"u21=%.6f\n",u21);// fprintf(stream,"u22=%.6f\n",u22);// fprintf(stream,"u3=%.6f\n",u3);// fprintf(stream,"\n************************** fprintf(stream,"\n** ***************************************\n"); ***************\n");//Segua //Segua rdaunalineadeasteriscosen"prueba1" }//Finciclofor2 //*****************************************PAS //******************** *********************PASO5(Eselanteriorciclo O5(Eselanteriorciclo"for2") "for2") ****************************************//
//*********************************PASO6(CalculodelErrortotalcome //*********************************PASO6(Cal culodelErrortotalcometidopor tidopor lared)*******************************// fprintf(stream,"sum=%.6f\n\n\n",sum);//Seguardasumen"Pr fprintf(stream,"sum=%.6f\n\n\n",sum); //Seguardasumen"Prueba1" ueba1" E=(1/N)*(sum); E=(1/N)*(sum); //Se //Secalcula calcula elerrortotaldelared printf("\n\nErrortotaldelared%f\n",E) printf("\n\nErrort otaldelared%f\n",E);//Se ;//Sepresenta presenta eenpantalla fprintf(stream,"ErrortotalE=%.6f\n\n\n" fprintf(stream,"Err ortotalE=%.6f\n\n\n",E);//Se ,E);//Seguardae guardae en"Prueba1" }//Finciclofor1 //*****************************************PASO7(Eselanteriorciclo //*****************************************PAS O7(Eselanteriorciclo"for1") "for1") ****************************************// getch(); }