2017-02-20 4 views
1

ネットワーク内に複数の損失層を定義すると、それらの端からネットワークの始めまでに複数の逆伝播が発生しますか?つまり、彼らはそのように働くのだろうか?Caffeのネットワークで複数の損失を被る可能性はありますか?

私はこのようなものがあるとします。

Layer1{ 
} 
Layer2{ 
} 
... 
Layer_n{ 
} 
Layer_cls1{ 
bottom:layer_n 
top:cls1 
} 
Layer_cls_loss1{ 
type:some_loss 
bottom:cls1 
top:loss1 
} 
Layer_n1{ 
bottom:layer_n 
.. 
} 
Layer_n2{ 
} 
... 
layer_n3{ 
} 
Layer_cls2{ 
bottom:layer_n3 
top:cls2 
} 
Layer_cls_loss2{ 
type:some_loss 
bottom:cls2 
top:loss2 
} 
layer_n4{ 
bottom:layer_n3 
.. 
} 
... 
layer_cls3End{ 
top:cls_end 
bottom:... 
} 
loss{ 
bottom:cls_end 
top:loss: 
type: someloss 
} 

だから、基本的には代わりに、各ネットワークごとに1つの分類/損失を有するので、私たちは同様の間でいくつかを持っていると仮定します。

彼らが働いている場合、私はすべての損失を一緒に加えて、最終的な損失を以前の損失の合計にすることができますか?

答えて

2

Caffeがこれを行います。
さらに、各損失層には、loss_weightパラメータがあります。このパラメータを使用すると、ネット内の他のすべての損失に関するこの特定の損失の影響力を決定できます。
全体的に、caffeによって最小化された損失は、モデル内のすべての損失レイヤーの合計であるの加重値です。

+0

ありがとうございます。いつものように助けてください:) この単純なフォームを脇に置いて、これらの損失を些細な式で累積する必要がある場合、どうすればいいですか?これをコード化しなければならないのですか、それとも通常の/ prototxtの方法で実現できますか? – Breeze

+0

@Hossein "非自明の式"とはどういう意味ですか? – Shai

+0

私は私の答えを見つけたと思います!損失についてもう一つ、heres。 最初の損失がレイヤ5で計算され、2番目の損失がレイヤ10で計算され、最後の損失がレイヤ15で計算されたとします。 これはどうなりますか? フローがレイヤー5に到達するとバックプロップが開始され、レイヤー5から最初のレイヤーにウェイトが更新されます。一方、フォワードプロップはレイヤー10に達するまで次のレイヤーに進み、レイヤー10に達するまで同じことが起こり、これはネットワーク最後の最後の最後の損失と最終的なバックプロップに達するまで続きます。 – Breeze

関連する問題