La entropía cruzada categórica funciona mal con características codificadas en un solo uso

Aug 18 2020

Estoy luchando con el problema de categorical_crossentropy con datos de codificación one-hot. El problema está en la salida sin cambios del código que se presenta a continuación:

            inputs = keras.Input(shape=(1190,), sparse=True)
            lay_1 = layers.Dense(1190, activation='relu')
            x = lay_1(inputs)
            x = layers.Dense(10, activation='relu')(x)
            out = layers.Dense(1, activation='sigmoid')(x)
            self.model = keras.Model(inputs, out, name='SimpleD2Dense')
            self.model.compile(
                optimizer=keras.optimizers.Adam(),
                loss=tf.losses.categorical_crossentropy,
                metrics=['accuracy']
            )
Epoch 1/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 2/3
1572/1572 - 6s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543
Epoch 3/3
1572/1572 - 7s - loss: 5.7709e-08 - accuracy: 0.5095 - val_loss: 7.0844e-08 - val_accuracy: 0.5543

Pocas palabras sobre datos: 1190 características ( 10 características reales con 119 categorías). Las entradas son filas de un marco de datos con 1190 valores por muestra. La salida es un valor binario 0 o 1.

Intentos realizados antes: binary_crossentropy utilizado con resultados satisfactorios, sin embargo, el número de muestras no es suficiente para obtener buenos resultados en los datos de validación. Intenté usar diferentes activaciones y tamaños de capa.

La pregunta principal es por qué categorical_crossentropy no funciona y cómo usarlo de la manera correcta.

Además, surge una inquietud acerca de la representación de datos: ¿es la forma correcta de usarla en una fila poco común de datos codificados en caliente?

Respuestas

10xAI Aug 18 2020 at 13:52

Para que funcione

  1. Cambiar el recuento de neuronas de salida a 02
  2. Activación de salida a Softmax
  3. Mantenga todos los vectores de salida OHE


Así es como Keras está diseñado internamente. Lo mismo se ha escrito en la página de documentación oficial.

Clase BinaryCrossentropy
Use esta pérdida de entropía cruzada cuando solo hay dos clases de etiquetas (se supone que son 0 y 1). Para cada ejemplo, debería haber un único valor de punto flotante por predicción. En el fragmento siguiente, cada uno de los cuatro ejemplos tiene un solo valor de apuntador flotante, y tanto y_pred como y_true tienen la forma [batch_size]

CategoricalCrossentropy class
La forma de y_pred y y_true es [batch_size, num_classes]

Y sabemos que para mantener la clasificación de varias clases , debe hacer que toda la salida num_class sea relativa entre sí, por lo que usamos softmax

Ref
Página oficial de Keras
Hilo
SE similar Hilo SE similar