2017-07-06 61 views
1

我有一個我自己寫的自定義丟失圖層,該圖層將softmaxsigmoid激活應用於部分底部[0] blob。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是否在其輸出中包含該軸,或者減去提到的切片軸?我的意思是在第一個slice_point中,是否包含軸25或軸24? – harman

+0

@harman你最好檢查日誌以確保。 – Shai

+0

謝謝。會做 – harman

0

所有的中間激活以及網絡的輸入和輸出blob都由網絡類來管理,並且在src/caffe/net.cppNet<Dtype>::Init函數中進行設置。

您不需要在圖層本身內分配/取消分配頂部和底部blob內存。

+0

在這種情況下,我必須發送softmax的底部[0] blob的一部分和sigmoid的底部[0] blob的一部分,我如何在不創建新圖層的情況下完成此操作,併爲這兩個圖層分別設置blob? – harman