我的标签就像
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
我有10个班级。所以为此
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
我应该得到1。但是我的输出像
[[1. 0.]
[0. 1.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]
我对此很陌生,请您解释一下为什么会发生这种情况,以及正确的做法是什么?
您的数据已经是一种热编码格式。 to_categorical将标签编码的数据转换为一键编码格式:示例:
y = [2,4,5]
num_classes = 10
keras.utils.to_categorical([y],10)
#output
#array([[[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]]], dtype=float32)
给定输入,y = 1并且num_classes = 10,它将给出输出[0,1,0,0,0,0,0,0,0,0]从您的问题看来,您似乎想将一热([0,1,0,0,0,0,0,0,0,0])编码转换为原始类标签编码格式。为此,您可以使用np.argmax()如下:
import numpy as np
one_hot_y = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
label_encoded_y = np.argmax(y)
#It will give label_encoded_y = 1
#one more example
one_hot_y = [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0]]
label_encoded_y = np.argmax(one_hot_y,axis=-1)
#it gives label_encoded_y as array([2, 4, 5])