void test_network(Network* network){ char* input_line = malloc(50*sizeof(char)); Vector* testing_point_in = new_vec(DIMENSION_INPUT+1); Vector* testing_point_out = new_vec(DIMENSION_OUTPUT); size_t test_set_size = 0; while (scanf("%s\n", input_line) != EOF) { test_set_size++; #if REGRESSION sscanf(input_line, "%lf\n", &testing_point_in->scalars[0]); testing_point_in->scalars[0] = normalise_data(testing_point_in->scalars[0], MAX_VALUES_INPUT[0], MIN_VALUES_INPUT[0]); testing_point_in->scalars[DIMENSION_INPUT] = BIAS; testing_point_out = compute_output_network(network, testing_point_in); printf("%.7lf\n", denormalise_data(testing_point_out->scalars[0], MAX_VALUES_INPUT[1], MIN_VALUES_INPUT[1])); #elif CLASSIFICATION sscanf(input_line, "%lf,%lf\n", &testing_point_in->scalars[0], &testing_point_in->scalars[1]); testing_point_in->scalars[DIMENSION_INPUT] = BIAS; testing_point_out = compute_output_network(network, testing_point_in); if (testing_point_out->scalars[0] >= 0) { printf("+1\n"); }else{ printf("-1\n"); } #endif delete_vec(testing_point_out); } delete_vec(testing_point_in); free(input_line); }
size_t read_input(Vector* training_data[], Vector* teaching_data[]){ size_t input_size = 0; char* input_line = malloc(50*sizeof(char)); Vector* not_normalised_training[MAX_INPUT_LENGHT]; Vector* not_normalised_teaching[MAX_INPUT_LENGHT]; for (int i = 0; i < MAX_INPUT_LENGHT; i++) { not_normalised_training[i] = new_vec(DIMENSION_INPUT+1); // +bias not_normalised_teaching[i] = new_vec(DIMENSION_OUTPUT); } for (int i = 0; i < MAX_INPUT_LENGHT; i++) { if (scanf("%s\n", input_line) == EOF){ break; } if (!strncmp(input_line, TERMINATING_STR, (int)strlen(TERMINATING_STR)-1)) { break; } #if REGRESSION sscanf(input_line, "%lf,%lf\n", ¬_normalised_training[i]->scalars[0], ¬_normalised_teaching[i]->scalars[0]); not_normalised_training[i]->scalars[1] = BIAS; #elif CLASSIFICATION sscanf(input_line, "%lf,%lf,%lf\n", ¬_normalised_training[i]->scalars[0], ¬_normalised_training[i]->scalars[1], ¬_normalised_teaching[i]->scalars[0]); not_normalised_training[i]->scalars[2] = BIAS; #endif input_size++; } double min = FLOAT_MAX; double max = FLOAT_MIN; for (int i = 0; i < input_size; i++) { if (not_normalised_training[i]->scalars[0] > max) { max = not_normalised_training[i]->scalars[0]; } if (not_normalised_training[i]->scalars[0] < min) { min = not_normalised_training[i]->scalars[0]; } } MAX_VALUES_INPUT[0] = max; MIN_VALUES_INPUT[0] = min; #if REGRESSION min = FLOAT_MAX; max = FLOAT_MIN; for (int i = 0; i < input_size; i++) { if (not_normalised_teaching[i]->scalars[0] > max) { max = not_normalised_teaching[i]->scalars[0]; } if (not_normalised_teaching[i]->scalars[0] < min) { min = not_normalised_teaching[i]->scalars[0]; } } MAX_VALUES_INPUT[1] = max; MIN_VALUES_INPUT[1] = min; #elif CLASSIFICATION min = FLOAT_MAX; max = FLOAT_MIN; for (int i = 0; i < input_size; i++) { if (not_normalised_training[i]->scalars[1] > max) { max = not_normalised_training[i]->scalars[1]; } if (not_normalised_training[i]->scalars[1] < min) { min = not_normalised_training[i]->scalars[1]; } } MAX_VALUES_INPUT[1] = max; MIN_VALUES_INPUT[1] = min; #endif for (int i = 0; i < input_size; i++) { #if REGRESSION training_data[i]->scalars[0] = normalise_data(not_normalised_training[i]->scalars[0], MAX_VALUES_INPUT[0], MIN_VALUES_INPUT[0]); training_data[i]->scalars[1] = BIAS;//normalised_training->scalars[1]; teaching_data[i]->scalars[0] = normalise_data(not_normalised_teaching[i]->scalars[0], MAX_VALUES_INPUT[1], MIN_VALUES_INPUT[1]); #elif CLASSIFICATION training_data[i]->scalars[0] = normalise_data(not_normalised_training[i]->scalars[0], MAX_VALUES_INPUT[0], MIN_VALUES_INPUT[0]); training_data[i]->scalars[1] = normalise_data(not_normalised_training[i]->scalars[1], MAX_VALUES_INPUT[1], MIN_VALUES_INPUT[1]); training_data[i]->scalars[2] = BIAS;//normalised_training->scalars[2]; teaching_data[i]->scalars[0] = not_normalised_teaching[i]->scalars[0]; #endif } for (int i = 0; i < MAX_INPUT_LENGHT; i++) { delete_vec(not_normalised_training[i]); delete_vec(not_normalised_teaching[i]); } free(input_line); return input_size; }
/**************** * * Programme principal * ****************/ int main(int argc, char **argv) { /* infos des différentes touches */ usage(); /* création d'une mémoire pour stocker */ /* les triangles de la surface iso-valeur */ /* -> tableau lT de dimension maximale nTmax */ /* la variable nT donne le nombre de triangles calculés */ /* (cf. routine calculIsoSurface) */ initBufferTriangles(); /* création d'une grille de données 3D de dimensions (sx,sy,sz) */ /* -> tableau buffer_vol */ /* buffer_vol[i+sx*j+sx*sy*k] contient la valeur du sommet de */ /* coordonnées (i,j,k), la valeur entre un réel entre 0.0 et 1.0 */ if (argc==1) creer_data_f_implicite(); /* données à partir d'une fonction */ else lire_fichier_data(argc, argv); /* données à partir d'un fichier */ normalise_data(); /*creation de la fenetre*/ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutCreateWindow("Marching Tetrahedra"); /* volume englobant pour la vue 3D */ glMatrixMode(GL_PROJECTION); glOrtho(-(-xmin+xmax)*.7*eX, (-xmin+xmax)*.7*eX, -(-ymin+ymax)*.7*eY, (-ymin+ymax)*.7*eY, -(-zmin+zmax)*10*eZ, (-zmin+zmax)*10*eZ); glMatrixMode(GL_MODELVIEW); /* initialisation des parametres de vue */ initialisation(); /* fonction affichage */ glutDisplayFunc (display); /* gestion touche clavier */ glutKeyboardFunc(clavier); /* function de gestion des moments où rien ne se passe */ glutIdleFunc(display); /* fonctions pour la gestion de la traqueboule */ glutMouseFunc(tbMouseFunc); glutMotionFunc(tbMotionFunc); /* initialisation lumière et materiaux */ initLumiere(); initMatiere(); glClearColor( 1., 1., 1., 0.); /* cache les elements invisibles */ glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); /* boucle d'evenements GLUT */ glutMainLoop(); return 0; }