2016-05-21 4 views
-1

Ich habe ein einfaches mehrschichtiges Perzeptron aufgebaut, das aus dem MNIST-Datensatz lernen kann. Nach dem Lernen wollte ich eine Eingabe von einem Ausgang erhalten, dh die Feedforward-Funktion umkehren, um ein vom Netzwerk erzeugtes Bild zu erhalten.Wie kann ich sehen, wovon mein einfaches neurales Netzwerk in Python träumt?

Mein ganzer Code ist ähnlich wie https://github.com/mnielsen/neural-networks-and-deep-learning/blob/master/src/network.py

Die Vor Funktion wie folgt aussieht:

def feedforward(self, a): 
    """Return the output of the network if ``a`` is input.""" 
    for b, w in zip(self.biases, self.weights): 
     a = sigmoid(np.dot(w, a)+b) 
    return a 

Wenn ich versuche, es rückgängig zu machen, np.linalg.pinv verwenden, ist es nicht, weil bei einigen funktioniert Punkt muss ich einen Vektor invertieren und die Lösung ist nicht eindeutig, zum Beispiel:

m = np.array([[3, 4]]) 
n = np.array([[1], [2]]) 
o = np.dot(m,n) 
print(np.dot(np.linalg.pinv(m),o)) #not n 

Ich bin dort stecken geblieben. Ich denke, ich brauche einen Hack, um die Ausgabe von np.linalg.pinv kohärenter zu machen, weil es mir nicht einmal gelingt, eine reelle Eingabe zu erhalten, da es Logarithmen im Ausdruck der Umkehrung der Sigmoidfunktion gibt, und Wegen der Werte, die von np.linalg.pinv angegeben werden, habe ich negative Zahlen, was überall zu NaN führt.

Irgendwelche Ideen?

PS: das Endziel ist zufälliges Rauschen in das Netz einzuspeisen und beobachten Zahlen erscheinen, daher der Traum Ausdruck, die ich von http://googleresearch.blogspot.fr/2015/06/inceptionism-going-deeper-into-neural.html

Antwort

3

aufhob Wenn ich richtig verstehe, gibt es keine Notwendigkeit, das Netz umgekehrt in auf jeden Fall, aber Sie sollten ein zufälliges Bild erstellen und es in das Netzwerk einspeisen und sehen, wie es funktioniert. Jetzt ändern Sie das Eingabebild schrittweise so, dass die Ausgabe näher an dem gewünschten Wert ist. Außerdem sollten Sie versuchen, benachbarte Pixel in ihrer Intensität einander ähnlich zu machen.

(Dies ist im Grunde, was der angegebene Link mit anderen Worten angibt.)

+0

Sie haben Recht, ich habe wahrscheinlich Dinge durcheinander gebracht. Ich möchte immer noch das Netzwerk umkehren, um zu sehen, welche Art von Bild es erzeugen kann, aber ich sollte wahrscheinlich löschen und umformulieren, da dieser Titel mir sowieso einen insta-downvote brachte. Ich bin auch interessiert zu wissen, wenn Sie irgendeine Ahnung haben, wie man das Eingabebild auf Weisen ändert, die den Ausgang näher zu dem bringen, was ich es wünschen würde? – hggjvhkkfkhftrjghvgfgj

+1

Ehrlich gesagt, ich bin neu bei ML und versuche, das selbst herauszufinden (: Aber über die Umkehrung des Netzwerks: Ich bin mir nicht ganz sicher, ob das irgendwo hinkommt, auch für ein Netzwerk mit einem Ausgang und zwei Eingängen Sie wissen, dass Sie nach einem 'z = 1 'suchen (nachdem Sie das Sigmoid auf Ihrem eigentlich gewünschten Ausgang invertiert haben.) Mit x = y = 1 als Gewichte und a, b als den Eingängen, nach denen Sie suchen, können Sie unendliche Lösungen haben für das Punktprodukt 'z = x * a + y * b', kannst du nicht? –

+0

OK du hast mich überzeugt, das ist eigentlich unmöglich oder zumindest die falsche Art, Dinge anzuschauen. Ich werde darauf zurückkommen Sobald ich mehr Erfahrung auf dem Gebiet habe, danke für die Antwort. – hggjvhkkfkhftrjghvgfgj

Verwandte Themen