使用 numpy 从图像标签进行的一种热编码

One hot encoding from image labels using numpy

我一直在纠结这个热门的编码问题。我确信这是一个简单的过程,但我已经研究这个问题一段时间了,看不出我的错误。

我有一组train_labels的形状(1080,1),共有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。

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

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))

Out[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.]])