【问题标题】:One-hot encode labels in keraskeras 中的 One-hot 编码标签
【发布时间】:2021-08-05 08:03:34
【问题描述】:

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: tensorflow keras one-hot-encoding


    【解决方案1】:

    如果您使用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)
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2020-07-18
      • 2020-11-04
      • 2020-10-08
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2017-07-27
      • 2020-06-20
      相关资源
      最近更新 更多