Lösungen

Aufgabe: Zufällige Initialisierung

Die angepasste Definition der Funktion create verwendet die Funktion random, um die intern gespeicherte Gewichte und den Bias zu initialisieren.

def create(input_count):
    # last entry is bias
    weights = [None] * (input_count + 1)

    # initialize weights and bias
    for i in range(0, len(weights)):
        weights[i] = random()

    return weights

Aufgabe: Gesamtfehler und Trainingsfortschritt

Die Funktion total_error berechnet den Gesamtfehler eines Perzeptrons für ein Array von Trianingsbeispielen als Summe der Quadrate der Klassifizierungsfehler aller Trainingsbeispiele.

def total_error(weights, data):
    sum = 0.0

    # add squared errors
    for i in range(0, len(data)):
        example = data[i]
        error = output(weights, example["inputs"]) - example["target"]
        sum = sum + error * error

    return sum

Wir können total_error verwenden, um so lange zu trianieren, bis kein Fehler mehr auftritt.

while total_error(neuron, training_data) > 0:
    for i in range(0, len(training_data)):
        example = training_data[i]
        train(neuron, example["inputs"], example["target"])

Bonusaufgabe: Grafische Darstellung eines Perzeptron mit zwei Eingaben

def display2d(weights):
    for row in range(0, 11):
        y = (10 - row) / 10
        for col in range(0, 11):
            x = col / 10
            out = output(weights, [x, y])
            print(" " + str(out) + " ", end="")
        print("")