2017-10-09 37 views
0

首先我講述你的問題和情況。 我想在chainer中做多標籤分類,我的班級不平衡問題非常嚴重。如何在鏈板中設置損失重量?

在這種情況下,我必須切片矢量來計算損失函數,例如,在多標籤分類中,地面真值標籤矢量大多數元素爲0,其中只有少數爲1,在這種情況下直接使用F .sigmoid_cross_entropy應用所有0/1元素可能會導致訓練不收斂,所以我決定使用[[xx,xxx,...,xxx]]切片(a是上一個FC層的chainer.Variable輸出)切片用於計算損失函數的特定元素。 在這種情況下,由於標籤不平衡可能會導致罕見的分類低分類性能,所以我想在後向傳播期間設置罕見的gt-標籤變量高損失權重,但在後面設置主標籤(在gt中發生太多變量)傳播。

我應該怎麼做?你對關於chainer的多標籤不平衡類問題培訓有何建議?

+0

我找不到sigmoid_cross_entropy的這個特性,但是我可以在'softmax_cross_entropy'找到'class_weight',它正是你想要的。 https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html#chainer.functions.softmax_cross_entropy 我想你也可以參考它的實現來採用你的情況sigmoid_cross_entropy。 https://github.com/chainer/chainer/blob/v3.0.0rc1/chainer/functions/loss/softmax_cross_entropy.py#L249-L253 – corochann

+0

據我所知,softmax_crossentropy不適合多標籤分類,因爲multi -label問題在一個圖像中有多個標籤可能是1,但是使用softmax_crossentropy這意味着只有一個標籤可能是True? – machen

+0

如果softmax_cross_entropy不適合多標籤問題,我有另一個想法來處理它,如何使用F.tile(pred)多次複製特定元素(稀有類別預測元素),並計算BP期間的損失,罕見課程的損失可能會增強? (我不知道F.tile是否可以做到這一點?) – machen

回答

0

可以使用的sigmoid_cross_entropy()無減少模式(通過傳遞reduce='no'),以獲得在每個空間位置處的損耗值和加權平均的average功能。

sigmoid_cross_entropy()首先計算每個空間位置的損失值和批次維度上的每個數據,然後對空間維度和批次維度(取決於normalize選項)進行均值或求和。您可以通過傳遞reduce='no'來禁用縮減部分。如果你想做加權平均,你應該指定它,這樣你可以得到每個位置的損失值,並自己減少它們。

之後,手動進行加權平均的最簡單方法是使用average(),它可以接受指示平均權重的weight參數。它首先使用輸入和weight進行加權求和,然後將結果除以weight的總和。您可以傳遞具有與輸入相同形狀的適當權重數組,並將其與sigmoid_cross_entropy(..., reduce='no')獲得的原始(未減少)損失值一起傳遞給average()。如果weight被適當地縮放(例如,總計達到1),則手動乘以權重陣列並且採用總和如F.sum(score * weight)也是可以的。

+0

非常感謝你,你真的幫了我很多,我認爲可能是哪個體重最合適可能取決於我的很多實驗(因爲深度學習中的黑盒子太黑)。調整參數程序是不舒服的,這意味着我花了很多天觀察哪個參數將損失和準確性變爲最佳。如果chainer有一個可視化和管理員管理工具,這對我們來說很好調整參數。 – machen

0

如果您從事多標籤分類工作,那麼如何使用softmax_crossentropy損失?

softmax_crossentropy可以通過指定class_weight屬性來考慮類別不平衡。 https://github.com/chainer/chainer/blob/v3.0.0rc1/chainer/functions/loss/softmax_cross_entropy.py#L57

https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html

+1

據我所知,softmax_crossentropy不適合多標籤分類,因爲多標籤問題在一個圖像中有多標籤可能是1,但是使用softmax_crossentropy哪個意味着只有一個可能是真的? – machen

+0

如果softmax_cross_entropy不適合多標籤問題,我有另一個想法來處理它,如何使用F.tile(pred)多次複製特定元素(稀有類別預測元素),並計算BP期間的損失,罕見課程的損失可能會增強? (我不知道F.tile是否可以做到這一點?) – machen

+0

你是對的,我很抱歉我很困惑多標籤與多類。 – hmm