Confusion à propos de model.train () [duplicate]

Sep 07 2020

Je suis un débutant en pytorch. J'ai vu sur github que certains modèles d'apprentissage en profondeur ont model.train (), et d'autres pas, mais ils peuvent fonctionner normalement. Je veux savoir si model.train () est nécessaire? quel est l'effet?

Réponses

1 hkchengrex Sep 07 2020 at 13:06

trainle mode ou le evalmode n'a d'importance que lorsque vous avez des modules qui se comportent de manière asymétrique (par exemple BatchNorm, Dropout) lors de la formation / des tests. Je tiens à souligner que cela n'affecte pas du tout l'accumulation de gradient. Même avec des modules asymétriques, on peut parfaitement former un modèle en evalmode. Certains le font afin d'économiser de la mémoire lors de la formation en utilisant un modèle ImageNet pré-entraîné.

Si vous n'avez pas de modules asymétriques, cela n'a pas d'importance.

Par défaut, tous les modules commencent par training=True.

2 gspr Sep 07 2020 at 12:25

trainet son homologue fait evalbasculer le modèle entre le mode formation et le mode évaluation.

En mode apprentissage, les gradients suivis sont généralement mis à jour à chaque évaluation du modèle. Ceci est nécessaire pour effectuer la descente de pente utilisée pour l'entraînement. En mode évaluation, ils ne le sont pas.