Vorweg, ich bin leider absoluter Neuling was dieses Forum und Python/Programmieren im Allgemeinen angeht. Momentan studiere ich Maschinenbau im Master und meine Masterarbeit behandelt die Programmierung eines neuronalen Netzwerks zur Feinpositionierung eines mobilien Roboters. Dafür habe Lernlektüre erhalten, bei der ich nicht weiterkomme und vielleicht auf etwas Hilfe und Erklärung hoffe. Es geht um folgendes Beispiel im Buch:
In einem Szenario ist es gewünscht (="1"), wenn einer von 2 Arbeitnehmern anwesend (="1") ist, quasi eine Oder-Anweisung. Wir haben also einen 3-dimensionalen Input: Bias-Neuron, Anwesenheit Arbeiter 1 und Anwesenheit Arbeiter 2, und somit 4 Inputvektoren X = np.array([[1,0,0],[1,0,1],[1,1,0],[1,1,1]]). Das gewünschte Ergebnis ist y = np.array([0,1,1,1]). Der Programmcode ist folgender:
Was ich hier konkret nicht verstehe ist, wie sie auf das Gewicht w = np.array([-1,1,1]) kommen? Scheinbar haben die es vorher bereits errechnet, oder? Es steht zwar geschrieben: "# Die Gewichte so wählen, dass das OR-Problem gelöst werden kann", aber ich weiß nicht was damit gemeint ist? Ich hätte ja meinen Prof angeschrieben, aber der ist momentan leider nicht ansprechbar.# Heaviside-Funktion
def heaviside( summe ):
.. """ Berechnung der Entscheidung zum Wert summe
.. Input: summe
.. Output: 1, falls summe >= 0,
.. 0 sonst
.. """
.. if summe >= 0:
...... return 1
.. else:
...... return 0
# Perceptron-Berechnung (Forward Path)
.. def perceptron_eval(X,y):
.. """ Perceptron-Berechnung
.. Input: X, Inputvektor
.. y, der gewünschte Output
.. Output: Der Gesamtfehler, d. h. Summe aus dem Betrag der Differenz
.. von errechnetem und gewünschtem Output
.. """
.. # Der Gesamtfehler
.. gesamtfehler = 0;
.. # Die Gewichte so wählen, dass das OR-Problem gelöst werden kann
.. w = np.array([-1,1,1])
.. # Index i und Element x Ermittlung vom Array X
.. for i, x in enumerate(X):
...... # x = Zeile für Zeile verwenden
...... # Inneres Produkt zwischen x und w
...... summe = np.dot(w,x)
...... ergebnis = heaviside(summe)
...... # Fehler
...... fehler = np.abs(ergebnis - y(i))
...... # Gesamtfehl[er
...... gesamtfehler += fehler
...... # Ausgabe
...... print("Fr. Karotte = {}, Hr. Lauch = {}, gewünschtes Ergebnis = {}, errechnetes Ergebnis = {}, Fehler = {}".format(x[1], x[2], y(i), ergebnis, fehler))
.. # Gesamtfehler pro Epoche über ganzen Trainingsdatensatz
.. return gesamtfehler
#------------------------------
# Core Function zum Auswerten des Inputs
gesamtfehler = perceptron_eval(X,y)
print("Gesamtfehler = %1d" % (gesamtfehler))
Vorab vielen Dank für eure Mühe und Zeit..!!
Gruß, Fraenk