2016-07-29 66 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,但它似乎实际上做了后者(从我的有限测试中)以及指定深度。谢谢! –