1

Ich versuche, Kostenfunktion des neuralen Netzes als Teil meiner Programmieraufgabe zu berechnen, diese Funktion verwendend. enter image description hereBerechnung der Kostenfunktion im neuralen Netzwerk Erhalten NaN oder Inf

Wobei K die Anzahl der Etiketten ist. hTheta und y sind Matrizen beider Größe (5000,10), da ich 5000 Trainingsbeispiele und 10 Beschriftungen habe. Ich benutze Oktave und Ich bekomme meine Kostenfunktion als NaN. (Dies wird auch erwartet, da alle Werte von hTheta und Y entweder 0 oder 1 sind, log (0) * 0 wäre nicht definiert).

Aber wie soll ich dann die Kosten berechnen?

Hinweis - hTheta wird vom Feedforward-Algorithmus auf dem neuronalen Netz generiert, und y ist ein Eingabelabel.

Antwort

3

Hier Y i 1 oder 0 sein, aber h i kann nicht 0 oder 1. Dies sein, denn wenn Sie sigmoid logisitic Funktion verwenden, dann 0 ontaining (oder 1) erfordern würde Argument sigmoide Funktion als -Unendlichkeit (oder + unendlich), was nicht möglich ist. Ein möglicher Grund könnte sein, dass Sie die Lernrate zu hoch gewählt haben. Versuchen Sie, die Lernrate zu reduzieren. Das funktionierte für mich, als ich das gleiche Problem hatte.

1

Ein allgemeines Rezept, um zuverlässig zu verhindern, dass dies geschieht, ist entweder Ihr Wert Clip oder einen kleinen Wert epsilon e=10e-6 (oder so ähnlich) hinzufügen, so dass Sie immer log(x+e) mit x+e != 0 haben. Abhängig davon, was genau Sie tun, müssen Sie dann auch clip x zwischen e und 1 sein. Wenn Sie Ihre log s in einen Bruchteil innerhalb einer einzigen log kombinieren, würden Sie wieder e im Nenner hinzufügen, um jede Division zu vermeiden bei Null.

Das Verhindern eines NAN-Verhaltens ist besser als der Versuch, es zu vermeiden. Mit RNNs zum Beispiel können Sie explodierende Gradienten haben - eine Situation, die normalerweise nicht in Ihrer Kontrolle bezüglich der Auswahl Ihrer Hyperparameter ist - was zu x=infinity führt, die dann NANs erzeugt, wenn sie nicht erfasst werden.

Verwandte Themen