2017-09-06 115 views
0

這個問題如下Does slice or index of chainer.Variable to get item in chainer has backward ability? 考慮一個典型的例子問題:假設我有卷積層+ FC層,我的最後一個FC層輸出向量。因爲在某些情況下我必須切片矢量來計算損失函數,例如,在多標籤分類中,地面真值標籤矢量大多數元素爲0,其中只有少數爲1,在這種情況下,直接使用F .sigmoid_cross_entropy可能導致標籤的不平衡問題,所以我決定使用[0,1](a是由最後FC層chainer.Variable輸出)進行切片的特定元素來計算損失函數。chainer.functions.get_item如何反向傳播?

在這種情況下,如何在最後FC層梯度流(BP),它是如何以更新其權重矩陣??

回答

0

當你寫b = a[index]的可變a和切片index(可能是看中了索引),通過該操作backpropagating套b.grada.grad[index]值,剩下的其他元素a.grad零(因爲a相應的元素不影響損失值)。最後一個FC層的反向傳播然後計算梯度w.r.t.像這個a.grad一樣的權重矩陣和偏向量。

+0

我一個實驗,我轉換MNIST數據集的單個標籤問題多標籤問題,然後使用chainer.Variable切片的方法來控制positve /負= 1/3正如我在提問時表示,然後使用F.sigmoid_cross_entropy 。我發現這種方法列車準確性增加比我直接使用沒有變量切片的F.softmax_cross_entropy慢得多。這是因爲這種方法大多數grad = 0每次迭代,所以訓練緩慢。 – machen

+0

如果W和X形狀是不同的,因此,數據倉庫和DX形狀是不同的,我們怎麼能逐元素由先前層的DW影響的W該上一層的改變頂層的DX乘法。 – machen