2017-07-06 20 views
1

私が書いたカスタム損失レイヤーがあります。このレイヤーは、下部[0]ブロブの一部にsoftmaxsigmoidのアクティブ化を適用します。Caffeのレイヤー内のレイヤー

Ex: `bottom[0]` is of shape (say): `[20, 7, 7, 50]` (`NHWC` format) 
I would like to apply `softmax` to `[20, 7, 7, 25]` (first 25 channels) and 
`sigmoid` to `[20, 7, 7, 1]` (just one channel) and the remaining 24 channels are taken in as it is. 

にはどうすれば効果的にこれらの二つのsoftmaxsigmoid層の入力塊にメモリを割り当て、このメモリを解放するのですか?

+1

これで問題が解決しているようです! – harman

答えて

1

代わりの内部データを割り当て、あなたは単に外部"Slice"層を使用し、カフェ「既製」レイヤーを使用して入力ブロブをスライスすることができます

layer { 
    name: "slice" 
    type: "Slice" 
    bottom: "input_to_loss" 
    top: "to_softmax" 
    top: "to_sigmoid" 
    top: "leftovers" 
    slice_param { 
    axis: -1 # slice the last axis 
    slice_point: 25 
    slice_point: 26 
    } 
} 
+0

もう少し疑いがあります。 slice_pointにはその軸がその出力に含まれているのか、または1つのスライス軸から差し引かれていますか?私は最初のslice_pointで、軸25まで、または軸24までを含むのでしょうか? – harman

+0

@ハーマンあなたはよくログを確認してください。 – Shai

+0

ありがとうございます。しましょう – harman

0

ネットワークの入出力ブロブと一緒に、すべての中間アクティベーションはネットクラスによって管理され、Net<Dtype>::Initファンクション(src/caffe/net.cpp)で設定されます。

レイヤー内から上部と下部のブロブメモリを割り当てる/割り当てを解除する必要はありません。

+0

この場合、softmaxのbottom [0] blobの一部とsigmoidのbottom [0] blobの一部を送信する必要があります。新しいレイヤーを作成せずにこれらの2つのレイヤーを分離するにはどうしたらいいですか? – harman

関連する問題