lavoro ancora alle nuove formule
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user