使用keras.utils的to_categorical不清楚

问题描述 投票:-1回答:1

我的标签就像

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

我对此很陌生,请您解释一下为什么会发生这种情况,以及正确的做法是什么?

python keras neural-network
1个回答
1
投票

您的数据已经是一种热编码格式。 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])
© www.soinside.com 2019 - 2024. All rights reserved.