首页 > 解决方案 > 不清楚使用 keras.utils 中的 to_categorical

问题描述

我的标签就像

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

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

标签: pythonkerasneural-network

解决方案


您的数据已经采用 one-hot 编码格式。
to_categorical 将标签编码数据转换为 one-hot 编码格式:

示例:

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

推荐阅读