Ir para conteúdo
Fórum Script Brasil

luisfalm

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre luisfalm

luisfalm's Achievements

0

Reputação

  1. luisfalm

    access violation

    Olá pessoal...ninguém tem uma dica para me dar? Segue o código completo da função que estou chamando. Sempre dá erro na iteração k=49, na linha que coloquei em destaque... float mlp1_teste(int nx, int nz, int ny){ FILE *fin; AnsiString in; double **x, *z, *y, **v, **w; float lambda_z=0.001, lambda_y=0.001; int s_real, s_esperada, i, j, k, acerto=0, ns, *se; registro reg; int ac[6]={0,0,0,0,0,0}; //********* aloca memoria para RNA // abre arquivo de dadosm para teste da RNA in= PATH + FEATURE + "teste.rna"; fin= fopen(in.c_str(),"rb"); fread(&ns,sizeof(int),1,fin); // camada de entrada x= new double *[ns]; for(i=0; i<ns; i++) x= new double [nx]; se= new int [ns]; for(i=0; i<ns; i++){ for(j=0; j<nx; j++) fread(&x[j],sizeof(double),1,fin); fread(&se,sizeof(int),1,fin); }//for i fclose(fin); fin=NULL; // camada oculta z= new double [nz]; // camada de saída y= new double [ny+1]; // peso entre x e z v= new double *[nx+1]; for(i=0; i<(nx+1); i++) v= new double [nz]; // peso entre z e y w= new double *[nz+1]; for(i=0; i<(nz+1); i++) w= new double [ny+1]; // abre arquivo de pesos in= PATH + FEATURE + "pesos.rna"; if((fin= fopen(in.c_str(),"rb"))==NULL) return -1; // peso entre x e z for(i=0; i<(nx+1); i++) for(j=0; j<nz; j++) fread(&v[j],sizeof(double),1,fin); // peso entre z e y for(i=0; i<(nz+1); i++) for(j=0; j<ny; j++) fread(&w[j],sizeof(double),1,fin); // fecha arquivo de pesos fclose(fin); fin=NULL; // teste da rede for(k=0; k<ns; k++){ // saída da RNA if(se[k]!=0) s_esperada=1; else s_esperada=0; // calcula entrada da camada oculta for(j=0; j<nz; j++){ z[j]= v[nx][j]; for(i=0; i<nx; i++) z[j]= z[j] + x[k]*v[j]; }// for j // calcula a saída da camada oculta for(j=0; j<nz; j++) z[j]= 1./(1.+exp(-lambda_z*z[j])); // calcula entrada da camada de saída for(j=0; j<ny; j++){ y[j]= w[nz][j]; for(i=0; i<nz; i++) y[j] = y[j] + z*w[j]; }// for j // calcula a saída da camada de saída for(j=0; j<ny; j++) y[j]= 1./(1.+exp(-lambda_y*y[j])); // saída real da RNA for(j=0; j<ny; j++) if(y[j]>0.5) s_real= 0; else s_real= 1; // verifica se acertou if(s_real==s_esperada){ acerto++; ac[k%ns]++; } }//for k // libera memória for(i=0; i<ns; i++){ delete[] x; x = NULL; } delete[] x; x = NULL; delete[] se; se = NULL; delete[] z; z = NULL; delete[] y; y = NULL; for(i=0; i<(nx+1); i++){ delete[] v; v = NULL; } delete[] v; v = NULL; for(i=0; i<(nz+1); i++){ delete[] w; w = NULL; } delete[] w; w = NULL; return (float)(100*acerto)/ns; }
  2. luisfalm

    access violation

    nz=10 ny=1 são valores pequenos
  3. luisfalm

    access violation

    Oi pessoal Por acaso alguém tem uma dica para isso: estou com erro de "Access Violation" no seguinte código: for(j=0; j<ny; j++){ y[j]= w[nz][j]; for(i=0; i<nz; i++) y[j] = y[j] + z*w[j]; } Estranho que os valores da matriz w são constantes. Esse código está dentro de um loop que teria que executar 150 vezes. Entretanto, sempre na iteração 49 dá o erro de "Access Violation". Quando o fiz um debug do código o valor de w para essa iteração estava "???". Nas iterações anteriores estavam normal. A varável w foi alocada da seguinte maneira: w= new double *[nz+1]; for(i=0; i<(nz+1); i++) w= new double [ny]; Estou usando o Builder C++ 6.0. Por acaso é alguma configuração de ambiente que devo fazer? Qualquer ajuda fico agradecido. abraços Fernando
×
×
  • Criar Novo...