tensorflow将标签矢量操纵为“多个热编码器”

时间:2017-05-10 14:41:14

标签: tensorflow

是否有可能(以一种很好的方式,即)在tensorflow中实现下一个功能:

假设我们有一个密集的标签向量

labels = [0,3,1,2,0]

我需要制作一个“多个热编码器”。意思是,对于每一行,我需要1到标签的索引减去1 所以要求的结果将是

[[0, 0, 0],
 [1, 1, 1],
 [0, 0, 1],
 [0, 1, 1],
 [0, 0, 0]]

感谢

2 个答案:

答案 0 :(得分:3)

您可以使用tf.nn.embeddings_lookup执行此操作,如下所示:

embeddings = tf.constant([[0,0,0], [0,0,1], [0,1,1], [1,1,1]])
labels = [0,3,1,2,0]
encode_tensors = tf.nn.embedding_lookup(embeddings,labels)

sess.run(encode_tensors)的输出:

array([[0, 0, 0],
   [1, 1, 1],
   [0, 0, 1],
   [0, 1, 1],
   [0, 0, 0]], dtype=int32)

希望这有帮助!

答案 1 :(得分:0)

完成:

也可以使用:

In [397]: labels = np.array([1, 2, 0, 3, 0])
In [398]: sess.run(tf.sequence_mask(labels, 3, dtype=tf.int8))
Out[398]: 
array([[1, 0, 0],
   [1, 1, 0],
   [0, 0, 0],
   [1, 1, 1],
   [0, 0, 0]], dtype=int8)

结果矩阵将与我的要求相反