2017-09-06 3 views
0

Diese Frage folgt Does slice or index of chainer.Variable to get item in chainer has backward ability? Betrachten Sie eine typische Beispielfrage: Angenommen, ich habe Faltungsschicht + FC-Schicht, meine letzte FC-Schicht einen Vektor ausgeben.Wie funktioniert chainer.functions.get_item genau zurück?

In einigen Fällen muss ich den Vektor in Scheiben schneiden, um die Verlustfunktion zu berechnen. Zum Beispiel: In Multi-Label-Klassifizierung ist der Ground Truth-Label-Vektor die meisten Elemente 0, nur wenige von ihnen sind 1, In dieser Situation direkt F verwenden .sigmoid_cross_entropy kann zu einem Ungleichgewicht bei der Beschriftung führen. Daher entscheide ich mich, [0, 1] (a ist chainer.Variable output by last FC layer) zu verwenden, um bestimmte Elemente zu zerlegen, um die Verlustfunktion zu berechnen.

In dieser Situation, wie funktioniert die letzte FC-Schicht zum Gradientenfluss (BP), wie aktualisiert sie ihre Gewichtsmatrix?

Antwort

0

Wenn Sie b = a[index] für Variable a und Scheiben schreiben index (vielleicht Lust Indizierung sein), setzt durch diesen Vorgang backpropagating Werte von b.grad-a.grad[index], so dass andere Elemente der a.grad Null (weil die entsprechenden Elemente der a nicht den Verlust beeinflussen Wert). Der Backprop der letzten FC-Schicht berechnet dann die Gradienten w.r.t. die Gewichtsmatrix und den Vorspannungsvektor wie üblich mit dieser a.grad.

+0

Ich mache ein Experiment, ich konvertiere Mnist Dataset Single-Label-Problem zu Multi-Label-Problem, dann verwenden chainer.Variable Slice-Methode, um die Positve/Negativ = 1/3 wie ich in der Frage gesagt, Dann verwenden Sie F.sigmoid_cross_entropy . Ich fand diesen Ansatz Zug Genauigkeitszunahme ist viel langsamer als ich direkt benutze.softmax_cross_entropy ohne variable Scheibe. Ist dies, weil dieser Ansatz am meisten von grad = 0 bei jeder Iteration, so langsam training. – machen

+0

Wenn w und x shape unterschiedlich sind, also dw und dx shape unterschiedlich sind, wie können wir elementweise die dx der obersten Ebene mit der dw der vorherigen Ebene multiplizieren, die sich auf die Änderung von w dieser vorherigen Ebene auswirken. – machen