From 7a5334b4668471a776b721a212aa696b216f95d9 Mon Sep 17 00:00:00 2001 From: mirimatcode Date: Thu, 23 Jan 2025 13:02:13 +0100 Subject: [PATCH] aggiornato codice singolo percettrone con la sigmoide e la formula nuova del gradiente --- multi_layer.py | 6 +++--- single_layer.py | 27 +++++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/multi_layer.py b/multi_layer.py index 18f056d..8a6bdbf 100644 --- a/multi_layer.py +++ b/multi_layer.py @@ -1,12 +1,12 @@ from percettrone import Percettrone from stampe_video import disegna_funzione, stampa_risultati_multilayer -MAX_EPOCHE = 10000 +MAX_EPOCHE = 100000 x = [(0,0),(0,1),(1,0),(1,1)] # Combinazioni -#output = (0,1,1,0) # XOR Logico +output = (0,1,1,0) # XOR Logico #output = (0,0,0,1) # AND Logico -output = (0,1,1,1) # OR Logico +#output = (0,1,1,1) # OR Logico corrette = 0 soglia_errore_accettabile = 0.001 diff --git a/single_layer.py b/single_layer.py index 2439856..1173ff7 100644 --- a/single_layer.py +++ b/single_layer.py @@ -2,13 +2,16 @@ from percettrone import Percettrone from stampe_video import disegna_funzione, stampa_risultati_single_layer x = [(0,0),(0,1),(1,0),(1,1)] # Combinazioni -#output = (0,0,0,1) # AND Logico -output = (0,1,1,1) # OR Logico +output = (0,0,0,1) # AND Logico +#output = (0,1,1,1) # OR Logico -p = Percettrone() +p = Percettrone(bias=-0.1, lre=0.1) corrette = 0 #Fermo le epoche se termina prima -for i in range(1,100): #Epoche +soglia_errore_accettabile = 0.001 +soglia_funzione_attivazione = 0.5 + +for i in range(1,10000): #Epoche if corrette == 4: print(f"Epoche necessarie: {i-1}") @@ -19,13 +22,25 @@ for i in range(1,100): #Epoche corrette = 0; for j in range(0,4): #Combinazioni - y = p.funzione_gradino(x[j][0], x[j][1]) + y = p.funzione_sigmoide(x[j][0], x[j][1]) + + if y >= soglia_funzione_attivazione: + previsione = 1 + else: + previsione = 0 + + if previsione == output[j]: + corrette += 1 + errore = output[j] - y print("\n") disegna_funzione(p, y, x[j][0], x[j][1], True, errore) if errore != 0: - p.correggi_pesi(x[j][0], x[j][1], errore) + appoggio_w1 = errore * y * (1-y) * p.w1 * x[j][0] + appoggio_w2 = errore * y * (1-y) * p.w1 * x[j][1] + appoggio_bias = errore * y * (1-y) * p.bias + p.correggi_pesi(appoggio_w1, appoggio_w2, appoggio_bias) else: corrette += 1