2017-08-04 117 views
1

我正在嘗試使用Python實現本文 - https://arxiv.org/abs/1610.02391。爲此,我想獲得相對於最後一個卷積層的特定類輸出的漸變。我遇到了backward()函數的以下用法。[Caffe-CNN]如何獲得輸出的梯度w.r.t.到卷積層?

label = np.zeros((1, 6)) 
label[0, interested_class] = 1 
net.backward(**{net.output[0]: label}) 

假設我的網絡中有六個類。

但是,它將漸變w.r.t給輸入層。

我試圖使用下面的用法,但它沒有給出理想的輸出。

label = np.zeros((1,6)) 
label[0,interested_class] = 1 
net.backward(end=conv, **{net.output[0]:label}) 

準確地說,我想輸出層w.r.t CONV層值的梯度。

任何幫助,高度讚賞!

回答

1

我想通過閱讀this postthis discussion來解決這個問題。這是代碼。

layer_name = 'conv' #Convolutional layer of interest 
class_label= 4 # the class of interest 
label = np.zeros((1,6)) 
label[0,interested_class] = 1  
grads= net.backward(diffs= [layer_name], **{net.outputs[0]:diff}) 
gradients = grads[layer_name] 

希望這會對您有所幫助!

+0

我爲此實現撰寫了一篇博文(http://sandaw89.blogspot.sg/2017/08/gradcam-implementation-in-pycaffe.html)。任何人都可以從那裏找到更多細節。 – Sandareka