2016-09-30 45 views
3

在Tensorflow中,我有一個分類器網絡和不平衡的培訓班。由於各種原因,我不能使用重採樣來補償不平衡的數據。因此,我不得不通過其他方式補償失衡,特別是根據每個類別中例子的數量乘以權重。我知道這不是首選方法,但重採樣不是一種選擇。我的訓練損失是tf.nn.softmax_cross_entropy_with_logits(我也可能嘗試tf.nn.sparse_softmax_cross_entropy_with_logits)。所述Tensorflow文檔包括在這些OPS的描述如下:Tensorflow:具有交叉熵的縮放logits

警告:該運算預計未縮放logits,因爲它提高效率上執行logits一個SOFTMAX 內部。不要用softmax的 輸出調用此操作,因爲它會產生不正確的結果。

我的問題:上面只提到了警告縮放通過SOFTMAX完成,還是意味着任何類型的任何分對數比例是被禁止的?如果是後者,那麼我的班級重新平衡logit縮放會導致錯誤的結果?

感謝,

羅恩

+0

好奇你是否找到了適合你的解決方案?我面臨着類似的挑戰,想知道其他人如何設法處理它? –

+0

我試着將每個例子的交叉熵乘以實例的真實類的權重,結果可疑。我已經採取了重新採樣數據。 –

回答

1

的警告只是通知您tf.nn.softmax_cross_entropy_with_logits將輸入logits應用softmax,計算交叉熵之前。這個警告似乎確實可以避免兩次應用softmax,因爲交叉熵結果會非常不同。

這裏是在相關source code評論,關於實現tf.nn.softmax_cross_entropy_with_logits功能:

// NOTE(touts): This duplicates some of the computations in softmax_op 
// because we need the intermediate (logits -max(logits)) values to 
// avoid a log(exp()) in the computation of the loss. 

由於預警狀態,這種實現是提高性能,你不應該把自己的告誡softmax層作爲輸入(在實踐中這有點方便)。

如果強制softmax妨礙您的計算,也許另一個API可能有所幫助:tf.nn.sigmoid_cross_entropy_with_logits或者tf.nn.weighted_cross_entropy_with_logits


的實施似乎並沒有表明,雖然,任何比例將影響結果。我想線性縮放函數應該沒問題,只要它保留了原始的logits重新分區。但是無論在輸入邏輯上應用什麼,在計算交叉熵之前,tf.nn.softmax_cross_entropy_with_logits將應用softmax