【问题标题】:One hot encoding from image labels using numpy使用 numpy 对图像标签进行一种热编码
【发布时间】:2019-11-27 03:32:00
【问题描述】:

我一直对这个热门的编码问题感到困惑。我确信这是一个简单的过程,但我一直在研究这个问题一段时间,看不到我的错误。

我有一组形状为 (1080,1) 的 train_labels,并且有 6 个整数类。我正在尝试使用以下方法将其变成一个热向量:

def convert_to_one_hot(train_labels_conv,classes):
    Y_train = np.eye(classes)[train_labels_conv.reshape(-1)].T
    return Y_train

Y_train = np.arange(6)
print(Y_train)
Y_train_hot = convert_to_one_hot(Y_train, len(Y))
print(Y_train_hot)
As a result I simply get
[0 1 2 3 4 5]
[[1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 1.]]

我不应该为我的训练标签收到整个一个热矩阵吗?我将不胜感激任何正确方向的指示,因为我还不习惯使用 python。

【问题讨论】:

    标签: python numpy one-hot-encoding


    【解决方案1】:

    如果你的标签是字符串,你可以使用这个函数:

    import numpy as np
    
    target = np.array(['dog', 'dog', 'cat', 'cat', 'cat', 'dog', 'dog', 
        'cat', 'cat', 'hamster', 'hamster'])
    
    def one_hot(array):
        unique, inverse = np.unique(array, return_inverse=True)
        onehot = np.eye(unique.shape[0])[inverse]
        return onehot
    
    print(one_hot(target))
    

    输出[9]:
    [[0., 1., 0.],
    [0., 1., 0.],
    [1., 0., 0.],
    [1., 0., 0.],
    [1., 0., 0.],
    [0., 1., 0.],
    [0., 1., 0.],
    [1., 0., 0.],
    [1., 0., 0.],
    [0., 0., 1.],
    [0., 0., 1.]])

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 2016-11-30
      • 2018-04-28
      • 2020-07-02
      • 2018-12-25
      • 2016-10-15
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多