versione alfa. Addestramento da 100 epoche effettuato
This commit is contained in:
+14
-7
@@ -3,7 +3,7 @@
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
|
||||
char *file_pesi = "rete_pesi.bin";
|
||||
char *file_pesi = "rete_mnist.bin";
|
||||
|
||||
#include "mnist/mnist_manager.h"
|
||||
|
||||
@@ -21,6 +21,7 @@ typedef unsigned char byte;
|
||||
|
||||
double LRE = 0.1;
|
||||
double soglia_sigmoide = 0.5;
|
||||
#define TOLLERANZA 95
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -430,6 +431,8 @@ double **elabora_sigmoidi(ReteNeurale *rete, Istanza istanza)
|
||||
sigmoidi[0][indice_percettrone] = sigmoide(rete->layers[0].percettroni[indice_percettrone], inputs);
|
||||
}
|
||||
|
||||
free(inputs);
|
||||
|
||||
for (int indice_layer = 1; indice_layer < rete->size; indice_layer++)
|
||||
{
|
||||
sigmoidi[indice_layer] = (double *)malloc(sizeof(double) * rete->layers[indice_layer].size);
|
||||
@@ -511,12 +514,13 @@ char addestra(ReteNeurale *rete_neurale, Dataset set)
|
||||
byte output_corretto = set.istanze[indice_set].classificazione;
|
||||
|
||||
double **sigmoidi = elabora_sigmoidi(rete_neurale, set.istanze[indice_set]);
|
||||
double *sigmoidi_softmax = elabora_sigmoidi(rete_neurale, set.istanze[indice_set])[rete_neurale->size -1];
|
||||
double **gradienti = elabora_gradienti(rete_neurale, output_corretto, sigmoidi);
|
||||
|
||||
int previsto = previsione_softmax(sigmoidi_softmax, rete_neurale->layers[rete_neurale->size -1].size);
|
||||
double *sigmoidi_softmax = (double *)malloc(sizeof(double) * rete_neurale->layers[rete_neurale->size - 1].size);
|
||||
memcpy(sigmoidi_softmax, sigmoidi[rete_neurale->size - 1], rete_neurale->layers[rete_neurale->size - 1].size * sizeof(double));
|
||||
|
||||
double **gradienti = elabora_gradienti(rete_neurale, output_corretto, sigmoidi);
|
||||
|
||||
//printf("Previsione: %d - out: %d\n", previsto, output_corretto);
|
||||
int previsto = previsione_softmax(sigmoidi_softmax, rete_neurale->layers[rete_neurale->size - 1].size);
|
||||
|
||||
if (previsto == output_corretto) {
|
||||
corrette++;
|
||||
@@ -531,11 +535,14 @@ char addestra(ReteNeurale *rete_neurale, Dataset set)
|
||||
for(int i = 0; i < rete_neurale->size; i++)
|
||||
free(sigmoidi[i]);
|
||||
free(sigmoidi);
|
||||
free(sigmoidi_softmax);
|
||||
}
|
||||
|
||||
printf("Risposte corrette: %d%\n", (corrette * 100) / set.size);
|
||||
int percentuale = (int)((corrette * 100) / set.size);
|
||||
|
||||
if(corrette == set.size)
|
||||
printf("Risposte corrette: %d%%\n", percentuale);
|
||||
|
||||
if(percentuale >= TOLLERANZA)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user