7 votos

Tratamiento de categorías dispersas en la entropía cruzada binaria

En Keras, estoy usando algo similar al Ejemplo de Keras IMDB para construir un ejemplo de modelado de temas. Sin embargo, a diferencia del ejemplo, que tiene una única clasificación "positiva/negativa", yo tengo más de cien temas que no son mutuamente excluyentes. Cada ejemplo de entrenamiento tiene una salida correspondiente que es un vector de ceros con 3 o 4 unos. ex :[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0 ..... 0]

model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(120, activation='sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          metrics=['accuracy'])

print('Train...')
model.fit(x_train, y_train,
      batch_size=batch_size,
      epochs=15,
      validation_data=(x_test, y_test))
score, acc = model.evaluate(x_test, y_test,
                        batch_size=batch_size)
print('Test score:', score)
print('Test accuracy:', acc)

Por supuesto, el modelo salta rápidamente a un 95-97% de precisión, pero cuando miro el resultado, por supuesto que no predice más que ceros. Está claro que el desequilibrio de clases (cada clase tiene más ejemplos negativos que positivos) está provocando que mis predicciones se queden en 0. ¿Hay alguna forma de ajustar el modelo para que entienda los ejemplos binarios dispersos?

2voto

Watson Puntos 11

Creo que el problema es la función de activación sigmoidea en su capa de salida. La crossentropy binaria calcula la sigmoidea de nuevo como parte del cálculo de la pérdida (ver la descripción en tensor flow: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits ). El simple hecho de cambiar la función de activación en la capa de salida a lineal funcionó en nuestro caso (de estructura similar).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X