Ich habe ein konvolutionelles neuronales Netzwerk, dessen Ausgabe ein 4-Kanal-2D-Bild ist. Ich möchte Sigmoid-Aktivierungsfunktion auf die ersten beiden Kanäle anwenden und dann BCECRiterion verwenden, um den Verlust der erzeugten Bilder mit den Grundwahrheiten zu computerisieren. Ich möchte die quadratische Verlustfunktion auf die letzten beiden Kanäle anwenden und schließlich die Gradienten berechnen und Backprop durchführen. Ich möchte auch die Kosten des quadratischen Verlustes für jeden der beiden letzten Kanäle mit einem gewünschten Skalar multiplizieren.Wie kann man verschiedene Kostenfunktionen auf verschiedene Ausgangskanäle eines Faltungsnetzwerkes anwenden?
So sind die Kosten hat die folgende Form:
cost = crossEntropyCh[{1, 2}] + l1 * squaredLossCh_3 + l2 * squaredLossCh_4
Die Art, wie ich darüber denke tun, ist wie folgt:
criterion1 = nn.BCECriterion()
criterion2 = nn.MSECriterion()
error = criterion1:forward(model.output[{{}, {1, 2}}], groundTruth1) + l1 * criterion2:forward(model.output[{{}, {3}}], groundTruth2) + l2 * criterion2:forward(model.output[{{}, {4}}], groundTruth3)
Aber ich glaube nicht, das ist die richtige ist Ich mache drei separate Backprop-Schritte, einen für jede der Kostenbedingungen. Also frage ich mich, kann mir jemand eine bessere Lösung geben, dies in Torch zu tun?
Ich glaube nicht, dass dies der richtige Weg ist. Wenn ich nn.SplitTable (2) zu meiner Ausgabe hinzufüge, gibt es mir eine Tabelle mit 4 Elementen. Jedes Element enthält ein 2D-Bild. Ich möchte jedoch eine Kostenfunktion auf die ersten beiden Elemente der Tabelle anwenden, eine weitere Kostenfunktion auf den dritten Kanal und eine weitere Kostenfunktion auf die letzte. Wie würdest du das umsetzen? – Amir
Lassen Sie uns das Problem etwas einfacher machen: Angenommen, ich habe ein Faltungsdecoder-Netzwerk, das einen Tensor mit der Größe [M x C x H x W] ausgibt, wobei M die Losgröße ist, C die Anzahl der Kanäle (ein Vielfaches von 2) und H = W ist eine ganze Zahl. Ich möchte die Ausgabe in eine Tabelle mit zwei Elementen teilen, wobei jedes Element die Größe [M x C/2 x H x W] hat. Ich denke, es ist möglich, mit nn.SplitTable() fertig zu werden, aber ich habe es nicht richtig gemacht. Nach dem Aufteilen der Tensoren möchte ich zwei Kostenfunktionen anwenden (dieser Teil ist einfach). Kannst du mir ein paar Hinweise geben? – Amir