Während ich auf den nächsten Kurs von Andrew Ng auf Coursera warte, versuche ich, auf Python einen Klassifikator mit der Softmax-Funktion auf der letzten Ebene zu programmieren, um die verschiedenen Wahrscheinlichkeiten zu haben. Wenn ich jedoch versuche, es für das CIFAR-10-Dataset (Eingabe: (3072, 10000)) zu verwenden, tritt bei der Berechnung der Exponentiale ein Überlauf auf. In der Tat habe ich Zahlen wie 5000, 10000 oder 25000.
Ich habe bereits zwei Dinge ausprobiert:
- subtrahieren Sie eine Konstante in die Matrix, bevor Sie das Exponential berechnen, aber ich habe einen großen Unterschied zwischen den Zahlen, also kann ich das nicht tun.
- Berechnen Sie das Exponential des Logs der Matrix, aber es läuft immer noch über.
Kann mir jemand helfen, dieses Problem zu vermeiden?
Vielen Dank
BEARBEITEN: https://github.com/Kentena/softmax/
Antworten:
Beachten Sie, dass für jede Konstante .
Offensichtlich ist es nicht wahr, dass , aber die normalisierten Versionen sind dieselben. Ihr Problem ist, dass die s zu groß sind, also subtrahieren Sie die gleiche Zahl von allen, bevor Sie den Softmax nehmen. Manchmal setzen die Leute auf das Maximum aller s.exi=exi−m xi m m xi
quelle