Pérdidas múltiples por un conjunto de datos desequilibrado con Keras

Mi model:

Construí una red siamesa que toma dos entradas y tiene tres salidas. Entonces, mis funciones de pérdida son:

total loss = alpha( loss1) + alpah( loss2) + (1_alpah) ( loss3)

loss1 yloss2 escategorical cross entropy función de pérdida, para clasificar la identidad de clase de un total de 8 clases. @loss3 essimilarity loss función (pérdida de distancia euclidiana), para verificar si ambos ingresan desde la misma clase o diferentes clases.

Mis preguntas son las siguientes:

Si tengo diferentes pérdidas, y quiero ponderarlas usando la variablealpha cuyo valor depende del número de época. Entonces tengo que establecer el valor pfalpha a través de devolución de llamada. Mi pregunta es posible pasar esta variable alfa que su valor cambió con el número de época (es decir, no escalar) a través de laloss_weights inmodel.complie. La documentación decía:

loss_weights: lista o diccionario opcional que especifica coeficientes escalares (flotantes de Python) para ponderar las contribuciones de pérdida de los diferentes resultados del modelo. El valor de la pérdida que el modelo minimizará será la suma ponderada de todas las pérdidas individuales, ponderada por los coeficientes loss_weights. Si se trata de una lista, se espera que tenga una asignación 1: 1 a las salidas del modelo. Si es un tensor, se espera que asigne nombres de salida (cadenas) a coeficientes escalares.

Ejempl

alpha = K.variable(0., dtype=tf.float32)

def changeAlpha(epoch,logs):
    new_alpha = some_function(epoch)
    K.set_value(alpha, new_alpha)
    return

alphaChanger = LambdaCallback(on_epoch_end=changeAlpha) 

model.compile(loss= [loss1, loss2, loss3], loss_weights = [alpha, alpha, (1-alpha)])

Mi conjunto de datos está desequilibrado, así que quiero usarclass_wights inmodel.fit(). Entonces, para el mismo modelo de tres pérdidas, quiero aplicar laclass weights solo para pérdidas categóricas de entropía cruzada (pérdida 1 y pérdida2), entonces funcionará en ambas pérdidas y excepto en la tercera pérdida si se la paso amodel.fit? Sabiendo que la tercera pérdida espersonalizad función de pérdida

Si quiero clasificar las clases para la red siamesa, ¿mi métrica seríamodel.compile(metrics= ['out1':'accuracy', 'out2':accuracy']])? Pero la precisión final debe ser el promedio de ambos, puedo resolverlo construyendo mi propia métrica personalizada. Pero, de todos modos, ¿hay una suma ponderada de ambas métricas?

Respuestas a la pregunta(0)

Su respuesta a la pregunta