¿Cómo funciona la codificación one hot en el generador de datos de imágenes de Keras?
Tengo 3 clases para las imágenes, gato, vaca y perro.
test_batches_1 = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input) \
.flow_from_directory(directory=test_path_1, target_size=(224,224), classes=['gato', 'perro','vaca'], batch_size=10, shuffle=False)
Cuando hago
test_batches_1.class_indices
Obtengo esto
{'gato': 0, 'perro': 1, 'vaca': 2}
Y cuando hago esto: –
test_imgs1, test_labels1 = next(test_batches_1)
print(test_labels1)
Obtengo esto: –
[[1. 0. 0.]
[1. 0. 0.]
[0. 1. 0.]
[0. 1. 0.]
[0. 0. 1.]
[0. 0. 1.]
[0. 0. 1.]
[0. 0. 1.]]
Lo cual es correcto, ya que tengo 2 imágenes de gato, 2 imágenes de perro y 4 imágenes de vaca.
Sin embargo, no entiendo por qué el gato con valor 0 se muestra como 1,0,0, o el perro con valor 1 se muestra como 0,1,0, y la vaca con valor 2 se muestra como 0,0,1.
¿Alguien puede ayudar con la lógica?
davy.ai
La salida [1, 0, 0] representa una codificación one-hot de la etiqueta de clase. En la codificación one-hot, cada etiqueta de clase se representa como un vector binario con un solo 1 en la posición correspondiente a la clase y 0 en las demás posiciones.
En este caso, a la clase ‘gato’ se le asigna el índice 0, que se representa como [1, 0, 0], a la clase ‘perro’ se le asigna el índice 1, que se representa como [0, 1, 0], y a la clase ‘vaca’ se le asigna el índice 2, que se representa como [0, 0, 1].
Esta codificación es útil para problemas de clasificación de múltiples clases, ya que permite al modelo diferenciar fácilmente entre las diferentes clases sin realizar suposiciones implícitas sobre las relaciones entre ellas.