21

Indem wir den unteren und den oberen Blob so einstellen, dass sie gleich sind, können wir Caffe anweisen, "In-Place" -Berechnung durchzuführen, um den Speicherverbrauch zu erhalten.Wann verwenden Sie In-Place-Layer in Caffe?

Momentan weiß ich, dass ich sicher in-Place "BatchNorm", "Scale" und "ReLU" Schichten verwenden kann (bitte lassen Sie mich wissen, wenn ich falsch liege). Während es scheint, einige Probleme für andere Schichten zu haben (this issue scheint ein Beispiel zu sein).

Wann verwenden Sie In-Place-Layer in Caffe?
Wie funktioniert es mit Back-Propagation?

+0

danke für die Prämie. Ich hoffe, es hat die Dinge für dich geklärt. – Shai

+0

@Sha Danke für die Antwort, es hilft sicherlich! – dontloo

Antwort

9

Wie Sie bereits festgestellt haben, funktionieren In-Place-Layer normalerweise nicht "out of the box".
Für einige Schichten ist es ziemlich trivial ("ReLU" und andere Neuronenaktivierungsschichten).
Für andere erfordert es jedoch spezielle Handhabung in Code. Zum Beispiel hat die Implementierung von "PReLU" Schicht spezifischen Cache bottom_memory_ Member-Variable, die Informationen für Backprop benötigt.
Sie können ähnlichen Code für andere Layer sehen, die speziell für if (top[0] == bottom[0]) testen, um zu sehen, ob die Layer in einem "In-Place" -Fall verwendet wird.

Außerdem macht es wenig Sinn, eine Schicht an Ort und Stelle zu haben, für die die Ein- und Ausgabe von verschiedenen Formen sind, so dass Schichten wie "Convolution", "InnerProduct" werden "Pool" nicht als Kandidat in Betracht gezogen für „in-place“ Schichten.

+0

Danke. Wie wäre es mit 'In-Place = True' und' In-Place = False' für die BatchNorm-Ebene? Manchmal sah ich die Papiere 'In-Place = False' für die BatchNorm-Ebene. Haben wir einen Vorteil für diesen Fall? – user8264

+0

@ user8264 Ich bin nicht sehr vertraut mit dem internen von BatchNorm Ebene, so dass ich nicht wirklich darüber kommentieren kann. Manchmal erfordert die Verwendung etwas mehr Rechenaufwand (um Speicherplatz zu sparen) ... Sie müssten wirklich die Person fragen, die 'in_place = False' angegeben hat ... – Shai