21

ボトムブッブとトップブロブを同じに設定することで、Caffeにメモリ消費を節約するための「インプレース」計算を行うように指示できます。Caffeでインプレースレイヤーを使用するタイミングは?

現在のところ、私が安全に使用できるのは、"BatchNorm""Scale""ReLU"のレイヤーです(私が間違っている場合は教えてください)。それは他の層のためにいくつかの問題を抱えているようですが(this issue

Caffeでインプレースレイヤーを使用するタイミングは?
バックプロパゲーションではどのように機能しますか?

+0

奨励賞をいただきありがとうございます。それがあなたのために物事をクリアすることを願っています。 – Shai

+0

@Shaiは答えに感謝します、それは確かに役立ちます! – dontloo

答えて

9

よく知られているように、インプレースレイヤーは通常、「そのまま」使用できません。
いくつかの層では、それはかなり些細です("ReLU"および他のニューロン活性化層)。
しかし、他の人にとっては、コード内で特別な処理が必要です。たとえば、"PReLU"レイヤの実装では、バックポイントに必要な情報を格納する特定のキャッシュbottom_memory_メンバ変数があります。
具体的にはif (top[0] == bottom[0])をテストする他のレイヤーにも同様のコードが表示され、レイヤーが「インプレース」の場合に使用されているかどうかを確認できます。

また、入力と出力は、このように、異なる形状のこのよう"Convolution""InnerProduct"として、"Pool"が「インプレース」層の候補として考慮されていない層であるため、インプレース層を有することが意味をなさない。

+0

ありがとうございます。 BatchNormレイヤーの 'in-place = True'と' in-place = False'はどうでしょうか?場合によっては、BatchNormレイヤーのための論文を「インプレース=偽」と見ました。そのような場合には何らかの利益がありますか? – user8264

+0

@ user8264私はBatchNormレイヤの内部についてよく知らないので、実際にコメントすることはできません。ときどき使用すると、(スペースを節約するために)もう少し計算が必要になります。本当に 'in_place = False'を指定した人に尋ねる必要があります... – Shai

関連する問題