¿Cómo puedo asignar un class_weight en Keras de una manera simple?

¿Alguien puede decirme cuál es la forma más sencilla de aplicar class_weight en Keras cuando el conjunto de datos no está equilibrado?

Sólo tengo dos clases en mi objective.

Gracias

Usando class_weight del kit sklearn.

También estoy usando este método para lidiar con los datos de desequilibrio

from sklearn.utils import class_weight class_weight = class_weight.compute_class_weight('balanced' ,np.unique(Y_train) ,Y_train) 

entonces model.fit

 Classifier.fit(train_X,train_Y,batch_size = 100, epochs = 10 ,validation_data= (test_X,test_Y),class_weight = class_weight ) 

El parámetro class_weight de la función fit() es un diccionario que asigna clases a un valor de peso.

Digamos que tiene 500 muestras de clase 0 y 1500 muestras de clase 1 de las que alimenta en class_weight = {0: 3, 1: 1}. Eso le da a la clase 0 tres veces el peso de la clase 1.

train_generator.classes le da los nombres de clase adecuados para su ponderación.

Si desea calcular esto mediante progtwigción, puede usar scikit-learn´s sklearn.utils.compute_class_weight () .

La función analiza la distribución de tags y produce ponderaciones para penalizar igualmente a las clases con una representación insuficiente o excesiva en el conjunto de entrenamiento.

Vea también este útil hilo aquí: https://github.com/fchollet/keras/issues/1875

Y este hilo también podría ser de ayuda: ¿Es posible inferir automáticamente el class_weight de flow_from_directory en Keras?

¿Está preguntando sobre la ponderación correcta para aplicar o cómo hacerlo en el código? El código es simple:

 class_weights = {} for i in range(2): class_weights[i] = your_weight 

y luego pasa el argumento class_weight=class_weights en model.fit .

La ponderación correcta a utilizar sería algún tipo de frecuencia inversa; También puedes hacer un poco de prueba y error.

1- Defina un diccionario con sus tags y sus pesos asociados.

 class_weight = {0: 0.1, 1: 1., 2: 2.} 

2- Alimentar el diccionario como un parámetro:

 model.fit(X_train, Y_train, batch_size = 100, epochs = 10, class_weight=class_weight)