2017-07-03 3 views
0

Ich programmiere ein neuronales Netzwerk, um eine Idee zu testen, die ich habe. Das Problem ist, dass ich nicht einmal in der Lage war zu testen, wie gut das Netzwerk funktioniert, weil es immer die exakt gleiche Ausgabe liefert, unabhängig von der Eingabe.Gleicher Ausgang mit verschiedenen Eingängen (neuronales Netzwerk)

Das Netzwerk wird mit dem MNIST-Datensatz trainiert und verfügt über 10 Ausgangsknoten.

Einfach dadurch, wie neuronale Netze Mathematik berechnen, selbst wenn das neuronale Netz nicht konvergiert, würde es immer noch keinen mathematischen Sinn ergeben, dass es die exakt gleiche Ausgabe bis auf die Millionstel Dezimalstelle ausgeben würde.

Immer wenn ich das Netzwerk neu trainiere, hat es natürlich eine neue Ausgabe, wahrscheinlich aufgrund der neuen Menge berechneter Gewichte. Aber diese Ausgabe bleibt dann gleich, unabhängig von der Eingabe.

Hat jemand eine Idee, was das Problem sein könnte?

Edit:

Ich bin eine Sigmoid-Funktion.

Nachdem ich es trainiere und abfrage, sieht meine Ausgabe in etwa so aus.

`array([[ 0.10651613], 
    [ 0.11501053], 
    [ 0.11034159], 
    [ 0.11213908], 
    [ 0.10754446], 
    [ 0.09952921], 
    [ 0.10827382], 
    [ 0.11763775], 
    [ 0.10538466], 
    [ 0.10562691]]) 

Dann werde ich es mit einem anderen Eingang abfragen, und wird die gleiche genaue Ausgabe erhalten.

+1

Es kommt darauf an. Sie haben keine Informationen über die Struktur Ihres Netzwerks, die Aktivierung oder die Ausgabe angegeben. Außerdem werde ich eine Aufnahme im Dunkeln machen, aber du wirst wahrscheinlich einen explodierenden Gradienten sehen. –

+0

Ich verwende eine Sigmoid-Funktion. Nachdem ich es trainiere und abfrage, sieht meine Ausgabe in etwa so aus. Array ([[0,10651613], [0,11501053], [0,11034159], [0,11213908], [0,10754446], [0,09952921], [0,10827382], [0,11763775], [0,10538466], [0.10562691]]) Dann werde ich es mit einem anderen Eingang abfragen, und bekomme die gleiche genaue Ausgabe. –

+0

Ich habe ein paar Ideen bezüglich des Problems und der möglichen Lösung. Aber es ist unmöglich, ohne Code sicher zu sagen. :) –

Antwort

0

Da das Quetschen des Bildes nicht funktioniert, können Sie die Aktivierungsfunktion ändern. Es ist durchaus möglich, dass Ihre bestehende Aktivierung einen Unterlauf verursacht.

Hier ist, was die relu Funktion und ihre Ableitung wie folgt aussieht:

def relu(x): 
    return x * (x > 0) 

def relu_diff(x): 
    return x > 0 

Mit relu, Ihr Netzwerk schneller lernt, so dass Sie die Anzahl der Epochen reduzieren können Sie trainieren auch.

+0

testete die Reloufunktion funktionierte leider immer noch nicht. Es spuckt immer noch genau die gleiche Ausgabe aus. Ich werde diese Seite durchlesen, die ich über explodierende Gradienten verlinkt habe, ich bin immer noch nur ein Teil des Lesevorgangs. Aus irgendeinem Grund denke ich, dass das das Problem sein könnte. –

+0

@RoshawnTerrell Haben Sie ['np.clip'] (https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.clip.html) gesehen? Sie können damit Gradienten verwenden, bevor sie explodieren oder verschwinden. –

+0

Ich werde das versuchen, danke. –