2017-08-09 27 views
1

私はカスタムレイヤーを書きましたが、accuracylossの両方を同時に出力したいと思います。これは、次のようにしてcaffeを使用して達成できますか?似Caffeの同じレイヤーからの出力精度と損失

何か:

layer { 
name: "" 
bottom: "" 
top: loss1 
top: loss2 
top: accuracy 
} 

答えて

1

あなたの層のために必要な数の「トップ」のを持つことができます。

まず、レイヤが計算する「トップ」の数を定義する必要があります。これはExactNumBottomBlobs()をオーバーライドすることによって行われます。
LayerSetupReshapeの方法では、新しい「トップ」の数を考慮し、これらの「トップ」もセットアップして再構成する必要があります。

layer { 
    name: "my_new_layer" 
    type: "MyNewLayer" 
    bottom: "x" 
    top: "loss1" 
    top: "loss2" 
    top: "accuracy" 
    loss_weight: 1 
    loss_weight: 1.3 # you might want loss2 to have a bit more impact 
    loss_weight: 0 # accuracy should not affect gradients... 
} 

そして、あなたの層のクラスではなく以上、LossLayer<Dtype>クラスの派生する必要があります:あなたの層は、損失層であるため、あなたはそれぞれの「トップ」のloss_weight値を持っている必要がありますことを

注意抽象Layer<Dtype>クラス。

caffeで新しいレイヤーを実装する方法の詳細については、this pageを参照してください。
"SoftmaxWithLoss"レイヤーにオプションの2番目の「トップ」レイヤーがあることに注意してください。このレイヤーのコードを見て、これがどのように実装されているか確認してください。

関連する問題