2016-07-29 45 views
3

假設我有以下的張量t爲SOFTMAX函數的輸出:Softmax矩陣到0/1(OneHot)編碼矩陣?

t = tf.constant(value=[[0.2,0.8], [0.6, 0.4]]) 
>> [ 0.2, 0.8] 
    [ 0.6, 0.4] 

現在,我想這個矩陣t轉換成類似於OneHot編碼矩陣的矩陣:

Y.eval() 
>> [ 0, 1] 
    [ 1, 0] 

我熟悉c = tf.argmax(t)這會給我指數t,應該是1.但從cY似乎相當困難。

我已經嘗試過使用c被轉換ttf.SparseTensor,然後使用tf.sparse_tensor_to_dense()得到Y。但是,這種轉換涉及相當多的步驟,而且看起來對於這項任務來說是過分的 - 我甚至沒有完成它,但我相信它可以工作。

是否有任何更適當的/簡單的方法來做這個轉換,我缺少。

我需要這個的原因是因爲我有一個Python自定義OneHot編碼器,我可以喂Ytf.one_hot()不夠廣泛 - 不允許自定義編碼。

相關問題:

回答

3

爲什麼不結合tf.argmax()與tf.one_hot()。

Y = tf.one_hot(tf.argmax(t, dimension = 1), depth = 2)

+0

這太明顯了!真的感到沮喪,因爲沒有看到更快。我認爲你是對的。雖然'tf.one_hot()'是爲了分類,而不是爲索引分配1,但它似乎實際上做了後者(從我的有限測試中)以及指定深度。謝謝! –