keras 中的一次性编码标签

One-hot encode labels in keras

我有一组来自 CSV 文件标签列的整数 - [1,2,4,3,5,2,..]。 类的个数是516的范围。我想使用下面的代码对它们进行一次性编码。

y = df.iloc[:,10].values
y = tf.keras.utils.to_categorical(y, num_classes = 5)
y

但是这段代码给我一个错误

IndexError: index 5 is out of bounds for axis 1 with size 5

我该如何解决这个问题?

如果使用tf.keras.utils.to_categorical来one-hot标签向量,整数应该从0开始到num_classessource。在你的情况下,你应该做如下

import tensorflow as tf 
import numpy as np 

a = np.array([1,2,4,3,5,2,4,2,1])
y_tf = tf.keras.utils.to_categorical(a-1, num_classes = 5)
y_tf

array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1.],
       [0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 1., 0., 0., 0.],
       [1., 0., 0., 0., 0.]], dtype=float32)

或者,您可以使用 pd.get_dummies

import pandas as pd 
import numpy as np 

a = np.array([1,2,4,3,5,2,4,2,1])
a_pd = pd.get_dummies(a).astype('float32').values 
a_pd

array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1.],
       [0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 1., 0., 0., 0.],
       [1., 0., 0., 0., 0.]], dtype=float32)