From 9e9e9923fe528eb14f8ae53018192dfd14eeb265 Mon Sep 17 00:00:00 2001 From: mirimatcode Date: Wed, 22 Jan 2025 19:11:41 +0100 Subject: [PATCH] =?UTF-8?q?sistemato=20graficamente=20i=20codici,=20messo?= =?UTF-8?q?=20le=20funzioni=20stampa=20in=20un=20altro=20file,=20cos=C3=AC?= =?UTF-8?q?=20sembra=20pi=C3=B9=20pulito=20e=20si=20ci=20pu=C3=B2=20ragion?= =?UTF-8?q?are=20meglio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- multi_layer.py | 47 ++++++++--------------------------------------- single_layer.py | 24 ++++++++---------------- stampe_video.py | 25 +++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 55 deletions(-) create mode 100644 stampe_video.py diff --git a/multi_layer.py b/multi_layer.py index e5014c7..90f6808 100644 --- a/multi_layer.py +++ b/multi_layer.py @@ -1,6 +1,6 @@ from percettrone import Percettrone +from stampe_video import disegna_funzione, stampa_risultati_multilayer -# rete neurale x = [(0,0),(0,1),(1,0),(1,1)] # Combinazioni #output = (0,1,1,0) # XOR Logico #output = (0,0,0,1) # AND Logico @@ -14,58 +14,27 @@ pinout = Percettrone(bias=0) pin_est_2 = Percettrone(w1=0.2, w2=4, bias=-1.5) pinout = Percettrone(w1=0.3, w2=2, bias=-1) """ -def stampa_operazione(p, y, x1, x2, isFinal, errore = 0): - if isFinal == 0: - print(f"\tW1: {p.w1}") - print(f"X1: {x1} --------> ") - print(f"\t\t( bias: {p.bias} ) -------> Y: {y}") - print(f"X2: {x2} --------> ") - print(f"\tW2: {p.w2}") - elif isFinal == 1: - print(f"\t\t\t\tW1: {p.w1}") - print(f"\t\t\tX1: {x1} --------> ") - print(f"\t\t\t\t\t( bias: {p.bias} ) -------> Y: {y}") - print(f"\t\t\tX2: {x2} --------> ") - print(f"\t\t\t\tW2: {p.w2}") - else: - print(f"\t\t\t\t\t\tW1: {p.w1}") - print(f"\t\t\t\t\tX1: {x1} --------> ") - print(f"\t\t\t\t\t\t\t( bias: {p.bias} ) -------> Y: {y} ----> errore: {errore}") - print(f"\t\t\t\t\tX2: {x2} --------> ") - print(f"\t\t\t\t\t\tW2: {p.w2}") -def stampa_risultati_multilayer(): - print("Percettrone Esterno 1:") - print(f"\t W1: {pin_est_1.w1}, W2: {pin_est_1.w2}, bias: {pin_est_1.bias}") - print("Percettrone Esterno 2:") - print(f"\t W1: {pin_est_2.w1}, W2: {pin_est_2.w2}, bias: {pin_est_2.bias}") - #print("Percettrone Interno 1:") - #print(f"\t W1: {pin_int_1.w1}, W2: {pin_int_1.w2}, bias: {pin_int_1.bias}") - #print("Percettrone Interno 2:") - #print(f"\t W1: {pin_int_2.w1}, W2: {pin_int_2.w2}, bias: {pin_int_2.bias}") - print("Percettrone OUT:") - print(f"\t W1: {pinout.w1}, W2: {pinout.w2}, bias: {pinout.bias}") - for i in range(1,100000): #Epoche if corrette == 4: print(f"Epoche necessarie: {i-1}") - stampa_risultati_multilayer() + stampa_risultati_multilayer(pin_est_1, pin_est_2, pinout) break - - print(f"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tEPOCA {i}") + corrette = 0; + print(f"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tEPOCA {i}") for j in range(0,4): #Combinazioni - print("\n") y_est_1 = pin_est_1.funzione_gradino(x[j][0], x[j][1]) y_est_2 = pin_est_2.funzione_gradino(x[j][0], x[j][1]) yout = pinout.funzione_gradino(y_est_1, y_est_2) errore = output[j] - yout - stampa_operazione(pin_est_1, y_est_1, x[j][0], x[j][1], 0) - stampa_operazione(pinout, yout, y_est_1, y_est_2, 2, errore) - stampa_operazione(pin_est_2, y_est_2, x[j][0], x[j][1], 0) + print("\n") + disegna_funzione(pin_est_1, y_est_1, x[j][0], x[j][1], False) + disegna_funzione(pinout, yout, y_est_1, y_est_2, True, errore) + disegna_funzione(pin_est_2, y_est_2, x[j][0], x[j][1], False) if errore != 0: pin_est_1.correggi_pesi(x[j][0], x[j][1], errore) diff --git a/single_layer.py b/single_layer.py index 6b535fb..2439856 100644 --- a/single_layer.py +++ b/single_layer.py @@ -1,4 +1,5 @@ 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 @@ -7,32 +8,23 @@ output = (0,1,1,1) # OR Logico p = Percettrone() corrette = 0 #Fermo le epoche se termina prima -def stampa_operazione(p, y, x1, x2): - print("\n") - print(f"\tW1: {p.w1}") - print(f"X1: {x1} --------> ") - print(f"\t\t( bias: {p.bias} ) -------> Y: {y} ----> errore: {errore}") - print(f"X2: {x2} --------> ") - print(f"\tW2: {p.w2}") - -# Singolo percettrone AND, OR -def stampa_risultati_single_layer(): - print("Percettrone:") - print(f"\t W1: {p.w1}, W2: {p.w2}, bias: {p.bias}") - for i in range(1,100): #Epoche + if corrette == 4: print(f"Epoche necessarie: {i-1}") - print(f"\t W1: {p.w1}, W2: {p.w2}, bias: {p.bias}") + stampa_risultati_single_layer(p) break - print(f"\t\t\t\tEPOCA {i}") + print(f"EPOCA {i}") corrette = 0; for j in range(0,4): #Combinazioni y = p.funzione_gradino(x[j][0], x[j][1]) errore = output[j] - y - stampa_operazione(p, y, x[j][0], x[j][1]) + + 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) else: diff --git a/stampe_video.py b/stampe_video.py new file mode 100644 index 0000000..64c649b --- /dev/null +++ b/stampe_video.py @@ -0,0 +1,25 @@ +def disegna_funzione(p, y, x1, x2, isFinal, errore = 0): + if isFinal == False: + print(f"\tW1: {p.w1}") + print(f"X1: {x1} --------> ") + print(f"\t\t( bias: {p.bias} ) -------> Y: {y}") + print(f"X2: {x2} --------> ") + print(f"\tW2: {p.w2}") + else: + print(f"\t\t\t\t\t\tW1: {p.w1}") + print(f"\t\t\t\t\tX1: {x1} --------> ") + print(f"\t\t\t\t\t\t\t( bias: {p.bias} ) -------> Y: {y} ----> errore: {errore}") + print(f"\t\t\t\t\tX2: {x2} --------> ") + print(f"\t\t\t\t\t\tW2: {p.w2}") + +def stampa_risultati_single_layer(p): + print("Percettrone:") + print(f"\t W1: {p.w1}, W2: {p.w2}, bias: {p.bias}") + +def stampa_risultati_multilayer(pin_est_1, pin_est_2, pinout): + print("Percettrone 1:") + print(f"\t W1: {pin_est_1.w1}, W2: {pin_est_1.w2}, bias: {pin_est_1.bias}") + print("Percettrone 2:") + print(f"\t W1: {pin_est_2.w1}, W2: {pin_est_2.w2}, bias: {pin_est_2.bias}") + print("Percettrone OUT:") + print(f"\t W1: {pinout.w1}, W2: {pinout.w2}, bias: {pinout.bias}") \ No newline at end of file