Ein neuronales Netz kann mehrere Ausgaben haben:

Neuronales Netz mit mehreren Ein- und Ausgaben
Neuronales Netz mit mehreren Ein- und Ausgaben

Die Gewichte stellen jetzt eine Matrix dar, daher muss für die Vorhersage nun ein Vektor mit einer Matrix multipliziert werden:

            #toes %win #fans
weights = [ [0.1, 0.1, -0.3], #hurt?
            [0.1, 0.2,  0.0], #win?
            [0.0, 1.3,  0.1]] #sad?


def neural_network(input, weights):
    pred = vect_mat_mul(input,weights)
    return pred

Bildung der gewichteten Summe der Eingaben für alle Ausgaben
Bildung der gewichteten Summe der Eingaben für alle Ausgaben

def w_sum(a,b):
    assert(len(a) == len(b))
    output = 0
    for i in range(len(a)):
        output += (a[i] * b[i])
    return output

def vect_mat_mul(vect,matrix):
    assert(len(vect) == len(matrix))
    output = [0,0,0]
    for i in range(len(vect)):
        output[i] = w_sum(vect,matrix[i])
    return output

def neural_network(input, weights):
    pred = vect_mat_mul(input,weights)
    return pred

# This dataset is the current
# status at the beginning of
# each game for the first 4 games
# in a season.

# toes = current number of toes
# wlrec = current games won (percent)
# nfans = fan count (in millions)

toes =  [8.5, 9.5, 9.9, 9.0]
wlrec = [0.65,0.8, 0.8, 0.9]
nfans = [1.2, 1.3, 0.5, 1.0]

# Input ist the first game of the season.

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

print(pred)

#toes     %win       #fans        prediction
8,5·0,1 + 0,65·0,1 + 1,2·(-0,3) = 0,555 Verletzte
8,5·0,1 + 0,65·0,2 + 1,2·0,0 = 0,98 Sieg
8,5·0,0 + 0,65·1,3 + 1,2·0,1 = 0,965 Trauer

Mit Hilfe von NumPy wird der Code reduziert auf:

import numpy as np

              #toes %win #fans
weights =  np.array([ 
            [0.1, 0.1, -0.3], #hurt?
            [0.1, 0.2,  0.0], #win?
            [0.0, 1.3,  0.1]]).T #sad?   

# .T (transpose) => Spalten und Zeilen vertauschen
# weights = [[ 0.1  0.1  0. ]
#            [ 0.1  0.2  1.3]
#            [-0.3  0.   0.1]]   

def neural_network(input, weights):
    pred = input.dot(weights)
    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 = np.array([toes[0],wlrec[0],nfans[0]])

pred = neural_network(input,weights)
print(pred)

Die NumPy-Methode dot() erkennt, dass der Typ des Parameters nun eine Matrix ist und berechnet in diesem Fall 3 Skalarprodukte, weil die Matrix 3 Spalten hat. Allerdings müssen erst noch die Zeilen und Spalten mit der Methode T() transpositionert (engl. transpose) vertauscht werden, weil die lineare Algebra formal Spaltenvektoren verwendet. Zueinander gehörende Werte müssen in der Matrix also untereinander stehen, bevor dot() angewandt wird:

Matrizenmultiplikation
Matrizenmultiplikation  https://de.wikipedia.org/wiki/Matrizenmultiplikation   (20.09.2022)

Im obigen Code ist A ein Vektor (Matrix mit nur einer Zeile). B ist die Matrix, bei der mit T() Zeilen und Spalten vertauscht wurden:

Vektor-Matrix-Multiplikation
Vektor-Matrix-Multiplikation

Generell gilt bei Matrizenmultiplikation:

  • Die Anzahl der Spalten der 1. Matrix muss gleich der Anzahl der Zeilen der 2. Matrix sein.
  • Die Matrix des Ergebnisses hat die Zeilenanzahl der 1. Matrix und die Spaltenanzahl der 2. Matrix.

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

Last modified: Wednesday, 29 October 2025, 9:29 AM