Softmax-Überlauf [geschlossen]

10

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/

Dlmss
quelle
Tausende haben den CIFAR10-Datensatz und die NNs gespielt. Möglicherweise haben Sie Ihren Code durcheinander gebracht. Kannst du es zeigen?
Tagoma
Ja, ich habe meinen Beitrag aktualisiert und ein Github-Repository veröffentlicht. Mein Code ist jedoch nicht kommentiert: /
Dlmss

Antworten:

16

Beachten Sie, dass für jede Konstante .

exijexj=ememexijexj=eximjexjm
m

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=eximximmxi

Taylor
quelle