KI DIGITALE ELEMENTE

Perceptron mit Lernalgorithmus

Die Ausgangstabelle - das sind auch die Trainingsdaten:


Das Prinzip:


Python - Skript: PerceptronLernen.py

# Stuhlpfarrer Ehrenfried - 2021
# Demo Perceptron - Lernalgorithmus

import matplotlib.pyplot as plt
# Zufallszahlengenerator
from random import choice
# Bibliothek für Berechnungen
from numpy import array, dot, zeros, random

class PerceptronLernen:

# Initialisierung ------
def __init__(self, txt):
print(txt)
# ----------------------

# Training -----------------------------------------------------------------
# Einmaliges Durchlaufen des Trainngs - Datensets - iterations
# Trainings - DataSet ---> trainingSet
# Startgewichte - w
# Fehler: fehler
def training(self, iterations, trainingSet, w):
# Heaviside als Lambda - Funktion
heavisideLambda = lambda x: 0 if x < 0 else 1
fehler = []
gewichte = []
for i in range(iterations):
# Trainingsbeispiel zufällig auswählen
trainingsdaten = choice(trainingSet)
print("Zufällige Trainingsdaten: ", trainingsdaten, "Durchlauf: ", i)
vektorTrainingsDaten = trainingsdaten[0]
print("Vektor Training zufällig: ", vektorTrainingsDaten)
sollWertTrainingsdaten = trainingsdaten[1]
print("Soll Wert aus den Trainingsdaten: ", sollWertTrainingsdaten)
# Output errechnen
istWerterrechnet = heavisideLambda(dot(w, vektorTrainingsDaten))
print("Ist Wert - errechnet: ", istWerterrechnet)
# Fehler berechnen - Differenz zwischen Ist - u. Sollwerten
fehlerAktuell = sollWertTrainingsdaten - istWerterrechnet
print("Fehler - Differenz zwischen Soll und Ist: ", fehler)
# Fehler aufsummieren
fehler.append(fehlerAktuell)
print("Fehler: ", fehler)
# Gewichte aufsummieren
gewichte.append(w)
print("Gewichte: ", gewichte)
# Gewichtsanpassung - das Lernen x_i ist entweder 0 oder 1
w = w + fehlerAktuell * vektorTrainingsDaten
print("Neue Gewichte: ", w)
# Rückgabe: Fehler u. Gewichte
return fehler, gewichte
# ---------------------------------------------------------------------------


# Main ------------------------------------------------------
pl = PerceptronLernen("Klasse: Perceptron - Lernalgorithmus!")
# Wichtige Anfangswerte #####################################
# Trainingsdaten - Set
trainingSet = [
(array([1, 0, 0]), 0),
(array([1, 0, 1]), 1),
(array([1, 1, 0]), 1),
(array([1, 1, 1]), 1),
]
print("Trainingsdaten - Set: ", trainingSet)
# Initialisierung des Zufallsgenerators
# f.d. Wiederholbarkeit der Ergebnisse
random.seed(10) # beliebiger Wert
# 3d Gewichtsarray mit 0 initialisieren
w = zeros(3)
print("Initialisierung Anfangsgewichte: ", w)
# Anzahl der Durchläufe - Erfahrungswert???
iterations = 25
print("Anzahl der Durchläufe: ", iterations)
###############################################################
fehler, gewichte = pl.training(iterations, trainingSet, w)
print("Fehler: ", fehler[iterations - 1])
print("Erlernte Gewichte: ", gewichte[iterations - 1])
gewichteFuerDenEchtbetrieb = gewichte[iterations - 1]
print("Gewichte für den Echtbetrieb: ", gewichteFuerDenEchtbetrieb)

###############################################################
# Plot - um die Lernkurve zu zeigen
# Iterationen u. Soll - Ist (Fehler)
fignr = 1
plt.figure(fignr, figsize=(5, 5))
plt.plot(fehler)
plt.style.use('seaborn-whitegrid')
plt.xlabel('Iteration')
plt.ylabel("Soll - Ist")
plt.show()


KI

Copyright © 2021. All Rights Reserved. Ehrenfried Stuhlpfarrer