web-dev-qa-db-fra.com

Comment keras gère-t-il plusieurs pertes?

Donc ma question est, si j'ai quelque chose comme:

model = Model(inputs = input, outputs = [y1,y2])

l1 = 0.5
l2 = 0.3
model.compile(loss = [loss1,loss2], loss_weights = [l1,l2], ...)

Que fait keras avec les pertes pour obtenir la perte finale? Est-ce quelque chose comme:

final_loss = l1*loss1 + l2*loss2

Aussi, qu'est-ce que cela signifie pendant la formation? Est-ce que la perte2 est uniquement utilisée pour mettre à jour les poids sur les couches d'où provient l'y2? Ou est-il utilisé pour toutes les couches du modèle?

Je suis assez confus

23
jfga

De model documentation :

loss : Chaîne (nom de la fonction objectif) ou fonction objectif. Voir les pertes. Si le modèle a plusieurs sorties, vous pouvez utiliser une perte différente sur chaque sortie en transmettant un dictionnaire ou une liste de pertes. La valeur de perte qui sera minimisée par le modèle sera alors la somme de toutes les pertes individuelles.

...

loss_weights : liste ou dictionnaire facultatif spécifiant des coefficients scalaires (flotteurs Python) pour pondérer les contributions à la perte des différentes sorties du modèle. La valeur de perte qui sera minimisée par le modèle sera alors la somme pondérée de toutes les pertes individuelles, pondérée par le loss_weights coefficients. S'il s'agit d'une liste, une correspondance 1: 1 avec les sorties du modèle est attendue. Si un tenseur, il est prévu de mapper les noms de sortie (chaînes) aux coefficients scalaires.

Donc, oui, la perte finale sera la "somme pondérée de toutes les pertes individuelles, pondérée par le loss_weights coeffiecients ".

Vous pouvez vérifier le code où la perte est calculée .

Aussi, qu'est-ce que cela signifie pendant la formation? Est-ce que la perte2 n'est utilisée que pour mettre à jour les poids sur les couches d'où provient l'y2? Ou est-il utilisé pour toutes les couches du modèle?

Les pondérations sont mises à jour par le biais de rétropropagation , chaque perte n'affectera que les couches qui relient l'entrée à la perte.

Par exemple:

                        +----+         
                        > C  |-->loss1 
                       /+----+         
                      /                
                     /                 
    +----+    +----+/                  
 -->| A  |--->| B  |\                  
    +----+    +----+ \                 
                      \                
                       \+----+         
                        > D  |-->loss2 
                        +----+         
  • loss1 affectera A, B et C.
  • loss2 aura une incidence sur A, B et D.
27
Fábio Perez

Pour plusieurs sorties à propager, je pense que ce n'est pas une réponse complète de ce que Fábio Perez a mentionné.

Aussi, qu'est-ce que cela signifie pendant la formation? Est-ce que la perte2 est uniquement utilisée pour mettre à jour les poids sur les couches d'où provient l'y2? Ou est-il utilisé pour toutes les couches du modèle?

Pour les sorties C et D, keras calculera une perte finale F_loss = w1 * loss1 + w2 * loss2. Et puis, la perte finale F_loss est appliquée à la fois à la sortie C et à la sortie D. Enfin, la rétropropagation de la sortie C et de la sortie D utilise le même F_loss pour se propager en arrière.

3
wishcome