[PD-cvs] externals/ann/src ann_mlp.c, 1.5, 1.6 ann_td.c, 1.5, 1.6 makefile.msvc, 1.3, 1.4

dmorelli morellid at users.sourceforge.net
Fri May 20 22:53:02 CEST 2005


Update of /cvsroot/pure-data/externals/ann/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28233

Modified Files:
	ann_mlp.c ann_td.c makefile.msvc 
Log Message:
mlp and td ready to be compiled as a single file (library) ann.c needs to be changed: we should add #include ann_*.c

Index: ann_mlp.c
===================================================================
RCS file: /cvsroot/pure-data/externals/ann/src/ann_mlp.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** ann_mlp.c	20 May 2005 11:06:37 -0000	1.5
--- ann_mlp.c	20 May 2005 20:53:00 -0000	1.6
***************
*** 11,16 ****
  #include "fann.h"
  
  
- #define VERSION "0.03"
  #ifndef __DATE__ 
  #define __DATE__ ""
--- 11,18 ----
  #include "fann.h"
  
+ #ifndef VERSION 
+ #define VERSION "0.2"
+ #endif
  
  #ifndef __DATE__ 
  #define __DATE__ ""
***************
*** 37,41 ****
  } t_ann_mlp;
  
! static void help(t_ann_mlp *x)
  {
  	post("");
--- 39,43 ----
  } t_ann_mlp;
  
! static void ann_mlp_help(t_ann_mlp *x)
  {
  	post("");
***************
*** 49,53 ****
  }
  
! static void createFann(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int num_input = 2;
--- 51,55 ----
  }
  
! static void ann_mlp_createFann(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int num_input = 2;
***************
*** 78,82 ****
  	if (num_input>MAXINPUT)
  	{
! 		error("too many inputs, maximum allowed is %d",MAXINPUT);
  		return;
  	}
--- 80,84 ----
  	if (num_input>MAXINPUT)
  	{
! 		error("too many inputs, maximum allowed is MAXINPUT");
  		return;
  	}
***************
*** 84,88 ****
  	if (num_output>MAXOUTPUT)
  	{
! 		error("too many outputs, maximum allowed is %d", MAXOUTPUT);
  		return;
  	}
--- 86,90 ----
  	if (num_output>MAXOUTPUT)
  	{
! 		error("too many outputs, maximum allowed is MAXOUTPUT");
  		return;
  	}
***************
*** 109,113 ****
  }
  
! static void print_status(t_ann_mlp *x)
  {
  		if (x->mode == TRAIN)
--- 111,115 ----
  }
  
! static void ann_mlp_print_status(t_ann_mlp *x)
  {
  		if (x->mode == TRAIN)
***************
*** 117,121 ****
  }
  
! static void train(t_ann_mlp *x)
  {
  	x->mode=TRAIN;
--- 119,123 ----
  }
  
! static void ann_mlp_train(t_ann_mlp *x)
  {
  	x->mode=TRAIN;
***************
*** 126,139 ****
  	}
  	fann_reset_MSE(x->ann);
! 	print_status(x);
  }
  
! static void run(t_ann_mlp *x)
  {
  	x->mode=RUN;
! 	print_status(x);
  }
  
! static void set_mode(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc<1)
--- 128,141 ----
  	}
  	fann_reset_MSE(x->ann);
! 	ann_mlp_print_status(x);
  }
  
! static void ann_mlp_run(t_ann_mlp *x)
  {
  	x->mode=RUN;
! 	ann_mlp_print_status(x);
  }
  
! static void ann_mlp_set_mode(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc<1)
***************
*** 144,148 ****
  	{	
  		x->mode = atom_getint(argv++);
! 		print_status(x);
  	}
  }
--- 146,150 ----
  	{	
  		x->mode = atom_getint(argv++);
! 		ann_mlp_print_status(x);
  	}
  }
***************
*** 150,154 ****
  
  
! static void train_on_file(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->ann == 0)
--- 152,156 ----
  
  
! static void ann_mlp_train_on_file(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->ann == 0)
***************
*** 172,179 ****
  		x->iterations_between_reports, x->desired_error);
  	
! 	post("nn: finished training on file %s", x->filenametrain->s_name);
  }
  
! static void set_desired_error(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	float desired_error = (float)0.001;
--- 174,181 ----
  		x->iterations_between_reports, x->desired_error);
  	
! 	post("ann_mlp: finished training on file %s", x->filenametrain->s_name);
  }
  
! static void ann_mlp_set_desired_error(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	float desired_error = (float)0.001;
***************
*** 189,193 ****
  }
  
! static void set_max_iterations(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int max_iterations = 500000;
--- 191,195 ----
  }
  
! static void ann_mlp_set_max_iterations(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int max_iterations = 500000;
***************
*** 203,207 ****
  }
  
! static void set_iterations_between_reports(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	
--- 205,209 ----
  }
  
! static void ann_mlp_set_iterations_between_reports(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	
***************
*** 222,226 ****
  // run the ann using floats in list passed to the inlet as input values
  // and send result to outlet as list of float
! static void run_the_net(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
--- 224,228 ----
  // run the ann using floats in list passed to the inlet as input values
  // and send result to outlet as list of float
! static void ann_mlp_run_the_net(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
***************
*** 276,280 ****
  }
  
! static void train_on_the_fly(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
--- 278,282 ----
  }
  
! static void ann_mlp_train_on_the_fly(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
***************
*** 335,349 ****
  }
  
! static void manage_list(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->mode)
! 		run_the_net(x, sl, argc, argv);
  	else
  	{
! 		train_on_the_fly(x, sl, argc, argv);
  	}
  }
  
! static void set_filename(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
--- 337,351 ----
  }
  
! static void ann_mlp_manage_list(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->mode)
! 		ann_mlp_run_the_net(x, sl, argc, argv);
  	else
  	{
! 		ann_mlp_train_on_the_fly(x, sl, argc, argv);
  	}
  }
  
! static void ann_mlp_set_filename(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
***************
*** 356,360 ****
  }
  
! static void load_ann_from_file(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
--- 358,362 ----
  }
  
! static void ann_mlp_load_ann_from_file(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
***************
*** 368,372 ****
  }
  
! static void save_ann_to_file(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
--- 370,374 ----
  }
  
! static void ann_mlp_save_ann_to_file(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
***************
*** 384,388 ****
  
  // functions for training algo:
! static void set_FANN_TRAIN_INCREMENTAL(t_ann_mlp *x)
  {
  	if (x->ann == 0)
--- 386,390 ----
  
  // functions for training algo:
! static void ann_mlp_set_FANN_TRAIN_INCREMENTAL(t_ann_mlp *x)
  {
  	if (x->ann == 0)
***************
*** 395,399 ****
  	}
  }
! static void set_FANN_TRAIN_BATCH(t_ann_mlp *x)
  {
  	if (x->ann == 0)
--- 397,401 ----
  	}
  }
! static void ann_mlp_set_FANN_TRAIN_BATCH(t_ann_mlp *x)
  {
  	if (x->ann == 0)
***************
*** 406,410 ****
  	}
  }
! static void set_FANN_TRAIN_RPROP(t_ann_mlp *x)
  {
  	if (x->ann == 0)
--- 408,412 ----
  	}
  }
! static void ann_mlp_set_FANN_TRAIN_RPROP(t_ann_mlp *x)
  {
  	if (x->ann == 0)
***************
*** 417,421 ****
  	}
  }
! static void set_FANN_TRAIN_QUICKPROP(t_ann_mlp *x)
  {
  	if (x->ann == 0)
--- 419,423 ----
  	}
  }
! static void ann_mlp_set_FANN_TRAIN_QUICKPROP(t_ann_mlp *x)
  {
  	if (x->ann == 0)
***************
*** 429,433 ****
  }
  
! static void set_activation_function_output(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	t_symbol *parametro = 0;
--- 431,435 ----
  }
  
! static void ann_mlp_set_activation_function_output(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	t_symbol *parametro = 0;
***************
*** 465,489 ****
  }
  
! static void print_ann_details(t_ann_mlp *x)
  {
  	if (x->ann == 0)
  	{
! 		post("nn:ann is not initialized");
  	} else
  	{
! 		post("nn:follows a description of the current ann:");
! 		post("nn:num_input=%i", x->ann->num_input);
! 		post("nn:num_output=%i", x->ann->num_output);
! 		post("nn:learning_rate=%f", x->ann->learning_rate);
! 		post("nn:connection_rate=%f", x->ann->connection_rate);
! 		post("nn:total_neurons=%i", x->ann->total_neurons);
! 		post("nn:total_connections=%i", x->ann->total_connections);
! 		post("nn:last error=%i", x->ann->errstr);
  		if (x->filename == 0)
  		{
! 			post("nn:filename not set");
  		} else
  		{
! 			post("nn:filename=%s", x->filename->s_name);
  		}
  	}
--- 467,491 ----
  }
  
! static void ann_mlp_print_ann_details(t_ann_mlp *x)
  {
  	if (x->ann == 0)
  	{
! 		post("ann_mlp:ann is not initialized");
  	} else
  	{
! 		post("follows a description of the current ann:");
! 		post("num_input=%i", x->ann->num_input);
! 		post("num_output=%i", x->ann->num_output);
! 		post("learning_rate=%f", x->ann->learning_rate);
! 		post("connection_rate=%f", x->ann->connection_rate);
! 		post("total_neurons=%i", x->ann->total_neurons);
! 		post("total_connections=%i", x->ann->total_connections);
! 		post("last error=%i", x->ann->errstr);
  		if (x->filename == 0)
  		{
! 			post("ann_mlp:filename not set");
  		} else
  		{
! 			post("filename=%s", x->filename->s_name);
  		}
  	}
***************
*** 491,495 ****
  
  
! static void *nn_new(t_symbol *s, int argc, t_atom *argv)
  {
  	t_ann_mlp *x = (t_ann_mlp *)pd_new(ann_mlp_class);
--- 493,497 ----
  
  
! static void *ann_mlp_new(t_symbol *s, int argc, t_atom *argv)
  {
  	t_ann_mlp *x = (t_ann_mlp *)pd_new(ann_mlp_class);
***************
*** 504,514 ****
  	if (argc>0) {
  		x->filename = atom_gensym(argv);
! 		load_ann_from_file(x, NULL , 0, NULL);
  	}
  	return (void *)x;
  }
  
  // free resources
! static void nn_free(t_ann_mlp *x)
  {
    struct fann *ann = x->ann;
--- 506,524 ----
  	if (argc>0) {
  		x->filename = atom_gensym(argv);
! 		ann_mlp_load_ann_from_file(x, NULL , 0, NULL);
  	}
+ 
+ 	post("");
+ 	post("ann_mlp: neural nets for PD");
+ 	post("version: "VERSION"");
+ 	post("compiled: "__DATE__);
+ 	post("author: Davide Morelli");
+ 	post("contact: info at davidemorelli.it www.davidemorelli.it");
+ 
  	return (void *)x;
  }
  
  // free resources
! static void ann_mlp_free(t_ann_mlp *x)
  {
    struct fann *ann = x->ann;
***************
*** 519,561 ****
  void ann_mlp_setup(void) {
  
- 	post("");
- 	post("ann_mlp: neural nets for PD");
- 	post("version: "VERSION"");
- 	post("compiled: "__DATE__);
- 	post("author: Davide Morelli");
- 	post("contact: info at davidemorelli.it www.davidemorelli.it");
- 
  	ann_mlp_class = class_new(gensym("ann_mlp"),
! 		(t_newmethod)nn_new,
! 		(t_method)nn_free, sizeof(t_ann_mlp),
  		CLASS_DEFAULT, A_GIMME, 0);
  
  	// general..
! 	class_addmethod(ann_mlp_class, (t_method)help, gensym("help"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)createFann, gensym("create"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)train, gensym("train"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)run, gensym("run"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_mode, gensym("setmode"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)train_on_file, gensym("train-on-file"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)manage_list, gensym("data"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_filename, gensym("filename"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)load_ann_from_file, gensym("load"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)save_ann_to_file, gensym("save"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)print_ann_details, gensym("details"), 0);
  	
  	// change training parameters
! 	class_addmethod(ann_mlp_class, (t_method)set_desired_error, gensym("desired_error"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
  
  	// change training  and activation algorithms
! 	class_addmethod(ann_mlp_class, (t_method)set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
  	
  	// the most important one: running the ann
! 	class_addlist(ann_mlp_class, (t_method)manage_list);
  
  	// help patch
--- 529,564 ----
  void ann_mlp_setup(void) {
  
  	ann_mlp_class = class_new(gensym("ann_mlp"),
! 		(t_newmethod)ann_mlp_new,
! 		(t_method)ann_mlp_free, sizeof(t_ann_mlp),
  		CLASS_DEFAULT, A_GIMME, 0);
  
  	// general..
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_help, gensym("help"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_createFann, gensym("create"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_train, gensym("train"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_run, gensym("run"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_mode, gensym("setmode"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_train_on_file, gensym("train-on-file"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_manage_list, gensym("data"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_filename, gensym("filename"), A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_load_ann_from_file, gensym("load"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_save_ann_to_file, gensym("save"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_print_ann_details, gensym("details"), 0);
  	
  	// change training parameters
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_desired_error, gensym("desired_error"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
  
  	// change training  and activation algorithms
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
! 	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
  	
  	// the most important one: running the ann
! 	class_addlist(ann_mlp_class, (t_method)ann_mlp_manage_list);
  
  	// help patch

Index: ann_td.c
===================================================================
RCS file: /cvsroot/pure-data/externals/ann/src/ann_td.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** ann_td.c	20 May 2005 11:06:37 -0000	1.5
--- ann_td.c	20 May 2005 20:53:00 -0000	1.6
***************
*** 11,16 ****
  #include "fann.h"
  
  
- #define VERSION "0.01"
  #ifndef __DATE__ 
  #define __DATE__ ""
--- 11,18 ----
  #include "fann.h"
  
+ #ifndef VERSION 
+ #define VERSION "0.2"
+ #endif
  
  #ifndef __DATE__ 
  #define __DATE__ ""
***************
*** 41,45 ****
  } t_ann_td;
  
! static void help(t_ann_td *x)
  {
  	post("");
--- 43,47 ----
  } t_ann_td;
  
! static void ann_td_help(t_ann_td *x)
  {
  	post("");
***************
*** 53,57 ****
  }
  
! static void deallocate_inputs(t_ann_td *x)
  {
  	if (x->inputs != 0)
--- 55,59 ----
  }
  
! static void ann_td_deallocate_inputs(t_ann_td *x)
  {
  	if (x->inputs != 0)
***************
*** 62,69 ****
  }
  
! static void allocate_inputs(t_ann_td *x)
  {
  	unsigned int i;
! 	deallocate_inputs(x);
  	// allocate space for inputs array
  	x->inputs = (t_float *)getbytes((x->frames) * (x->num_input) * sizeof(t_float));
--- 64,71 ----
  }
  
! static void ann_td_allocate_inputs(t_ann_td *x)
  {
  	unsigned int i;
! 	ann_td_deallocate_inputs(x);
  	// allocate space for inputs array
  	x->inputs = (t_float *)getbytes((x->frames) * (x->num_input) * sizeof(t_float));
***************
*** 71,75 ****
  }
  
! static void createFann(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int num_input = 2;
--- 73,77 ----
  }
  
! static void ann_td_createFann(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int num_input = 2;
***************
*** 127,131 ****
  	fann_set_activation_function_output(x->ann, FANN_SIGMOID_SYMMETRIC);
  
! 	allocate_inputs(x);
  
  	if (x->ann == 0)
--- 129,133 ----
  	fann_set_activation_function_output(x->ann, FANN_SIGMOID_SYMMETRIC);
  
! 	ann_td_allocate_inputs(x);
  
  	if (x->ann == 0)
***************
*** 145,149 ****
  }
  
! static void print_status(t_ann_td *x)
  {
  		if (x->mode == TRAIN)
--- 147,151 ----
  }
  
! static void ann_td_print_status(t_ann_td *x)
  {
  		if (x->mode == TRAIN)
***************
*** 153,157 ****
  }
  
! static void train(t_ann_td *x)
  {
  	x->mode=TRAIN;
--- 155,159 ----
  }
  
! static void ann_td_train(t_ann_td *x)
  {
  	x->mode=TRAIN;
***************
*** 162,175 ****
  	}
  	fann_reset_MSE(x->ann);
! 	print_status(x);
  }
  
! static void run(t_ann_td *x)
  {
  	x->mode=RUN;
! 	print_status(x);
  }
  
! static void set_mode(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc<1)
--- 164,177 ----
  	}
  	fann_reset_MSE(x->ann);
! 	ann_td_print_status(x);
  }
  
! static void ann_td_run(t_ann_td *x)
  {
  	x->mode=RUN;
! 	ann_td_print_status(x);
  }
  
! static void ann_td_set_mode(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc<1)
***************
*** 180,184 ****
  	{	
  		x->mode = atom_getint(argv++);
! 		print_status(x);
  	}
  }
--- 182,186 ----
  	{	
  		x->mode = atom_getint(argv++);
! 		ann_td_print_status(x);
  	}
  }
***************
*** 186,190 ****
  
  
! static void train_on_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->ann == 0)
--- 188,192 ----
  
  
! static void ann_td_train_on_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->ann == 0)
***************
*** 211,215 ****
  }
  
! static void set_desired_error(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	float desired_error = (float)0.001;
--- 213,217 ----
  }
  
! static void ann_td_set_desired_error(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	float desired_error = (float)0.001;
***************
*** 225,229 ****
  }
  
! static void set_max_iterations(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int max_iterations = 500000;
--- 227,231 ----
  }
  
! static void ann_td_set_max_iterations(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	unsigned int max_iterations = 500000;
***************
*** 239,243 ****
  }
  
! static void set_iterations_between_reports(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	
--- 241,245 ----
  }
  
! static void ann_td_set_iterations_between_reports(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	
***************
*** 256,260 ****
  
  
! static void scale_inputs(t_ann_td *x)
  {
  	unsigned int j;
--- 258,262 ----
  
  
! static void ann_td_scale_inputs(t_ann_td *x)
  {
  	unsigned int j;
***************
*** 274,278 ****
  // run the ann using floats in list passed to the inlet as input values
  // and send result to outlet as list of float
! static void run_the_net(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
--- 276,280 ----
  // run the ann using floats in list passed to the inlet as input values
  // and send result to outlet as list of float
! static void ann_td_run_the_net(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
***************
*** 303,307 ****
  	quanti = x->ann->num_output;
  
! 	scale_inputs(x);
  
  	// fill output array with zeros
--- 305,309 ----
  	quanti = x->ann->num_output;
  
! 	ann_td_scale_inputs(x);
  
  	// fill output array with zeros
***************
*** 338,342 ****
  }
  
! static void train_on_the_fly(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
--- 340,344 ----
  }
  
! static void ann_td_train_on_the_fly(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	int i=0;
***************
*** 371,375 ****
  	}
  
! 	scale_inputs(x);
  
  	// fill input array with actual data sent to inlet
--- 373,377 ----
  	}
  
! 	ann_td_scale_inputs(x);
  
  	// fill input array with actual data sent to inlet
***************
*** 399,413 ****
  }
  
! static void manage_list(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->mode)
! 		run_the_net(x, sl, argc, argv);
  	else
  	{
! 		train_on_the_fly(x, sl, argc, argv);
  	}
  }
  
! static void set_filename(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
--- 401,415 ----
  }
  
! static void ann_td_manage_list(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->mode)
! 		ann_td_run_the_net(x, sl, argc, argv);
  	else
  	{
! 		ann_td_train_on_the_fly(x, sl, argc, argv);
  	}
  }
  
! static void ann_td_set_filename(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
***************
*** 420,424 ****
  }
  
! static void load_ann_from_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->ins_frames_set==0)
--- 422,426 ----
  }
  
! static void ann_td_load_ann_from_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (x->ins_frames_set==0)
***************
*** 437,444 ****
  		post("nn:ann loaded fom file %s", x->filename->s_name);
  	
! 	allocate_inputs(x);
  }
  
! static void save_ann_to_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
--- 439,446 ----
  		post("nn:ann loaded fom file %s", x->filename->s_name);
  	
! 	ann_td_allocate_inputs(x);
  }
  
! static void ann_td_save_ann_to_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	if (argc>0) {
***************
*** 456,460 ****
  
  // functions for training algo:
! static void set_FANN_TRAIN_INCREMENTAL(t_ann_td *x)
  {
  	if (x->ann == 0)
--- 458,462 ----
  
  // functions for training algo:
! static void ann_td_set_FANN_TRAIN_INCREMENTAL(t_ann_td *x)
  {
  	if (x->ann == 0)
***************
*** 467,471 ****
  	}
  }
! static void set_FANN_TRAIN_BATCH(t_ann_td *x)
  {
  	if (x->ann == 0)
--- 469,473 ----
  	}
  }
! static void ann_td_set_FANN_TRAIN_BATCH(t_ann_td *x)
  {
  	if (x->ann == 0)
***************
*** 478,482 ****
  	}
  }
! static void set_FANN_TRAIN_RPROP(t_ann_td *x)
  {
  	if (x->ann == 0)
--- 480,484 ----
  	}
  }
! static void ann_td_set_FANN_TRAIN_RPROP(t_ann_td *x)
  {
  	if (x->ann == 0)
***************
*** 489,493 ****
  	}
  }
! static void set_FANN_TRAIN_QUICKPROP(t_ann_td *x)
  {
  	if (x->ann == 0)
--- 491,495 ----
  	}
  }
! static void ann_td_set_FANN_TRAIN_QUICKPROP(t_ann_td *x)
  {
  	if (x->ann == 0)
***************
*** 501,505 ****
  }
  
! static void set_activation_function_output(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	t_symbol *parametro = 0;
--- 503,507 ----
  }
  
! static void ann_td_set_activation_function_output(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
  {
  	t_symbol *parametro = 0;
***************
*** 537,541 ****
  }
  
! static void print_ann_details(t_ann_td *x)
  {
  	if (x->ann == 0)
--- 539,543 ----
  }
  
! static void ann_td_print_ann_details(t_ann_td *x)
  {
  	if (x->ann == 0)
***************
*** 562,566 ****
  }
  
! static void set_num_input_frames(t_ann_td *x, t_floatarg ins, t_floatarg frames)
  {
  	x->num_input = ins;
--- 564,568 ----
  }
  
! static void ann_td_set_num_input_frames(t_ann_td *x, t_floatarg ins, t_floatarg frames)
  {
  	x->num_input = ins;
***************
*** 569,573 ****
  }
  
! static void *nn_new(t_symbol *s, int argc, t_atom *argv)
  {
  	t_ann_td *x = (t_ann_td *)pd_new(ann_td_class);
--- 571,575 ----
  }
  
! static void *ann_td_new(t_symbol *s, int argc, t_atom *argv)
  {
  	t_ann_td *x = (t_ann_td *)pd_new(ann_td_class);
***************
*** 594,614 ****
  		x->frames = atom_getint(argv++);
  		x->ins_frames_set=1;
! 		allocate_inputs(x);
  	}
  
  	if (argc>2) {
  		x->filename = atom_gensym(argv);
! 		load_ann_from_file(x, NULL , 0, NULL);
  	}
  
  	return (void *)x;
  }
  
  // free resources
! static void nn_free(t_ann_td *x)
  {
    struct fann *ann = x->ann;
    fann_destroy(ann);
!   deallocate_inputs(x);
    // TODO: free other resources!
  }
--- 596,623 ----
  		x->frames = atom_getint(argv++);
  		x->ins_frames_set=1;
! 		ann_td_allocate_inputs(x);
  	}
  
  	if (argc>2) {
  		x->filename = atom_gensym(argv);
! 		ann_td_load_ann_from_file(x, NULL , 0, NULL);
  	}
  
+ 	post("");
+ 	post("ann_td: time delay neural nets for PD");
+ 	post("version: "VERSION"");
+ 	post("compiled: "__DATE__);
+ 	post("author: Davide Morelli");
+ 	post("contact: info at davidemorelli.it www.davidemorelli.it");
+ 
  	return (void *)x;
  }
  
  // free resources
! static void ann_td_free(t_ann_td *x)
  {
    struct fann *ann = x->ann;
    fann_destroy(ann);
!   ann_td_deallocate_inputs(x);
    // TODO: free other resources!
  }
***************
*** 616,660 ****
  void ann_td_setup(void) {
  
- 	post("");
- 	post("ann_td: time delay neural nets for PD");
- 	post("version: "VERSION"");
- 	post("compiled: "__DATE__);
- 	post("author: Davide Morelli");
- 	post("contact: info at davidemorelli.it www.davidemorelli.it");
- 
  	ann_td_class = class_new(gensym("ann_td"),
! 		(t_newmethod)nn_new,
! 		(t_method)nn_free, sizeof(t_ann_td),
  		CLASS_DEFAULT, A_GIMME, 0);
  
  	// general..
! 	class_addmethod(ann_td_class, (t_method)help, gensym("help"), 0);
! 	class_addmethod(ann_td_class, (t_method)createFann, gensym("create"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)train, gensym("train"), 0);
! 	class_addmethod(ann_td_class, (t_method)run, gensym("run"), 0);
! 	class_addmethod(ann_td_class, (t_method)set_mode, gensym("setmode"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)train_on_file, gensym("train-on-file"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)manage_list, gensym("data"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)set_filename, gensym("filename"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)load_ann_from_file, gensym("load"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)save_ann_to_file, gensym("save"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)print_ann_details, gensym("details"), 0);
  	
  	// change training parameters
! 	class_addmethod(ann_td_class, (t_method)set_desired_error, gensym("desired_error"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
  
  	// change training  and activation algorithms
! 	class_addmethod(ann_td_class, (t_method)set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
! 	class_addmethod(ann_td_class, (t_method)set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
! 	class_addmethod(ann_td_class, (t_method)set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
! 	class_addmethod(ann_td_class, (t_method)set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
! 	class_addmethod(ann_td_class, (t_method)set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
  	
! 	class_addmethod(ann_td_class, (t_method)set_num_input_frames, gensym("inputs_frames"),A_DEFFLOAT, A_DEFFLOAT, 0);
  	
  	// the most important one: running the ann
! 	class_addlist(ann_td_class, (t_method)manage_list);
  
  	// help patch
--- 625,662 ----
  void ann_td_setup(void) {
  
  	ann_td_class = class_new(gensym("ann_td"),
! 		(t_newmethod)ann_td_new,
! 		(t_method)ann_td_free, sizeof(t_ann_td),
  		CLASS_DEFAULT, A_GIMME, 0);
  
  	// general..
! 	class_addmethod(ann_td_class, (t_method)ann_td_help, gensym("help"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_createFann, gensym("create"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_train, gensym("train"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_run, gensym("run"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_mode, gensym("setmode"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_train_on_file, gensym("train-on-file"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_manage_list, gensym("data"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_filename, gensym("filename"), A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_load_ann_from_file, gensym("load"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_save_ann_to_file, gensym("save"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_print_ann_details, gensym("details"), 0);
  	
  	// change training parameters
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_desired_error, gensym("desired_error"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
  
  	// change training  and activation algorithms
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
  	
! 	class_addmethod(ann_td_class, (t_method)ann_td_set_num_input_frames, gensym("inputs_frames"),A_DEFFLOAT, A_DEFFLOAT, 0);
  	
  	// the most important one: running the ann
! 	class_addlist(ann_td_class, (t_method)ann_td_manage_list);
  
  	// help patch

Index: makefile.msvc
===================================================================
RCS file: /cvsroot/pure-data/externals/ann/src/makefile.msvc,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** makefile.msvc	19 May 2005 15:04:33 -0000	1.3
--- makefile.msvc	20 May 2005 20:53:00 -0000	1.4
***************
*** 12,18 ****
  
  
! current: clean pd_nt
  
- pd_nt: ann_som.dll ann_mlp.dll ann_td.dll
  
  .SUFFIXES: .dll
--- 12,20 ----
  
  
! current: clean pd_nt distclean
! 
! pd_nt: ann_som.dll ann_mlp.dll ann_td.dll ann.dll
! #pd_nt: ann.dll
  
  
  .SUFFIXES: .dll
***************
*** 28,39 ****
  	$(PDNTLDIR)\kernel32.lib \
  	$(PDPATH)\bin\pd.lib \
! 	$(FANNLIB)\libfann.lib
  
  .c.dll:
  	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
! 	link /dll /export:$*_setup $*.obj $(PDNTLIB)
! 	-del *.obj
! 	-del *.lib
! 	-del *.exp
  
  #install:
--- 30,42 ----
  	$(PDNTLDIR)\kernel32.lib \
  	$(PDPATH)\bin\pd.lib \
! 	$(FANNLIB)\libfann.lib 
! #	ann_mlp.lib ann_som.lib ann_td.lib
  
  .c.dll:
  	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
! 	link /dll /export:$*_setup $*.obj $(PDNTLIB) *.lib
! #	-del *.obj
! #	-del *.lib
! #	-del *.exp
  
  #install:
***************
*** 47,48 ****
--- 50,55 ----
  	-del *.dll
  
+ distclean:
+ 	-del *.obj
+ 	-del *.lib
+ 	-del *.exp





More information about the Pd-cvs mailing list