Skaliere den Verlustwert nach "Badness" in caffe

Ich möchte den Verlustwert jedes Bildes basierend darauf skalieren, wie nah / fern die "aktuelle Vorhersage" dem "richtigen Etikett" während des Trainings entspricht. Wenn zum Beispiel das richtige Label "cat" ist und das Netzwerk denkt, dass es "dog" ist, sollte die Strafe (der Verlust) geringer sein als der Fall, wenn das Netzwerk denkt, dass es ein "car" ist.

Die Art und Weise, die ich tue, ist wie folgt:

1- Ich habe eine Matrix des Abstands zwischen den Beschriftungen definiert,
2 - Übergebe diese Matrix als einen Boden an das"softmaxWithLoss" Ebene,
3- Multiplizieren Sie jedes Protokoll (prob) mit diesem Wert, um den Verlust entsprechend der Bösartigkeit in @ zu skaliereforward_cpu

Jedoch weiß ich nicht was ich im @ machen sobackward_cpu Teil. Ich verstehe, dass der Farbverlauf (bottom_diff) geändert werden muss, bin mir aber nicht sicher, wie der Skalierungswert hier eingefügt werden soll. Nach der Mathematik muss ich den Farbverlauf anhand der Skala skalieren (da es sich nur um eine Skala handelt), weiß aber nicht wie.

Auch scheint, dass es loosLayer im caffe gibt, das @ genannt wi"InfoGainLoss" das macht einen sehr ähnlichen Job, wenn ich mich nicht irre, aber der rückwärtige Teil dieser Ebene ist ein wenig verwirrend:

bottom_diff[i * dim + j] = scale * infogain_mat[label * dim + j] / prob;

Ich bin mir nicht sicher waruminfogain_mat[] ist dividiert durchprob anstatt zu multiplizieren! Wenn ich eine Identitätsmatrix für @ benutinfogain_mat soll es nicht wie ein Softmax-Verlust vorwärts und rückwärts wirken?

Es wird sehr geschätzt, wenn jemand mir einige Hinweise geben kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage