import random import math #Παραδείγματα συνδυασμών εισόδου από το αρχείο δεδομένων μας. # Με τα παραδείγματα αυτά θα τεστάρουμε πόσο σωστά λειτουργεί η πρόβλεψη του νευρωνικού δικτύου. # Σειρά τιμών: "RAIN", "NIGHT", "LIGHTING", "VISIBILITY", "SPEED", "SURFACE" # Target: η αναμενόμενη (σωστή) τιμή για danger score inputs1 = [0.4, 0, 0.5 , 0, 0.06, 1] target1 = 0.37 inputs2 = [0.1, 0, 1, 0, 0.54, 0.57] target2 = 0.47 inputs3 = [1, 1, 0.5, 0, 0.76, 0.71] target3 = 0.84 inputs4 = [0.3, 0, 0, 0.01, 0.27, 0] target4 = 0.14 # Το νευρωνικό δίκτυο θα έχει # 6 inputs # 32 hidden layer1 nodes # 16 hidden layer2 nodes # 1 output node def initialize_weights_randomly(): for i in range(32): bh1.append(random.uniform(-0.5, 0.5)) row = [] for j in range(6): row.append(random.uniform(-0.5, 0.5)) wih1.append(row) for i in range(16): bh2.append(random.uniform(-0.5, 0.5)) wh2o.append(random.uniform(-0.5, 0.5)) row = [] for j in range(32): row.append(random.uniform(-0.5, 0.5)) wh1h2.append(row) def sigmoid(x): return 1 / (1 + math.exp(-x)) def relu(x): if x>0 : return x else : return 0.001*x def calculate_hidden1(): def calculate_hidden2(): def calculate_output(): ######## KΥΡΙΩΣ ΠΡΟΓΡΑΜΜΑ ########## inp = [] # input κόμβοι h1 = [] # hidden layer1 κόμβοι h2 = [] # hidden layer2 κόμβοι wih1 = [] # βάρη inputs προς hidden1 bh1 = [] # biases των hidden1 κόμβων wh1h2 = [] # βάρη hidden1 προς hidden2 bh2 = [] # biases των hidden2 κόμβων wh2o = [] # βάρη hidden2 προς output bo = random.uniform(-0.5, 0.5) # bias του output κόμβου # μεταβλητές για τον υπολογισμό του μέσου τετραγωνικού σφάλματος mse = 0 count = 0 # τυχαίες αρχικές τιμές στα βάρη ......... # τοποθετούμε στους input κομβους την πρώτη λίστα τιμών: for i in range(6): inp.append(inputs1[i]) # ακολουθεί η πρόβλεψη του σκορ κινδύνου από το νευρωνικό δίκτυο: # υπολογίζει hidden1, υπολογίζει hidden2, υπολογίζει output ........ ....... ....... # υπολογίζουμε το λάθος που έχει κάνει error = ........ print("output: ", outp, " target: ", target1, " error: ", error) # προσθέτουμε το λάθος στο Μέσο Τετραγωνικό Λάθος mse = mse + error**2 count = count + 1 # τοποθετούμε στους input κομβους την δεύτερη λίστα τιμών: inp = [] h1 = [] h2 = [] for i in range(6): inp.append(inputs2[i]) # ακολουθεί η πρόβλεψη του σκορ κινδύνου από το νευρωνικό δίκτυο: # υπολογίζει hidden1, υπολογίζει hidden2, υπολογίζει output ....... ...... ...... # υπολογίζουμε το λάθος που έχει κάνει ....... print("output: ", outp, " target: ", target2, " error: ", error) # προσθέτουμε το λάθος στο Μέσο Τετραγωνικό Λάθος mse = mse + error**2 count = count + 1 # τοποθετούμε στους input κομβους την τρίτη λίστα τιμών: inp = [] h1 = [] h2 = [] for i in range(6): inp.append(inputs3[i]) # ακολουθεί η πρόβλεψη του σκορ κινδύνου από το νευρωνικό δίκτυο: # υπολογίζει hidden1, υπολογίζει hidden2, υπολογίζει output ........ ........ ........ # υπολογίζουμε το λάθος που έχει κάνει ...... print("output: ", outp, " target: ", target3, " error: ", error) # προσθέτουμε το λάθος στο Μέσο Τετραγωνικό Λάθος mse = mse + error**2 count = count + 1 # τοποθετούμε στους input κομβους την τέταρτη λίστα τιμών: inp = [] h1 = [] h2 = [] for i in range(6): inp.append(inputs4[i]) # ακολουθεί η πρόβλεψη του σκορ κινδύνου από το νευρωνικό δίκτυο: # υπολογίζει hidden1, υπολογίζει hidden2, υπολογίζει output ....... ....... ....... # υπολογίζουμε το λάθος που έχει κάνει ....... print("output: ", outp, " target: ", target4, " error: ", error) # προσθέτουμε το λάθος στο Μέσο Τετραγωνικό Λάθος mse = mse + error**2 count = count + 1 mse = mse / count print("MSE: ", mse)