Home | Develop | Download | Contact
example_load_training_save_test.c
1 /*
2  * example_load_training_save_test.c
3  *
4  * Copyright 2011 Fernando Pujaico Rivera <fernando.pujaico.rivera@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  */
22 
32 // ./test/example_load_training_save_test ../test/data.mlayer
33 #include <stdlib.h>
34 #include <math.h>
35 
36 #include <pds/pdsra.h>
37 #include <pds/pdsnn.h>
38 
39 #include "octplot.h"
40 
41 int main(int argc, char** argv)
42 {
43  PdsNeuronML *MLayer=NULL;
44 
45  PdsNnNatural i,id=0,itera,iterb;
46  PdsNnNatural Ntraining=100;
47  PdsNnNatural Ntests=4;
48 
49  PdsNnNatural Nin;
50  PdsNnNatural Nout;
51 
52  if(argc==1) return EXIT_FAILURE;
53 
54  /******************** Cargando la red neuronal ********************/
55 
56  MLayer=pds_neuronml_new_load_data(argv[1]);
57  if(MLayer==NULL) return EXIT_FAILURE;
59 
62 
63  // Creo el vector de entrada X.
64  PdsVector *X=pds_vector_new(Nin);
65  // Creo el vector de entrada Y.
66  PdsVector *Y=pds_vector_new(Nout);
67 
68  /******************** Treinando la red neuronal ********************/
69 
70  for(i=0;id<Ntraining;i++)
71  {
72  printf("\nEntrenando %d: id %d\n",i,id);
73 
74  // Entrenando de forma negativa.
76  pds_generate_data_output_negative(Y); // Loading randomly a negative data vectors {X,Y}
77 
78  pds_neuronml_training(MLayer,X,Y);
79  itera=pds_neuronml_training_results_printf(MLayer,"-1");
80 
81  // Entrenando de forma positiva.
82  pds_generate_data_input_func2pi(X,sin,6,0.05);
83  pds_generate_data_output_positive(Y); // Loading randomly a positive data vectors {X,Y}
84 
85  pds_neuronml_training(MLayer,X,Y);
86  iterb=pds_neuronml_training_results_printf(MLayer,"+1");
87 
88  if( (itera==0)&&(iterb==0) ) id++;
89  else id=0;
90  }
91 
92  /******************** Salvando la red neuronal ********************/
93 
94  pds_neuronml_save_data(MLayer,argv[1]);
95  printf("\n\n");
96 
97  /******************** Testando la red neuronal ********************/
98 
99  char filename[128];
100 
101  // Testando de forma negativa.
102  for(i=0;i<Ntests;i++)
103  {
105  pds_neuronml_iterate(MLayer,X,Y);
107 
108  sprintf(filename,"xbad%d.png",i);
109  function_octplot_vector_in_png(X,"n","X[n]","octfilebad.m",filename);
110  }
111 
112  printf("\n");
113 
114  // Testando de forma positiva.
115  for(i=0;i<Ntests;i++)
116  {
117  pds_generate_data_input_func2pi(X,sin,6,0.05);
118  pds_neuronml_iterate(MLayer,X,Y);
120 
121  sprintf(filename,"xgood%d.png",i);
122  function_octplot_vector_in_png(X,"n","X[n]","octfilegood.m",filename);
123  }
124 
125  /******************************************************************/
126 
127  pds_neuronml_free(MLayer);
128  pds_vector_free(X);
129  pds_vector_free(Y);
130 
131  return EXIT_SUCCESS;
132 }
133 
134 
135 
136 
137 
PdsNnBool pds_neuronml_iterate_results_printf(const PdsNeuronML *MLayer, const char *Type)
Muestra los resultados de la iteración de la red neuronal multicapa NeuronML.
La estructura tipo PdsNeuronML . Esta estructura genera una red neuronal multi capa. Para usar incluir pds/pdsnn.h.
Definition: pdsneuronml.h:74
void pds_neuronml_free(PdsNeuronML *NeuronML)
Libera una neurona de tipo puntero PdsNeuronML.
int pds_generate_data_input_rand(PdsVector *X, PdsNnReal A)
int pds_generate_data_output_negative(PdsVector *Y)
Genera un vector con -1 en todos los elementos del vector Y.
unsigned int PdsNnNatural
Definition: pdsnnglobal.h:62
int pds_neuronml_iterate(PdsNeuronML *NeuronML, const PdsVector *Input, PdsVector *Output)
Itera la red neuronal multicapa NeuronML. .
int pds_neuronml_get_number_of_output_neurons(PdsNeuronML *NeuronML, PdsNnNatural *Number)
Retorna o numero de neuronas de salida.
int pds_generate_data_output_positive(PdsVector *Y)
Genera un vector con +1 en todos los elementos del vector Y.
int pds_neuronml_head_printf(const PdsNeuronML *NeuronML)
Mostra em pantalla los datos de cabecera de la red neuronal multicapa.
int pds_neuronml_get_number_of_input_neurons(PdsNeuronML *NeuronML, PdsNnNatural *Number)
Retorna o numero de neuronas de entrada.
int pds_neuronml_save_data(const PdsNeuronML *NeuronML, const char *mlayer_filename)
Salva una estructura de tipo PdsNeuronML en un archivo de texto.
PdsNeuronML * pds_neuronml_new_load_data(const char *mlayer_filename)
Crea una estructura de tipo PdsNeuronML e inicia todos los elementos. desde un archivo de texto...
int pds_neuronml_training(PdsNeuronML *NeuronML, const PdsVector *Input, PdsVector *Output)
Entrena la red neuronal multicapa NeuronML. Usa el valor de Output como entrenamiento, para finalizar carga el nuevo valor de salida en Output.
int pds_generate_data_input_func2pi(PdsVector *X, double(*func)(double), PdsNnReal C, PdsNnReal OffsetError)
Genera un vector con C ciclos de la función func() con un error de offset de valor OffsetError...
PdsNnNatural pds_neuronml_training_results_printf(PdsNeuronML *MLayer, const char *Type)
Muestra los resultados del entrenamiento de la red neuronal multicapa NeuronML.

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed