2016-07-16 36 views
2

我想強制分類不拿出相同的結果,所有的時間(無監督,所以我沒有目標):分類收斂到只有一個類 - 增加多樣性

max_indices = tf.argmax(result, 1) 
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(result, max_indices, name="cross_entropy_per_example") 
    cross_entropy_mean = tf.reduce_mean(cross_entropy, name="cross_entropy") 

其中:

  • 結果是logits從推理返回
  • max_indices因此跨越所有批次(大小= MATC預測類HSIZE)
  • cross_entropy這裏實施的措施多麼強烈的預測結果,其實是在預測(好像測量簡單的信心)

我然後優化,以儘量減少損失。基本上我希望網絡儘可能強烈地預測一個班級。

很明顯,這會收斂到一些隨機類,然後將該類中的所有內容進行分類。

所以我想要添加一個懲罰來防止批處理中的所有預測都是相同的。我檢查了數學,並提出了Shannon Diversity作爲一個很好的措施,但我無法在tensorflow中實現這一點。任何想法如何做到這一點,無論是多元化的措施或任何替代?

THX

回答

1

一個好的經驗法則是有關於你真的想優化什麼反映喪失功能。如果你想增加多樣性,讓你的損失函數實際衡量多樣性是有意義的。

雖然我敢肯定有做一個比較正確的做法,這裏有一個啓發,可以讓你更接近香農多樣性你提到:

  1. 讓我們做一個假設,即SOFTMAX的輸出實際上對於預測的類而言接近於1,並且對於所有其他類而言接近於零。

  2. 然後,每個類別的比例是softmax在批次中的輸出總和除以批量大小。

  3. 然後逼近香農多樣性喪失的功能將沿着線的東西:

sm = tf.softmax(result) 
proportions = tf.reduce_mean(result, 0) # approximated proportion of each class 
addends = proportions * tf.log(proportions) # multiplied by the log of itself 
loss = tf.reduce_sum(addends) # add them up together to get the loss 

當我想更多地瞭解它,它可能潛在的斷裂,而不是試圖多樣化班取而代之的是做出非常不確定的預測(有效地打破了softmax是預測類的單熱編碼的良好近似的原始假設)。爲了解決這個問題,我將把上面描述的損失和你的問題中原來的損失加起來。我所描述的損失將會優化近似的香農多樣性,而您的原始損失將會阻止softmax變得越來越不確定。

+0

這看起來像一個非常有前途的想法。將嘗試tonite或明天並報告:-) Thx到目前爲止 – friesel

+0

做到了這一招。多謝。雖然改爲tf.reduce_mean(sm,0) – friesel