FANN_EXTERNAL void FANN_API fann_print_parameters(struct fann *ann) { struct fann_layer *layer_it; printf("Input layer :%4d neurons, 1 bias\n", ann->num_input); for(layer_it = ann->first_layer + 1; layer_it != ann->last_layer - 1; layer_it++) { printf(" Hidden layer :%4d neurons, 1 bias\n", layer_it->last_neuron - layer_it->first_neuron - 1); } printf("Output layer :%4d neurons\n", ann->num_output); printf("Total neurons and biases :%4d\n", fann_get_total_neurons(ann)); printf("Total connections :%4d\n", ann->total_connections); printf("Training algorithm : %s\n", FANN_TRAIN_NAMES[ann->training_algorithm]); printf("Training error function : %s\n", FANN_ERRORFUNC_NAMES[ann->train_error_function]); printf("Training stop function : %s\n", FANN_STOPFUNC_NAMES[ann->train_stop_function]); printf("Bit fail limit :%8.3f\n", ann->bit_fail_limit); printf("Learning rate :%8.3f\n", ann->learning_rate); printf("Learning momentum :%8.3f\n", ann->learning_momentum); printf("Quickprop decay :%11.6f\n", ann->quickprop_decay); printf("Quickprop mu :%8.3f\n", ann->quickprop_mu); printf("RPROP increase factor :%8.3f\n", ann->rprop_increase_factor); printf("RPROP decrease factor :%8.3f\n", ann->rprop_decrease_factor); printf("RPROP delta min :%8.3f\n", ann->rprop_delta_min); printf("RPROP delta max :%8.3f\n", ann->rprop_delta_max); /* TODO: dump scale parameters */ }
/*! ann:__tostring() *# Converts a neural net to a string for Lua's virtual machine *x print(ann) *- */ static int ann_tostring(lua_State *L) { struct fann **ann; ann = luaL_checkudata(L, 1, FANN_METATABLE); luaL_argcheck(L, ann != NULL, 1, "'neural net' expected"); lua_pushfstring(L, "[[FANN neural network: %d %d %d]]", fann_get_num_input(*ann), fann_get_num_output(*ann), fann_get_total_neurons(*ann)); return 1; }
FANN_EXTERNAL void FANN_API fann_print_connections(struct fann *ann) { struct fann_layer *layer_it; struct fann_neuron *neuron_it; unsigned int i; int value; char *neurons; unsigned int num_neurons = fann_get_total_neurons(ann) - fann_get_num_output(ann); neurons = (char *) fann_malloc(num_neurons + 1); if(neurons == NULL) { fann_error(NULL, FANN_E_CANT_ALLOCATE_MEM); return; } neurons[num_neurons] = 0; printf("Layer / Neuron "); for(i = 0; i < num_neurons; i++) { printf("%d", i % 10); } printf("\n"); for(layer_it = ann->first_layer + 1; layer_it != ann->last_layer; layer_it++) { for(neuron_it = layer_it->first_neuron; neuron_it != layer_it->last_neuron; neuron_it++) { memset(neurons, (int) '.', num_neurons); for(i = neuron_it->first_con; i < neuron_it->last_con; i++) { if(ann->weights[i] < 0) { #ifdef FIXEDFANN value = (int) ((ann->weights[i] / (double) ann->multiplier) - 0.5); #else value = (int) ((ann->weights[i]) - 0.5); #endif if(value < -25) value = -25; neurons[ann->connections[i] - ann->first_layer->first_neuron] = (char)('a' - value); } else { #ifdef FIXEDFANN value = (int) ((ann->weights[i] / (double) ann->multiplier) + 0.5); #else value = (int) ((ann->weights[i]) + 0.5); #endif if(value > 25) value = 25; neurons[ann->connections[i] - ann->first_layer->first_neuron] = (char)('A' + value); } } printf("L %3d / N %4d %s\n", layer_it - ann->first_layer, neuron_it - ann->first_layer->first_neuron, neurons); } } fann_free(neurons); }
FANN_EXTERNAL void FANN_API fann_print_parameters(struct fann *ann) { struct fann_layer *layer_it; #ifndef FIXEDFANN unsigned int i; #endif printf("Input layer :%4d neurons, 1 bias\n", ann->num_input); for(layer_it = ann->first_layer + 1; layer_it != ann->last_layer - 1; layer_it++) { if(ann->network_type == FANN_NETTYPE_SHORTCUT) { printf(" Hidden layer :%4d neurons, 0 bias\n", layer_it->last_neuron - layer_it->first_neuron); } else { printf(" Hidden layer :%4d neurons, 1 bias\n", layer_it->last_neuron - layer_it->first_neuron - 1); } } printf("Output layer :%4d neurons\n", ann->num_output); printf("Total neurons and biases :%4d\n", fann_get_total_neurons(ann)); printf("Total connections :%4d\n", ann->total_connections); printf("Connection rate :%8.3f\n", ann->connection_rate); printf("Network type : %s\n", FANN_NETTYPE_NAMES[ann->network_type]); #ifdef FIXEDFANN printf("Decimal point :%4d\n", ann->decimal_point); printf("Multiplier :%4d\n", ann->multiplier); #else printf("Training algorithm : %s\n", FANN_TRAIN_NAMES[ann->training_algorithm]); printf("Training error function : %s\n", FANN_ERRORFUNC_NAMES[ann->train_error_function]); printf("Training stop function : %s\n", FANN_STOPFUNC_NAMES[ann->train_stop_function]); #endif #ifdef FIXEDFANN printf("Bit fail limit :%4d\n", ann->bit_fail_limit); #else printf("Bit fail limit :%8.3f\n", ann->bit_fail_limit); printf("Learning rate :%8.3f\n", ann->learning_rate); printf("Learning momentum :%8.3f\n", ann->learning_momentum); printf("Quickprop decay :%11.6f\n", ann->quickprop_decay); printf("Quickprop mu :%8.3f\n", ann->quickprop_mu); printf("RPROP increase factor :%8.3f\n", ann->rprop_increase_factor); printf("RPROP decrease factor :%8.3f\n", ann->rprop_decrease_factor); printf("RPROP delta min :%8.3f\n", ann->rprop_delta_min); printf("RPROP delta max :%8.3f\n", ann->rprop_delta_max); printf("Cascade output change fraction :%11.6f\n", ann->cascade_output_change_fraction); printf("Cascade candidate change fraction :%11.6f\n", ann->cascade_candidate_change_fraction); printf("Cascade output stagnation epochs :%4d\n", ann->cascade_output_stagnation_epochs); printf("Cascade candidate stagnation epochs :%4d\n", ann->cascade_candidate_stagnation_epochs); printf("Cascade max output epochs :%4d\n", ann->cascade_max_out_epochs); printf("Cascade max candidate epochs :%4d\n", ann->cascade_max_cand_epochs); printf("Cascade weight multiplier :%8.3f\n", ann->cascade_weight_multiplier); printf("Cascade candidate limit :%8.3f\n", ann->cascade_candidate_limit); for(i = 0; i < ann->cascade_activation_functions_count; i++) printf("Cascade activation functions[%d] : %s\n", i, FANN_ACTIVATIONFUNC_NAMES[ann->cascade_activation_functions[i]]); for(i = 0; i < ann->cascade_activation_steepnesses_count; i++) printf("Cascade activation steepnesses[%d] :%8.3f\n", i, ann->cascade_activation_steepnesses[i]); printf("Cascade candidate groups :%4d\n", ann->cascade_num_candidate_groups); printf("Cascade no. of candidates :%4d\n", fann_get_cascade_num_candidates(ann)); /* TODO: dump scale parameters */ #endif }