Home | Develop | Download | Contact
pdsneuron.h
1 /*
2  * pdsneuron.h
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 
33 #ifndef __PDSNEURON_H__
34 #define __PDSNEURON_H__
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 #include <stdio.h>
41 #include <stdlib.h>
42 #include <pds/pdsninput.h>
43 #include <pds/pdsnivector.h>
44 #include <pds/pdssnglobal.h>
45 
46 #ifndef TRUE
47  #define TRUE 1
48 #endif
49 
50 #ifndef FALSE
51  #define FALSE 0
52 #endif
53 
77 typedef struct
78 {
81 
84 
87 
90 
93 
95  double (*func)(double);
96 
98  double (*dfunc)(double);
99 
101  PdsSnReal Y[2];
102 }PdsNeuron;
103 
104 
105 
106 
129 
130 
142 PdsNeuron *pds_neuron_new_with_params(PdsSnNatural Nel,PdsSnReal W,PdsSnReal U,double (*func)(double),double (*dfunc)(double));
143 
145 
163 
164 
165 
166 
177 
178 
179 
189 
190 
192 
207 
208 
217 int pds_neuron_get_input(const PdsNeuron *Neuron,PdsSnNatural id,PdsSnReal *m);
218 
219 
221 
238 int pds_neuron_get_weight(const PdsNeuron *Neuron, PdsSnNatural x, PdsSnReal *m);
239 
240 
252 
261 
262 
273 
284 
291 int pds_neuron_printf_weight(const PdsNeuron *Neuron);
292 
293 
300 int pds_neuron_printf_u_and_weight(const PdsNeuron *Neuron);
301 
309 int pds_neuron_get_number_of_inputs(const PdsNeuron *Neuron,PdsSnNatural *Nelements);
310 
312 
327 int pds_neuron_get_u(const PdsNeuron *Neuron,PdsSnReal *U);
328 
329 
337 int pds_neuron_set_u(PdsNeuron *Neuron,PdsSnReal U);
338 
339 
340 
342 
360 
361 
372 
373 
385 int pds_neuron_iterate(PdsNeuron *Neuron);
386 
387 
389 
402 const PdsSnReal *pds_neuron_get_axon(const PdsNeuron *Neuron);
403 
404 
412 int pds_neuron_get_output(const PdsNeuron *Neuron,PdsSnReal *m);
413 
414 
416 
417 
436 
437 
456 
457 
458 
459 
461 
481 int pds_neuron_update_weight(PdsNeuron *Neuron, PdsSnReal Alpha);
482 
483 
499 
500 
509 int pds_neuron_get_xtx(PdsNeuron *Neuron,PdsSnReal *XtX);
510 
511 
527 
529 
544 int pds_neuron_fprintf(const PdsNeuron *Neuron, FILE *fd);
545 
546 
555 int pds_neuron_fscanf(PdsNeuron *Neuron, FILE *fd);
556 
557 
565 int pds_neuron_fwrite(const PdsNeuron *Neuron, FILE *fd);
566 
567 
575 int pds_neuron_fread(PdsNeuron *Neuron, FILE *fd);
576 
578 
591 void pds_neuron_free(PdsNeuron *Neuron);
592 
593 
600 void pds_neuron_destroy(PdsNeuron **Neuron);
601 
603 
608 #ifdef __cplusplus
609 }
610 #endif
611 
612 #endif
613 
614 
int pds_neuron_backpropagate_error(PdsNeuron *Neuron, PdsSnReal Alpha)
Propaga el error de la salida de la neurona hacia las neuronas conectadas a sus entradas. .
int pds_neuron_connect_input_with_nivector(PdsNeuron *Neuron, const PdsNIVector *NIVector)
Conecta el valor de salida Y de las neuronas NIVector con la entrada X[id] de la neurona Neuron...
int pds_neuron_get_xtx(PdsNeuron *Neuron, PdsSnReal *XtX)
Devuelve la suma cuadrática de los valores de entrada de la neurona. .
int pds_neuron_init_weight_rand(PdsNeuron *Neuron, PdsSnReal min, PdsSnReal max)
Inicia el vector de pesos de la Neurona con valores aleatorios uniformemente distribuido entre min y ...
PdsSnReal ** X
Definition: pdsneuron.h:80
PdsSnReal * W
Definition: pdsneuron.h:83
int pds_neuron_set_weight(PdsNeuron *Neuron, PdsSnNatural x, PdsSnReal m)
Escribe el valor m en la posición (x) del vector de pesos de la Neurona. (x) inicia con (0)...
int pds_neuron_get_number_of_inputs(const PdsNeuron *Neuron, PdsSnNatural *Nelements)
Devuelve el número de entradas de la Neurona.
int pds_neuron_fscanf(PdsNeuron *Neuron, FILE *fd)
Lee de un archivo de texto los pesos {W[i]} y {U}. Ocupando una linea cada uno, y separando los eleme...
int pds_neuron_update_u_and_weight(PdsNeuron *Neuron, PdsSnReal Alpha)
Actualiza los pesos W[i] de la neurona (using the Delta rule). "e" es el error de la salida de la ...
int pds_neuron_init_weight(PdsNeuron *Neuron, PdsSnReal m)
Inicia el vector de pesos de la Neurona.
La estructura tipo PdsNInput . Esta estructura genera una neurona de entrada.
Definition: pdsninput.h:69
const PdsSnReal * pds_neuron_get_dendrite(const PdsNeuron *Neuron, PdsSnNatural id)
Devuelve la dirección de la entrada X[id] de la Neurona.
int pds_neuron_printf_u_and_weight(const PdsNeuron *Neuron)
Imprime los valores de U y los pesos en la Neurona.
int pds_neuron_evaluate_theta(PdsNeuron *Neuron)
Evalua la variable theta de la Neurona Neuron. .
int pds_neuron_init_u_and_weight_rand(PdsNeuron *Neuron, PdsSnReal min, PdsSnReal max)
Inicia el vector de pesos y U de la Neurona con valores aleatorios uniformemente distribuido entre mi...
int pds_neuron_fwrite(const PdsNeuron *Neuron, FILE *fd)
Guarda en un archivo binario los pesos W[i], el valor de U.
int pds_neuron_fprintf(const PdsNeuron *Neuron, FILE *fd)
Guarda en un archivo de texto los pesos {W[i]} y {U}. Ocupando una linea cada uno, y separando los elementos por un TAB.
int pds_neuron_printf_weight(const PdsNeuron *Neuron)
Imprime los valores de los pesos en la Neurona.
PdsSnReal Theta
Definition: pdsneuron.h:92
int pds_neuron_get_output(const PdsNeuron *Neuron, PdsSnReal *m)
Devuelve el valor de la salida Y de la Neurona.
PdsSnNatural Nel
Definition: pdsneuron.h:86
int pds_neuron_evaluate_func(PdsNeuron *Neuron)
Actualiza el valor a la salida de la Neurona Neuron. Adicionalmente (Neuron->Y[1]=0) ...
void pds_neuron_destroy(PdsNeuron **Neuron)
Libera una neurona de tipo puntero PdsNeuron, y limpia el puntero con NULL.
int pds_neuron_iterate(PdsNeuron *Neuron)
Itera la Neurona Neuron. Adicionalmente (Neuron->Y[1]=0) .
int pds_neuron_connect_input_with_ninput(PdsNeuron *Neuron, PdsSnNatural id, PdsNInput *NInput)
Conecta el valor de salida Y de la neurona de entrada NInput con la entrada X[id] de la neurona Neuro...
int pds_neuron_update_u_and_weight_normalized(PdsNeuron *Neuron, PdsSnReal Alpha)
Actualiza los pesos W[i] de la neurona (using the Delta rule). "e" es el error de la salida de la ...
int pds_neuron_get_input(const PdsNeuron *Neuron, PdsSnNatural id, PdsSnReal *m)
Devuelve el valor de la entrada X[id] de la Neurona.
int pds_neuron_connect_input(PdsNeuron *Neuron, PdsSnNatural id, PdsNeuron *NeuronX)
Conecta el valor de salida Y de la Neurona NeuronX con la entrada X[id] de la neurona Neuron...
int pds_neuron_get_weight(const PdsNeuron *Neuron, PdsSnNatural x, PdsSnReal *m)
Devuelve el valor en la posición (x) del vector de pesos de la Neurona. (x) inicia con (0)...
int pds_neuron_evaluate_diff_error(PdsNeuron *Neuron, PdsSnReal y)
Compara el valor de salida de la neurona, con "y", luego lo carga en la variable Y[1] de la neurona ...
La estructura tipo PdsNIVector . Esta estructura genera un arreglo de neuronas. Para usar incluir pds...
Definition: pdsnivector.h:80
La estructura tipo PdsNeuron . Esta estructura genera una neurona de Nel entradas.
Definition: pdsneuron.h:77
float PdsSnReal
Definition: pdssnglobal.h:50
void pds_neuron_free(PdsNeuron *Neuron)
Libera una neurona de tipo puntero PdsNeuron.
const PdsSnReal * pds_neuron_get_axon(const PdsNeuron *Neuron)
Devuelve la dirección del axon (salida) de la Neurona.
int pds_neuron_get_u(const PdsNeuron *Neuron, PdsSnReal *U)
Devuelve el valor de U de la Neurona.
int pds_neuron_fread(PdsNeuron *Neuron, FILE *fd)
Lee de un archivo binario los pesos W[i], el valor de U.
int pds_neuron_update_weight(PdsNeuron *Neuron, PdsSnReal Alpha)
Actualiza los pesos W[i] de la neurona (using the Delta rule). "e" es el error de la salida de la n...
int pds_neuron_set_u(PdsNeuron *Neuron, PdsSnReal U)
Coloca el valor de U de la Neurona.
PdsNeuron * pds_neuron_new_with_params(PdsSnNatural Nel, PdsSnReal W, PdsSnReal U, double(*func)(double), double(*dfunc)(double))
Crea una neurona de tipo PdsNeuron de Nel entradas.
unsigned int PdsSnNatural
Definition: pdssnglobal.h:60
PdsNeuron * pds_neuron_new(PdsSnNatural Nel)
Crea una neurona de tipo PdsNeuron de Nel entradas.
PdsSnReal U
Definition: pdsneuron.h:89

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed