【问题标题】:how to convert one-hot vectors to multi-label?如何将单热向量转换为多标签?
【发布时间】:2020-07-01 06:17:21
【问题描述】:

我有一个多分类任务,我得到了类似的 one-hot 类型预测

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

我希望将这个 one-hot 向量转换为标签,如

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

我已经尝试过 tf.argmax,但它不起作用。那我该如何处理呢?

【问题讨论】:

  • 这些不是“one-hot”;这要求在给定行中只有一个值可以等于 1

标签: python python-3.x python-2.7 tensorflow


【解决方案1】:

使用列表推导:

oheList = [[0, 1, 1],
           [0, 1, 0],
           [1, 0, 1]]
[[i for i in range(len(el)) if el[i]==1] for el in oheList]
# [[1, 2], [1], [0, 2]]

【讨论】:

  • 如何用tensorflow实现?
  • 你的意思是你的输出是张量?将其转换为 numpy 然后转换为列表。如果没有您的代码来输出预测,则很难判断,但请尝试 oheList = list(predictionOutput.numpy()) 然后运行列表理解代码
【解决方案2】:

解决问题的另一种方法,

import numpy as np

arr = np.array([[0, 1, 1],
                [0, 1, 0],
                [1, 0, 1]])

result = {}
for r, c in zip(*np.where(arr == 1)):
    result.setdefault(r, []).append(c)

print(result.values())
[[1, 2], [1], [0, 2]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2010-09-13
    • 2011-04-14
    相关资源
    最近更新 更多