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?