Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
/*! train:scale(min, max)
 *# Scales the inputs and outputs of training data to the new range [{{min}}-{{max}}]
 *x
 *-
 */
static int ann_train_scale(lua_State *L)
{
	struct fann_train_data **train;
	fann_type min, max;

	train = luaL_checkudata(L, 1, FANN_TRAIN_METATABLE);
	luaL_argcheck(L, train != NULL, 1, "'training data' expected");

	min = luaL_checknumber(L, 2);
	max = luaL_checknumber(L, 3);

#ifdef FANN_VERBOSE
	printf("Scaling training data to %g - %g\n", (double)min, (double)max);
#endif

	fann_scale_train_data(*train, min, max);

	return 0;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
int main(int argc, char *argv[])
{
	struct fann_train_data *train, *test, *all;
	unsigned int i, j;
	unsigned int length, half_length;
	
	if(argc == 2)
	{
		train = fann_read_train_from_file(argv[1]);
		fann_shuffle_train_data(train);
		fann_scale_train_data(train, 0, 1);
		fann_save_train(train, argv[1]);
		return 0;
	}
	else if(argc == 3)
	{
		train = fann_read_train_from_file(argv[1]);
		test = fann_read_train_from_file(argv[2]);
		all = fann_merge_train_data(train, test);
		
		fann_shuffle_train_data(all);
		
		for(i = 0; i < train->num_data; i++)
		{
			for(j = 0; j < train->num_input; j++)
			{
				train->input[i][j] = all->input[i][j];
			}
			
			for(j = 0; j < train->num_output; j++)
			{
				train->output[i][j] = all->output[i][j];
			}
		}
		
		for(i = 0; i < test->num_data; i++)
		{
			for(j = 0; j < test->num_input; j++)
			{
				test->input[i][j] = all->input[i + train->num_data][j];
			}
			
			for(j = 0; j < test->num_output; j++)
			{
				test->output[i][j] = all->output[i + train->num_data][j];
			}
		}
		
		fann_save_train(train, argv[1]);
		fann_save_train(test, argv[2]);
	}
	else if(argc == 4)
	{
		all = fann_read_train_from_file(argv[1]);
		fann_shuffle_train_data(all);
		fann_scale_train_data(all, 0, 1);
		length = fann_length_train_data(all);
		half_length = length/2;

		train = fann_subset_train_data(all, 0, half_length);
		test = fann_subset_train_data(all, half_length, length-half_length);		

		fann_save_train(train, argv[2]);
		fann_save_train(test, argv[3]);
	}
	else
	{
		printf("usage: %s train_file\n", argv[0]);
		printf("will shuffle the data in the file.\n");
		printf("usage: %s train_file test_file\n", argv[0]);
		printf("will shuffle the data in the two files and save the new data back to them.\n");
		printf("usage: %s input_file train_file test_file\n", argv[0]);
		printf("will shuffle the data in the input_file, and split it in two files and save the new data back to them.\n\n");
		return -1;
	}
	
	
	return 0;
}