09/07/12 12:14
web_pirate
Salve a tutti. Ecco il codice che mi sta facendo uscire pazzo.
Se lo eseguo così per com'è scritto di seguito, tutto funziona. Ma se elimino il printf alla linea 90 il programma arriva ad un certo punto e poi si ferma e devo chiuderlo dal task manager. Non ci capisco niente.
il file training_set.txt è questo:
Se lo eseguo così per com'è scritto di seguito, tutto funziona. Ma se elimino il printf alla linea 90 il programma arriva ad un certo punto e poi si ferma e devo chiuderlo dal task manager. Non ci capisco niente.
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #define SET_FILE "training_set.txt" //Numero elementi int N_IN=2; int N_H=2; int N_O=1; int N_ES=4; int EPOCH; //Elementi float *neur_in; float *w_in_hid; float *neur_hid; float *w_hid_out; float *neur_out; float var_w; //Esempi float *es_in; float *es_out; float sig(float x){ return 1/(1+pow(M_E,-x)); } void alloca_obj(){ neur_in=malloc(N_IN*sizeof(float)); w_in_hid=malloc(N_IN*N_H*sizeof(float)); neur_hid=malloc(N_IN*sizeof(float)); w_hid_out=malloc(N_IN*N_O*sizeof(float)); neur_out=malloc(N_IN*sizeof(float)); es_in=malloc(N_ES*N_IN*sizeof(float)); es_out=malloc(N_ES*N_O*sizeof(float)); } void att_to_zero(){ int i; for(i=0;i<N_H;i++){ neur_hid[i]=0; } for(i=0;i<N_O;i++){ neur_out[i]=0; } } void output(){ int i, j; att_to_zero(); for(i=0;i<N_IN;i++){ for(j=0;j<N_H;j++){ neur_hid[j]+=neur_in[i]*w_in_hid[N_H*i+j]; } } for(i=0;i<N_H;i++){ for(j=0;j<N_O;j++){ neur_out[j]+=neur_hid[i]*w_hid_out[N_O*i+j]; } } } void w_rand(){ int i; for(i=0;i<N_IN*N_H;i++){ w_in_hid[i]=1; } for(i=0;i<N_H*N_O;i++){ w_hid_out[i]=1; } } void read_training_set(FILE *fp){ int i, j; for(i=0;i<N_ES;i++){ for(j=0;j<N_IN;j++){ fscanf(fp, "%f\t", &es_in[N_IN*i+j]); printf("\n%f", es_in[N_IN*i+j]); } for(j=0;j<N_O;j++){ fscanf(fp, "%f\t", &es_out[N_IN*i+j]); printf("\n%f", es_out[N_IN*i+j]); } } } void clean(){ int i; for(i=0;i<N_IN;i++){ neur_in[i]=0; } } void training(){ int i, j; for(i=0;i<N_ES;i++){ clean(); for(j=0;j<N_IN;j++){ neur_in[j]=es_in[N_IN*i+j]; printf("\n%f", neur_in[j]); } } } int main(){ int i, j; FILE *fp; printf("Epoche: "); scanf("%d", &EPOCH); printf("\n"); fp=fopen(SET_FILE, "r"); alloca_obj(); read_training_set(fp); fclose(fp); w_rand(); training(); output(); return 0; }
il file training_set.txt è questo:
1 2 3 4 5 9 12 1 13 9 83 92
Ultima modifica effettuata da web_pirate 09/07/12 12:17
aaa