2016-04-24 7 views
-1

Ich versuche, ein einzelnes verstecktes neuronales Netz für MNIST Ziffernerkennung in Python zu implementieren.Neural Net Setup

wie folgt aus:

   h1    
x1       z1 
       h2 
x2       z2 
1    h3 

       1 

Ich bin eine versteckte Schicht von Größe mit 200

Die Anzahl der Funktionen für die Ziffern ist 784.

Die Anzahl der Klassen 10

Jedes Label wird in einen Vektor der Länge 10 umgewandelt, der an der Position der wahren Klasse eine einzige 1 und an anderer Stelle 0 hat.

zwischen dem Eingang und der verborgenen Schicht, ich bin eine 200 von 785 Matrix V.

Matrix V verwenden gehen: die i, j - die j-ten Einheit in der Eingangsschicht Eintrag für das Gewicht Anschluss an die i-te Einheit in der versteckten Ebene. Die i-te Reihe von V stellt das Ensemble von Gewichten dar, die in die i-te verborgene Einheit einspeisen.

Zwischen dem versteckten die die Ausgangsschicht, ich werde eine Matrix W aufzubringen, die 10 von 201

Matrix W: die i, j - Eintrag für das Gewicht der j-ten Einheit in der Verbindungs versteckte Ebene zu der i-ten Einheit in der Ausgabeschicht. Die i-te Reihe von W ist das Ensemble von Gewichten, die in die i-te Ausgabeeinheit einspeisen.

Also fange ich mit der Eingangsmatrix an, die n mit 784 ist. Kann jemand erklären, was zu tun ist? Was muss ich multiplizieren und was/wie multipliziere ich das Ergebnis mit? Ich bin nicht sicher, wie genau diese Matrizen zu multiplizieren sind.

(Lassen Sie uns nur die Aktivierungsfunktionen f() aufrufen.)

Ich bin ein bisschen durch die Dimensionen der Matrizen verwirrt und nicht sicher, wann/wo/wie genau V und W. verwenden

+0

[This] (http://neuralnetworksanddeeplearning.com/) ist eine nette und umfassende Einführung in neuronale Netzwerke und auf die Art, wie sie ein neuronales Netzwerk implementieren, um den MNIST-Datensatz in Python zu klassifizieren. – sietschie

+1

Ich werde das für Sie aufschlüsseln, aber Sie müssen viel mehr über NNs lesen, um zu verstehen, wie es funktioniert (vergessen Sie nicht, Programmierung ist 90% Studieren/Planen und 10% Codierung). Also ist die Eingabe-Dimension n x 785 und die versteckte Dimension ist n x 200. Die Gewichte (w) sind wie folgt definiert: w = Transponieren (Eingabe_Dimme) * versteckte_Dimme. Sie sollten Transponieren verwenden, um Ihre Daten in die richtige Matrixmatrix zu bringen: w = 785 x n * n x 200. Damit erhalten Sie ein w der Größe 785x200, das die gewünschte Ausgabe ist. (Das * bedeutet hier Matrixmultiplikation). – TasosGlrs

Antwort

0

Hier ist ein grundlegender Simulationsschritt eines Feedforward neuronales Netzes ist (portiert von meinem cpp here neuronalen Netzwerk):

def simulate(inputs): 
    currentActivatedValues = inputs 
    for i in range(len(self.weights)): 
     summedValues = _weights[i] * currentActivatedValues + _biases[i] 
     # Perform activation function with the summed values 
     for k in range(len(summedValues)): 
      summedValues[k] = tanh(summedValues[k]); 
     currentActivatedValues = summedValues 
    return currentActivatedValues; 

Das Problem ist im Grunde, dass Sie die Vorspannung in Ihrer ersten Matrix wurden inklusive. Was Sie tun sollten, ist, sie danach zu verarbeiten.

Werfen Sie einen Blick auf diese paper über Feed-Forward-neuronalen Netzen. Es enthält alle Formeln, die Sie benötigen, um eine grundlegende zu erstellen.

Verwandte Themen