Ragazzi sto sbattendo la testa a causa di un problema davvero strano, che non mi so proprio spiegare. Ecco il codice intanto:
Il file training_set.txt è questo:codice:#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #define SET_FILE "training_set.txt" FILE *fp; //Numero elementi int N_IN=2; int N_H=2; int N_O=1; int N_ES=4; //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_to_zero(){ 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(){ int i, j, lines=2*N_ES; for(i=0;i<lines;i++){ if(((int)i+1)/2<((float)i+1)/2){ for(j=0;j<N_IN;j++){ fscanf(fp, "%f\t", &es_in[N_IN*i+j]); printf("%f\t", es_in[N_IN*i+j]); } }else{ for(j=0;j<N_O;j++){ fscanf(fp, "%f\t", &es_out[N_O*i+j]); printf("%f\n", es_out[N_O*i+j]); } } } } int main(){ int i, j; fp=fopen(SET_FILE, "r"); alloca_obj(); read_training_set(); w_to_zero(); output(); fclose(fp); return 0; }
1 2
3
4 5
9
12 1
13
9 83
92
Il problema sta, almeno così mi pare di capire, nella funzione "read_training_set()". Se eseguo il programma, i valori del file testuale training_set.txt vengono letti tutti esattamente, e vengono anche stampati a schermo, così come desidero. Ma appena finisce di stamparli mi salta fuori l'avviso di windows che mi dice che il programma a smesso di funzionare, mi va in crash praticamente. La cosa mi sembra molto strana, e non capisco il motivo. Cioè, i valori letti dal file di testo vengono stampati tutti a schermo, e una volta fatto questo la funzione read_training_set dovrebbe concludere, ma proprio mentre si conclude, mi va in crash il programma. Capisco che il problema sta in questa funzione perché se nel main non ce la metto il programma non va in crash. Vi prego di aiutarmi, sto per prendere a craniate il monitor.

Rispondi quotando