Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [c]ma xke nn riesco a far funz questa rete neurale che dovrebbe sommare 2 numeri?

    prende come input un file di esempio con 15 coppie di numeri e le 15 rispettive somme
    secondo me ho sbagliato qualcosa dal punto di vista del calcolo dei delta da applicare alle varie sinapsi.....HEEEEELP

    #include <stdio.h>
    #include<stdlib.h>
    #include <math.h>
    FILE *addestrare, *sinapsi;
    double e = 2.71828;
    float des;
    float sommainput(int, int);
    float sommaerrori(int);


    struct neurone
    {
    float input;
    float output;
    };

    struct neurone input[2];
    struct neurone hidden[4];
    struct neurone output;


    double collegamentoinputhidden[2][4], collegamentohiddenoutput[4], deltainputhidden[2][4], deltahiddenoutput[4],sommaerroripesati[4];
    void main()
    {

    int i, k;
    for(k=0; k<4; k++)
    {
    collegamentohiddenoutput[k] = 0.5;
    for(i=0; i<2; i++)
    {
    collegamentoinputhidden[i][k] = 0.5;
    }
    }
    double erres,errgl;
    sinapsi = fopen("sinapsi.txt","w");
    while(errgl>0.025)
    {
    errgl = 0;
    int ind = 0;
    addestrare = fopen("esempi.txt","r");
    while(ind < 15)
    {
    ind++;

    fscanf(addestrare,"%g %g %g",&input[0].input, &input[1].input, &des);
    for(k = 0; k<2; k++)
    {
    input[k].output= 1/(1+pow(e, -input[k].input));
    }
    for(k = 0; k<4; k++)
    {
    hidden[k].input = sommainput(1, k);
    hidden[k].output= 1/(1+pow(e, -hidden[k].input));
    }
    output.input = sommainput(2,0);
    output.output = 1/(1+pow(e, -output.input));
    double errin;
    errin = (des - output.output);
    for(k = 0; k<4; k++)
    {
    deltahiddenoutput[k] = 0.3*errin*output.output*(1-output.output)*hidden[k].output;
    collegamentohiddenoutput[k] = collegamentohiddenoutput[k]+deltahiddenoutput[k];
    }

    for(k = 0; k<4; k++)
    {
    sommaerroripesati[k] = sommaerrori(k);
    for(i=0; i<2; i++)
    {
    deltainputhidden[i][k] = 0.3*hidden[k].output*(1-hidden[k].output)*sommaerroripesati[k]*input[i].output;
    collegamentoinputhidden[i][k] = collegamentoinputhidden[i][k] + deltainputhidden[i][k];
    }
    }
    erres= (pow(des - output.output,2))/2;
    errgl = errgl + erres;
    }
    errgl=errgl/15;
    printf("l'errore e %g\n", errgl);
    fclose(addestrare);

    }

    for(k = 0; k<4; k++)
    {
    fprintf(sinapsi, "%g\n", collegamentohiddenoutput[k]);
    for(i = 0; i<2 ;i++)
    fprintf(sinapsi, "%g\n",collegamentoinputhidden[i][k]);
    }

    /* provo con 2 numeri per vedere se funziona*/

    input[0].input= 0.18;
    input[1].input=0.52;
    for(k = 0; k<2; k++)
    {
    input[k].output= 1/(1+pow(e, -input[k].input));
    }
    for(k = 0; k<4; k++)
    {
    hidden[k].input = sommainput(1, k);
    hidden[k].output= 1/(1+pow(e, -hidden[k].input));
    }
    output.input = sommainput(2,0);
    output.output = 1/(1+pow(e, -output.input));
    fprintf(sinapsi, "18+12=%g", output.output*100);
    }



    float sommainput(int level, int numero)
    {
    int i;
    float iput = 0;
    if (level == 1)
    {
    for(i= 0; i<2; i++)
    iput = iput + input[i].output*collegamentoinputhidden[i][numero];
    }
    if(level == 2)
    {
    for(i= 0; i<4; i++)
    iput = iput + hidden[i].output*collegamentohiddenoutput[i];
    }
    return iput;
    }
    float sommaerrori(int numero)
    {

    float erroripesati = 0;
    erroripesati = (des - output.output)*output.output*(1-output.output)*collegamentohiddenoutput[numero];
    return erroripesati;
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    E' impossibile risponderti in questi termini.

    Prima di tutto, inserisci il codice all'interno del tag "CODE", in modo che sia più leggibile, e riporta solo la parte di codice che riguarda l'errore riscontrato, spiegando dettagliatamente il problema, o l'errore, senza costringere chi legge a prendere tutto il codice, a compilarlo e a testarlo autonomamente per capirlo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.