aumentata dimensione rete neurale, verificata immagine mnist con visualizzatore, messe 1000 epoche
This commit is contained in:
BIN
cavalli.bin
BIN
cavalli.bin
Binary file not shown.
Binary file not shown.
@@ -2,20 +2,24 @@
|
||||
#include "percettroni.h"
|
||||
#include "mnist/mnist_manager.h"
|
||||
|
||||
#define NUM_LAYERS 4
|
||||
#define NUM_LAYERS 5
|
||||
|
||||
#define PERCETTRONI_LAYER_0 32
|
||||
#define PERCETTRONI_LAYER_0 128
|
||||
#define INPUT_LAYER_0 N_PIXEL
|
||||
#define PERCETTRONI_LAYER_1 16
|
||||
#define INPUT_LAYER_1 32
|
||||
#define PERCETTRONI_LAYER_2 8
|
||||
#define INPUT_LAYER_2 16
|
||||
#define PERCETTRONI_LAYER_3 1
|
||||
#define INPUT_LAYER_3 8
|
||||
//#define PERCETTRONI_LAYER_4 1
|
||||
//#define INPUT_LAYER_4 10
|
||||
|
||||
#define MAX_EPOCHE 50
|
||||
#define PERCETTRONI_LAYER_1 64
|
||||
#define INPUT_LAYER_1 PERCETTRONI_LAYER_0
|
||||
|
||||
#define PERCETTRONI_LAYER_2 32
|
||||
#define INPUT_LAYER_2 PERCETTRONI_LAYER_1
|
||||
|
||||
#define PERCETTRONI_LAYER_3 16
|
||||
#define INPUT_LAYER_3 PERCETTRONI_LAYER_2
|
||||
|
||||
#define PERCETTRONI_LAYER_4 1
|
||||
#define INPUT_LAYER_4 PERCETTRONI_LAYER_3
|
||||
|
||||
#define MAX_EPOCHE 1000
|
||||
|
||||
//Scelgo quale categoria voglio identificare. La 7 sono i cavalli. La rete mi dirà per ogni immagine se è un cavallo o no
|
||||
#define CATEGORIA 7
|
||||
@@ -103,7 +107,7 @@ void main() {
|
||||
gradienti[indice_layer] = (double*)malloc(sizeof(double) * rete_neurale.layers[indice_layer].size);
|
||||
}
|
||||
|
||||
gradienti[NUM_LAYERS-1][0] = - (output_corretto - sigmoidi[NUM_LAYERS-1][0]);
|
||||
gradienti[NUM_LAYERS-1][0] = (output_corretto - sigmoidi[NUM_LAYERS-1][0]);
|
||||
|
||||
correggi_layer_interni(&rete_neurale, gradienti, sigmoidi);
|
||||
correggi_layer_input(&rete_neurale.layers[0], gradienti, sigmoidi, set.istanze[indice_set].immagine, NUM_LAYERS);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
typedef unsigned char byte;
|
||||
|
||||
|
||||
double LRE = 0.2;
|
||||
double LRE = 0.1;
|
||||
double soglia_sigmoide = 0.5;
|
||||
|
||||
typedef struct {
|
||||
@@ -162,9 +162,9 @@ void correggi_layer_interni(ReteNeurale *rete, double **gradienti, double **sigm
|
||||
for(int indice_percettrone = 0; indice_percettrone < rete->layers[indice_layer].size; indice_percettrone++) {//Numero percettroni
|
||||
|
||||
for(int indice_peso = 0; indice_peso < rete->layers[indice_layer].percettroni[indice_percettrone].size; indice_peso++) {//Numero pesi
|
||||
//gradienti[indice_layer][indice_percettrone] = gradienti[rete->size-1][0] * (sigmoidi[indice_layer][indice_percettrone] * (1 - sigmoidi[indice_layer][indice_percettrone]));
|
||||
//rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[indice_layer][indice_percettrone] * LRE * sigmoidi[indice_layer-1][indice_percettrone]);
|
||||
rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[rete->size-1][0] * LRE * sigmoidi[indice_layer-1][indice_percettrone]);
|
||||
gradienti[indice_layer][indice_percettrone] = gradienti[rete->size-1][0] * (sigmoidi[indice_layer][indice_percettrone] * (1 - sigmoidi[indice_layer][indice_percettrone]));
|
||||
rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[indice_layer][indice_percettrone] * LRE * sigmoidi[indice_layer-1][indice_percettrone]);
|
||||
//rete->layers[indice_layer].percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[rete->size-1][0] * LRE * sigmoidi[indice_layer-1][indice_percettrone]);
|
||||
}
|
||||
rete->layers[indice_layer].percettroni[indice_percettrone].bias += (gradienti[indice_layer][indice_percettrone] * LRE);
|
||||
//printf("bias: %f\n", rete->layers[indice_layer].percettroni[indice_percettrone].bias);
|
||||
@@ -179,9 +179,9 @@ void correggi_layer_input(Layer *layer, double **gradienti, double **sigmoidi, b
|
||||
for(int indice_percettrone = 0; indice_percettrone < layer->size; indice_percettrone++) {//Numero percettroni
|
||||
for(int indice_peso = 0; indice_peso < layer->percettroni->size; indice_peso++) { //Numero pesi
|
||||
|
||||
//gradienti[indice_layer][indice_percettrone] = gradienti[n_layers-1][0] * (sigmoidi[indice_layer][indice_percettrone] * (1 - sigmoidi[indice_layer][indice_percettrone]));
|
||||
//layer->percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[indice_layer][indice_percettrone] * LRE * inputs[indice_peso]);
|
||||
layer->percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[n_layers-1][0] * LRE * inputs[indice_peso]);
|
||||
gradienti[indice_layer][indice_percettrone] = gradienti[n_layers-1][0] * (sigmoidi[indice_layer][indice_percettrone] * (1 - sigmoidi[indice_layer][indice_percettrone]));
|
||||
layer->percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[indice_layer][indice_percettrone] * LRE * inputs[indice_peso]);
|
||||
//layer->percettroni[indice_percettrone].pesi[indice_peso] += (gradienti[n_layers-1][0] * LRE * inputs[indice_peso]);
|
||||
}
|
||||
layer->percettroni[indice_percettrone].bias += (gradienti[n_layers-1][0] * LRE);
|
||||
}
|
||||
|
||||
BIN
rete_cifar10
BIN
rete_cifar10
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
visualizzatore
BIN
visualizzatore
Binary file not shown.
@@ -1,9 +1,14 @@
|
||||
#include <allegro.h>
|
||||
#include <time.h>
|
||||
#include "percettroni.h"
|
||||
#include "mnist/mnist_manager.h"
|
||||
|
||||
#define IMAGE_WIDTH 32
|
||||
#define IMAGE_HEIGHT 32
|
||||
//CIFAR_10
|
||||
/* #define IMAGE_WIDTH 32
|
||||
#define IMAGE_HEIGHT 32 */
|
||||
//MNIST
|
||||
#define IMAGE_WIDTH 28
|
||||
#define IMAGE_HEIGHT 28
|
||||
#define SCALE_FACTOR 2
|
||||
|
||||
//Cavalli
|
||||
@@ -27,7 +32,8 @@ void main()
|
||||
{
|
||||
init_allegro();
|
||||
|
||||
set = get_dataset("cifar-10-batches/test_batch.bin");
|
||||
//get_dataset("cifar-10-batches/test_batch.bin");
|
||||
set = get_dataset("mnist/t10k-images.idx3-ubyte", "mnist/t10k-labels.idx1-ubyte");
|
||||
if (set == NULL) {
|
||||
printf("Errore nel caricare il dataset\n");
|
||||
return;
|
||||
@@ -67,7 +73,8 @@ void init_allegro() {
|
||||
show_mouse(screen);
|
||||
}
|
||||
|
||||
void carica_immagine(int indice_set)
|
||||
//cifar_10
|
||||
/* void carica_immagine(int indice_set)
|
||||
{
|
||||
printf("Immagine indice: %d, categoria: %d, previsione: %d\n", indice_set, set->istanze[indice_set].categoria, prevedi(indice_set));
|
||||
|
||||
@@ -81,6 +88,29 @@ void carica_immagine(int indice_set)
|
||||
putpixel(image, x, y, makecol(r, g, b));
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
//MNIST
|
||||
void carica_immagine(int indice_set)
|
||||
{
|
||||
// Stampa informazioni sull'immagine
|
||||
printf("Immagine indice: %d, categoria: %d\n", indice_set, set->istanze[indice_set].categoria);
|
||||
|
||||
// Itera su ogni pixel dell'immagine
|
||||
for (int y = 0; y < IMAGE_HEIGHT; y++)
|
||||
{
|
||||
for (int x = 0; x < IMAGE_WIDTH; x++)
|
||||
{
|
||||
// Ottieni il valore del pixel (scala di grigi, quindi un solo canale)
|
||||
int gray_value = set->istanze[indice_set].immagine[y * IMAGE_WIDTH + x];
|
||||
|
||||
// Converti il valore in scala di grigi in un colore RGB (r = g = b = gray_value)
|
||||
int color = makecol(gray_value, gray_value, gray_value);
|
||||
|
||||
// Disegna il pixel sull'immagine
|
||||
putpixel(image, x, y, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void disegna_interfaccia()
|
||||
|
||||
Reference in New Issue
Block a user