int main() { struct fann *ann; struct fann_train_data *train_data, *test_data; const float desired_error = (const float) 0.001; unsigned int max_neurons = 40; unsigned int neurons_between_reports = 1; printf("Reading data.\n"); train_data = fann_read_train_from_file("../benchmarks/datasets/two-spiral.train"); test_data = fann_read_train_from_file("../benchmarks/datasets/two-spiral.test"); fann_scale_train_data(train_data, 0, 1); fann_scale_train_data(test_data, 0, 1); printf("Creating network.\n"); ann = fann_create_shortcut(2, fann_num_input_train_data(train_data), fann_num_output_train_data(train_data)); fann_set_training_algorithm(ann, FANN_TRAIN_RPROP); fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC); fann_set_activation_function_output(ann, FANN_LINEAR_PIECE); fann_set_train_error_function(ann, FANN_ERRORFUNC_LINEAR); fann_print_parameters(ann); printf("Training network.\n"); fann_cascadetrain_on_data(ann, train_data, max_neurons, neurons_between_reports, desired_error); fann_print_connections(ann); printf("\nTrain error: %f, Test error: %f\n\n", fann_test_data(ann, train_data), fann_test_data(ann, test_data)); printf("Saving network.\n"); fann_save(ann, "two_spirali.net"); printf("Cleaning up.\n"); fann_destroy_train(train_data); fann_destroy_train(test_data); fann_destroy(ann); return 0; }
int main() { struct fann *ann; struct fann_train_data *train_data, *test_data; const float desired_error = (const float)0.0; unsigned int max_neurons = 30; unsigned int neurons_between_reports = 1; unsigned int bit_fail_train, bit_fail_test; float mse_train, mse_test; unsigned int i = 0; fann_type *output; fann_type steepness; int multi = 0; enum fann_activationfunc_enum activation; enum fann_train_enum training_algorithm = FANN_TRAIN_RPROP; printf("Reading data.\n"); train_data = fann_read_train_from_file("../benchmarks/datasets/parity8.train"); test_data = fann_read_train_from_file("../benchmarks/datasets/parity8.test"); fann_scale_train_data(train_data, -1, 1); fann_scale_train_data(test_data, -1, 1); printf("Creating network.\n"); ann = fann_create_shortcut(2, fann_num_input_train_data(train_data), fann_num_output_train_data(train_data)); fann_set_training_algorithm(ann, training_algorithm); fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC); fann_set_activation_function_output(ann, FANN_LINEAR); fann_set_train_error_function(ann, FANN_ERRORFUNC_LINEAR); if(!multi) { /*steepness = 0.5;*/ steepness = 1; fann_set_cascade_activation_steepnesses(ann, &steepness, 1); /*activation = FANN_SIN_SYMMETRIC;*/ activation = FANN_SIGMOID_SYMMETRIC; fann_set_cascade_activation_functions(ann, &activation, 1); fann_set_cascade_num_candidate_groups(ann, 8); } if(training_algorithm == FANN_TRAIN_QUICKPROP) { fann_set_learning_rate(ann, 0.35); fann_randomize_weights(ann, -2.0,2.0); } fann_set_bit_fail_limit(ann, 0.9); fann_set_train_stop_function(ann, FANN_STOPFUNC_BIT); fann_print_parameters(ann); fann_save(ann, "cascade_train2.net"); printf("Training network.\n"); fann_cascadetrain_on_data(ann, train_data, max_neurons, neurons_between_reports, desired_error); fann_print_connections(ann); mse_train = fann_test_data(ann, train_data); bit_fail_train = fann_get_bit_fail(ann); mse_test = fann_test_data(ann, test_data); bit_fail_test = fann_get_bit_fail(ann); printf("\nTrain error: %f, Train bit-fail: %d, Test error: %f, Test bit-fail: %d\n\n", mse_train, bit_fail_train, mse_test, bit_fail_test); for(i = 0; i < train_data->num_data; i++) { output = fann_run(ann, train_data->input[i]); if((train_data->output[i][0] >= 0 && output[0] <= 0) || (train_data->output[i][0] <= 0 && output[0] >= 0)) { printf("ERROR: %f does not match %f\n", train_data->output[i][0], output[0]); } } printf("Saving network.\n"); fann_save(ann, "cascade_train.net"); printf("Cleaning up.\n"); fann_destroy_train(train_data); fann_destroy_train(test_data); fann_destroy(ann); return 0; }
int main() { fann_type *calc_out; const unsigned int num_input = 22500; const unsigned int num_output = 1; //const unsigned int num_layers = 4; const unsigned int num_layers = 4; /* this value can be changed to tweak the network */ const unsigned int num_neurons_hidden = 50; //const unsigned int num_neurons_hidden = 150; const float desired_error = (const float) 0.02; const unsigned int max_epochs = 15000; const unsigned int epochs_between_reports = 20; float learning_rate = .5; struct fann *ann; struct fann_train_data *data; int num_neurons = 0; unsigned int i = 0; unsigned int decimal_point; /* CREATING NETWORK */ ann = fann_create_shortcut(2, num_input, num_output); /* reading training data */ data = fann_read_train_from_file("training.data"); //fann_set_cascade_activation_steepness_hidden(ann, 1); //fann_set_cascade_activation_steepness_output(ann, 1); //fann_set_cascade_activation_steepnesses(ann, 1); fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC); fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC); fann_init_weights(ann, data); /* TRAINING NETWORK run x epochs at learn rate .y */ //fann_cascadetrain_on_data(ann, data, 2000, epochs_between_reports, .4); fann_set_learning_rate(ann, .7); fann_cascadetrain_on_data(ann, data, 2000, epochs_between_reports, .0002); //fann_train_on_data(ann, data, 500, epochs_between_reports, .002); /*fann_set_learning_rate(ann, .5); fann_cascadetrain_on_data(ann, data,5000, epochs_between_reports, .2); //fann_train_on_data(ann, data,50, epochs_between_reports, .2); fann_set_learning_rate(ann, .2); fann_cascadetrain_on_data(ann, data,1000, epochs_between_reports, .15); //fann_train_on_data(ann, data,100, epochs_between_reports, .15); fann_set_learning_rate(ann, .1); //fann_train_on_data(ann, data,5000, epochs_between_reports, .002); fann_cascadetrain_on_data(ann, data,200, epochs_between_reports, .00002); */ /* TESTING NETWORK */ printf("Testing network. %f\n", fann_test_data(ann, data)); for(i = 0; i < fann_length_train_data(data); i++) { calc_out = fann_run(ann, data->input[i]); printf("%f, should be %f, difference=%f\n", calc_out[0], data->output[i][0], fann_abs(calc_out[0] - data->output[i][0])); } /* SAVING NETWORK */ fann_save(ann, "image_spam.net"); /* CLEANING UP */ fann_destroy_train(data); fann_destroy(ann); return 0; }
int main(int argc,char **argv) { unlink(histfile); srand ( time ( NULL ) ); // printf ( "Reading data.\n" ); train_data = fann_read_train_from_file ( "train.dat" ); test_data = fann_read_train_from_file ( "test.dat" ); // signal ( 2, sig_term ); // fann_scale_train_data ( train_data, 0, 1.54 ); // fann_scale_train_data ( test_data, 0, 1.54 ); //cln_test_data=fann_duplicate_train_data(test_data); cln_train_data=fann_duplicate_train_data(train_data); printf ( "Creating cascaded network.\n" ); ann = fann_create_shortcut ( 2, fann_num_input_train_data ( train_data ), fann_num_output_train_data ( train_data ) ); fann_set_training_algorithm ( ann, FANN_TRAIN_RPROP ); fann_set_activation_function_hidden ( ann, FANN_SIGMOID ); fann_set_activation_function_output ( ann, FANN_SIGMOID); fann_set_train_error_function ( ann, FANN_ERRORFUNC_LINEAR ); // if (fann_set_scaling_params(ann, train_data,-1.0f,1.0f,0.0f, 1.0f)==-1) // printf("set scaling error: %s\n",fann_get_errno((struct fann_error*)ann)); // fann_scale_train_input(ann,train_data); // fann_scale_output_train_data(train_data,0.0f,1.0f); // fann_scale_input_train_data(train_data, -1.0,1.0f); // fann_scale_output_train_data(test_data,-1.0f,1.0f); // fann_scale_input_train_data(test_data, -1.0,1.0f); //fann_scale_train(ann,train_data); // fann_scale_train(ann,weight_data); // fann_scale_train(ann,test_data); /* * fann_set_cascade_output_change_fraction(ann, 0.1f); * ; * fann_set_cascade_candidate_change_fraction(ann, 0.1f); * */ // fann_set_cascade_output_stagnation_epochs ( ann, 180 ); //fann_set_cascade_weight_multiplier ( ann, ( fann_type ) 0.1f ); fann_set_callback ( ann, cascade_callback ); if ( !multi ) { /* */ // steepness[0] = 0.22; steepness[0] = 0.9; steepness[1] = 1.0; /* * steepness[1] = 0.55; * ; * steepness[1] = 0.33; * ; * steepness[3] = 0.11; * ; * steepness[1] = 0.01; * */ /* * steepness = 0.5; * */ // fann_set_cascade_activation_steepnesses ( ann, steepness, 2); /* * activation = FANN_SIN_SYMMETRIC; */ /* * activation[0] = FANN_SIGMOID; * */ activation[0] = FANN_SIGMOID; /* * activation[2] = FANN_ELLIOT_SYMMETRIC; * */ activation[1] = FANN_LINEAR_PIECE; /* * activation[4] = FANN_GAUSSIAN_SYMMETRIC; * ; * activation[5] = FANN_SIGMOID; * */ activation[2] = FANN_ELLIOT; activation[3] = FANN_COS; /* * * */ activation[4] = FANN_SIN; fann_set_cascade_activation_functions ( ann, activation, 5); /* fann_set_cascade_num_candidate_groups ( ann, fann_num_input_train_data ( train_data ) ); */ } else { /* * fann_set_cascade_activation_steepnesses(ann, &steepness, 0.75); * */ // fann_set_cascade_num_candidate_groups ( ann, 1 ); } /* TODO: weight mult > 0.01 */ /* if ( training_algorithm == FANN_TRAIN_QUICKPROP ) { fann_set_learning_rate ( ann, 0.35f ); } else { fann_set_learning_rate ( ann, 0.7f ); } fann_set_bit_fail_limit ( ann, ( fann_type ) 0.9f );*/ /* * fann_set_train_stop_function(ann, FANN_STOPFUNC_BIT); * */ //fann_scale_output_train_data(train_data,0.0f,1.0f); //fann_scale_input_train_data(train_data, -1.0f,1.0f); // fann_scale_output_train_data(test_data, 0.0f,1.0f); //fann_scale_input_train_data(test_data, -1.0f,1.0f); // fann_randomize_weights ( ann, -0.2f, 0.2f ); fann_init_weights ( ann, train_data ); printf ( "Training network.\n" ); fann_cascadetrain_on_data ( ann, train_data, max_neurons, 1, desired_error ); fann_print_connections ( ann ); mse_train = fann_test_data ( ann, train_data ); bit_fail_train = fann_get_bit_fail ( ann ); mse_test = fann_test_data ( ann, test_data ); bit_fail_test = fann_get_bit_fail ( ann ); printf ( "\nTrain error: %.08f, Train bit-fail: %d, Test error: %.08f, Test bit-fail: %d\n\n", mse_train, bit_fail_train, mse_test, bit_fail_test ); printf ( "Saving cascaded network.\n" ); fann_save ( ann, "cascaded.net" ); // printf ( "Cleaning up.\n" ); fann_destroy_train ( train_data ); fann_destroy_train ( test_data ); fann_destroy ( ann ); return 0; }