70 votes

Comment keras gère-t-il les pertes multiples ?

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 l'entraînement ? La perte2 est-elle uniquement utilisée pour mettre à jour les poids des couches d'où provient y2 ? Ou est-elle utilisée pour toutes les couches du modèle ?

71voto

Fábio Perez Points 1716

De model documentation :

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

...

poids des pertes : Liste ou dictionnaire optionnel spécifiant les coefficients scalaires (floats Python) pour pondérer les contributions de perte des différentes sorties du modèle. La valeur de la perte qui sera minimisée par le modèle sera alors la somme pondérée de toutes les pertes individuelles, pondérées par le coefficient loss_weights coefficients. S'il s'agit d'une liste, on s'attend à ce qu'elle ait une correspondance 1:1 avec les sorties du modèle. S'il s'agit d'un tenseur, il est censé faire correspondre les noms des sorties (chaînes de caractères) aux coefficients scalaires.

Donc, oui, la perte finale sera la "somme pondérée de toutes les pertes individuelles, pondérée par le taux d'erreur de l'entreprise". loss_weights coeffiecients".

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

De plus, qu'est-ce que cela signifie pendant la formation ? La perte2 est-elle uniquement utilisée pour mettre à jour les poids des couches d'où provient y2 ? Ou est-elle utilisée pour toutes les couches du modèle ?

Les poids sont mis à jour par rétropropagation Chaque perte n'affecte donc 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 affectera A, B et D.

6 votes

ATTENTION ! !! de la documentation : 'Si le modèle a plusieurs sorties... La valeur de la perte qui sera minimisée par le modèle sera alors la somme de toutes les pertes individuelles' (comme raisonnable). tensorflow.org/api_docs/python/tf/keras/Model#compile donc la perte finale affectera TOUS

14voto

wishcome Points 51

Pour que les sorties multiples se propagent en retour, je pense que ce n'est pas une réponse complète à ce qui a été mentionné par Fábio Perez.

Aussi, qu'est-ce que cela signifie pendant l'entraînement ? La perte2 est-elle seulement utilisée pour mettre à jour les poids des couches d'où provient y2 ? Ou est-elle utilisée pour toutes les couches du modèle ?

Pour les sorties C et D, Keras calculera une perte finale F_loss=w1 * loss1 + w2 * loss2. Ensuite, la perte finale F_loss est appliquée à la fois à la sortie C et à la sortie D. Enfin, la rétropropagation à partir de la sortie C et de la sortie D utilise la même perte F_loss pour la rétropropagation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X