web-dev-qa-db-fra.com

Model.compile () initialise-t-il tous les poids et biais dans Keras (backend tensorflow)?

Lorsque je commence à former un modèle, aucun modèle n'a été enregistré auparavant. Je peux utiliser model.compile() en toute sécurité. J'ai maintenant enregistré le modèle dans un fichier h5 Pour une formation ultérieure à l'aide de checkpoint.

Dis, je veux former le modèle plus loin. Je suis confus à ce stade: puis-je utiliser model.compile() ici? Et doit-il être placé avant ou après l'instruction model = load_model()? Si model.compile() réinitialise tous les poids et biais, je devrais le placer avant l'instruction model = load_model().

Après avoir découvert quelques discussions, il me semble que model.compile() n’est nécessaire que si aucun modèle n’a déjà été enregistré. Une fois le modèle sauvegardé, il n’est pas nécessaire d’utiliser model.compile(). Est-ce vrai ou faux? Et lorsque je veux prédire à l'aide du modèle formé, dois-je utiliser model.compile() avant de prédire?

37
Preetom Saha Arko

Quand utiliser?

Si vous utilisez compile, cela doit sûrement être après load_model(). Après tout, vous avez besoin d’un modèle pour compiler. (PS: load_model compile automatiquement le modèle avec l'optimiseur enregistré avec le modèle)

Que fait compile?

Compiler définit la fonction de perte, la optimiseur et la métrique. C'est tout.

Cela n’a rien à voir avec les poids et vous pouvez compiler un modèle autant de fois que vous le souhaitez sans causer de problèmes aux poids pré-entraînés.

Vous avez besoin d’un modèle compilé pour train (car la formation utilise la fonction de perte et l’optimiseur). Mais il n'est pas nécessaire de compiler un modèle pour prédire.

Avez-vous besoin d'utiliser compiler plus d'une fois?

Seulement si:

  • Vous voulez changer l'un de ceux-ci:
    • Fonction de perte
    • Taux d'optimisation/d'apprentissage
    • Métrique
  • Vous avez chargé (ou créé) un modèle qui n'est pas encore compilé. Ou bien votre méthode de chargement/sauvegarde n'a pas pris en compte la compilation précédente.

Conséquences d’une nouvelle compilation:

Si vous compilez à nouveau un modèle, vous perdrez le états de l'optimiseur.

Cela signifie que votre formation souffrira un peu au début jusqu'à ce qu'elle ajuste le rythme d'apprentissage, les moments, etc. Mais les poids ne sont absolument pas endommagés (à moins que, bien sûr, votre rythme d'apprentissage initial soit si élevé que le premier entraînement step change sauvagement les poids ajustés).

66
Daniel Möller

N'oubliez pas que vous devez également compiler le modèle après avoir modifié l'indicateur trainable d'un calque, par exemple. quand vous voulez peaufiner un modèle comme celui-ci:

# load VGG model without top classifier

# freeze all the layers (i.e. `trainable = False`)

# add some layers to the top

# compile and train the model on some data

# un-freeze some of the layers of VGG by setting `trainable = True`

# compile the model again  <-- DON'T FORGET THIS STEP!

# train the model on some data
11
today