lavoro ancora alle nuove formule

This commit is contained in:
2025-02-21 13:59:47 +01:00
parent 828fea5d6a
commit 46cca564f4
4 changed files with 58 additions and 2 deletions

View File

@@ -71,6 +71,7 @@ void main() {
//gradienti è un array bidimensionale, la prima dimensione identifica il layer, la seconda il percettrone nel layer
//gradienti[indice_layer][indice_percettrone]
//Questo vettore identifica i gradienti dei percettroni
double **gradienti = (double**)malloc(sizeof(double*) * NUM_LAYERS);
//Alloco la dimensione per ogni layer
@@ -88,7 +89,27 @@ void main() {
- gradiente dell'errore retropropagato = peso del ne
*/
gradienti[NUM_LAYERS-1][0] = (output_corretto - sigmoidi[NUM_LAYERS-1][0]);
double gradiente_errore = (output_corretto - sigmoidi[NUM_LAYERS-1][0]);
double derivata_sigmoide_out = sigmoidi[NUM_LAYERS-1][0] * (1 - sigmoidi[NUM_LAYERS-1][0]);
gradienti[NUM_LAYERS-1][0] = gradiente_errore * derivata_sigmoide_out;
//Ricorda di partire dal penultimo layer in quanto l'ultimo è già fatto
discesa_gradiente(rete_neurale, sigmoidi, gradienti);
/* A questo punto ho tutti i gradienti dei percettroni, non mi resta che trovare i gradienti dei pesi e correggerli
*/
//Applico la correzione dal penultimo layer andando indietro fino al secondo (il primo si fa diverso)
for(int indice_layer = NUM_LAYERS - 2; indice_layer > 0; indice_layer--) {
//Applico la correzione a tutti i percettroni del layer dal primo a seguire
for(int indice_percettrone = 0; indice_percettrone <= rete_neurale.layers[indice_layer].size; indice_percettrone++) {
correggi_pesi_percettrone();
}
}
//gradienti[NUM_LAYERS-1][0] = (output_corretto - sigmoidi[NUM_LAYERS-1][0]);
errore_totale += gradienti[NUM_LAYERS-1][0];
correggi_layer_interni(&rete_neurale, gradienti, sigmoidi);