Es wird im Folgenden versucht, eine Vorhersage über die Siegchance einer Fußballmannschaft zu machen.

Eingabedaten sind dabei:

Leeres künstliches neuronales Netz mit mehreren Eingaben
Leeres künstliches neuronales Netz mit mehreren Eingaben

weights = [0.1, 0.2, 0] 
    
def neural_network(input, weights):
    pred = w_sum(input,weights)
    return pred


Einfügen eines Datenpunkts
Einfügen eines Datenpunkts


# Datenmenge repräsentiert den aktuellen Status am Anfang
# der ersten 4 Spiele einer Saison:

toes =  [8.5, 9.5, 9.9, 9.0]  # aktuelle durchschnittliche Anzahl der Zehen pro Spieler
wlrec = [0.65, 0.8, 0.8, 0.9] # bislang gewonnene Spiele in %
nfans = [1.2, 1.3, 0.5, 1.0]  # Zahl der Fans in Millionen

input = [toes[0],wlrec[0],nfans[0]]  # 1. Spiel der Saison
pred = neural_network(input,weights) # Vorhersage (engl. prediction)


Bildung der gewichteten Summe
Bildung der gewichteten Summe

def w_sum(a,b):
    assert(len(a) == len(b)) # Exception, falls Listen nicht gleich lang sind
    output = 0
    for i in range(len(a)):
        output += (a[i] * b[i])
    return output


Eingaben   Gewichte   lokale Vorhersage
  (8.5   ·   0.1)   =       0.85          (toes)
  (0.65  ·   0.2)   =    +  0.13          (wlrec)
  (1.2   ·   0.0)   =    +  0.0           (fans)
endgültige Vorhersage    =  0.98
input = [toes[0],wlrec[0],nfans[0]]  # Eingaben des 1. Spiels
pred = neural_network(input,weights) # Vorhersage

print(pred) 


Dabei repräsentieren die Variablen input die Information und weight das Wissen.

Vektorrechnung

Die Variablen input  und weight sind jeweils Listen, die Zahlen enthalten und sind damit sogenannte Vektoren:

input = [toes[0], wlrec[0], nfans[0]] = [8.5, 6.5, 1.2]
weights = [0.1, 0.2, 0]

Die gewichtete Summe der Eingaben des obigen neuronalen Netzes

8.5 · 0.1  +  0.65 · 0.2  +  1.2 · 0.0  =  0.98
entspricht dem sogenannten Skalarprodukt zweier Vektoren.

NumPy

Für Vektorrechnung steht die Python-Bibliothek NiumPy (Numerical Python) zur Verfügung. Python-Listen werden in sehr viel effizientere NumPy-Array ersetzt. U.a. steht die Berechnung des Skalarprodukts durch die Methode dot() zur Verfügung. Die selbstprogrammierte Definition von w_sum(a,b) wird damit ersetzt:

import numpy as np
weights = np.array([0.1, 0.2, 0])
def neural_network(input, weights):
    pred = input.dot(weights)  # replaces w_sum(a,b)
    return pred
    
toes =  np.array([8.5, 9.5, 9.9, 9.0])
wlrec = np.array([0.65, 0.8, 0.8, 0.9])
nfans = np.array([1.2, 1.3, 0.5, 1.0])

# Input is the first game of the season.

input = np.array([toes[0],wlrec[0],nfans[0]])
pred = neural_network(input,weights)

print(pred)


Quellen:

Trask, Andrew W. (2020): Neuronale Netze und Deep Learning kapieren. Der einfache Praxiseinstieg mit Beispielen in Python. (1. Aufl.). mitp-Verlag. 

https://github.com/iamtrask/Grokking-Deep-Learning/blob/master/Chapter3%20-%20%20Forward%20Propagation%20-%20Intro%20to%20Neural%20Prediction.ipynb

https://www.grund-wissen.de/mathematik/lineare-algebra-und-analytische-geometrie/vektoren.html

Last modified: Thursday, 15 September 2022, 7:52 PM