⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 steepness_train.c

📁 一个功能强大的神经网络分析程序
💻 C
字号:
/*Fast Artificial Neural Network Library (fann)Copyright (C) 2003 Steffen Nissen (lukesky@diku.dk)This library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include "fann.h"#include <stdio.h>void train_on_steepness_file(struct fann *ann, char *filename,	unsigned int max_epochs, unsigned int epochs_between_reports,	float desired_error, float steepness_start,	float steepness_step, float steepness_end){	float error;	unsigned int i;	struct fann_train_data *data = fann_read_train_from_file(filename);	if(epochs_between_reports){		printf("Max epochs %8d. Desired error: %.10f\n",			max_epochs, desired_error);	}	fann_set_activation_steepness_hidden(ann, steepness_start);	fann_set_activation_steepness_output(ann, steepness_start);	for(i = 1; i <= max_epochs; i++){		/* train */		error = fann_train_epoch(ann, data);		/* print current output */		if(epochs_between_reports &&			(i % epochs_between_reports == 0				|| i == max_epochs				|| i == 1				|| error < desired_error)){			printf("Epochs     %8d. Current error: %.10f\n", i, error);		}		if(error < desired_error){			steepness_start += steepness_step;			if(steepness_start <= steepness_end){				printf("Steepness: %f\n", steepness_start);				fann_set_activation_steepness_hidden(ann, steepness_start);				fann_set_activation_steepness_output(ann, steepness_start);			}else{				break;			}		}	}	fann_destroy_train(data);}int main(){	const float connection_rate = 1;	const float learning_rate = (const float)0.7;	const unsigned int num_input = 2;	const unsigned int num_output = 1;	const unsigned int num_layers = 3;	const unsigned int num_neurons_hidden = 3;	const float desired_error = (const float)0.001;	const unsigned int max_iterations = 500000;	const unsigned int iterations_between_reports = 1000;	unsigned int i;	fann_type *calc_out;	struct fann_train_data *data;		struct fann *ann = fann_create(connection_rate,		learning_rate, num_layers,		num_input, num_neurons_hidden, num_output);		data = fann_read_train_from_file("xor.data");		fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);	fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);	fann_set_training_algorithm(ann, FANN_TRAIN_QUICKPROP);		train_on_steepness_file(ann, "xor.data", max_iterations,		iterations_between_reports, desired_error, (float)1.0, (float)0.1, (float)20.0);	fann_set_activation_function_hidden(ann, FANN_THRESHOLD_SYMMETRIC);	fann_set_activation_function_output(ann, FANN_THRESHOLD_SYMMETRIC);	for(i = 0; i != data->num_data; i++){		calc_out = fann_run(ann, data->input[i]);		printf("XOR test (%f, %f) -> %f, should be %f, difference=%f\n",		data->input[i][0], data->input[i][1], *calc_out, data->output[i][0],			(float)fann_abs(*calc_out - data->output[i][0]));	}			fann_save(ann, "xor_float.net");		fann_destroy(ann);	fann_destroy_train(data);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -