Les décalages de la taille des lots dans Pytorch peuvent survenir pour diverses raisons, souvent liées à la façon dont les données sont traitées ou remodelées pendant la formation. Voici quelques exemples:
1. Déliasse due au format cible incorrect:
- Dans Pytorch, lors de l'utilisation de «Crossentropyloss», la cible doit être des indices entiers, pas des vecteurs codés à un hot. Si la cible est codée à un hot, elle peut conduire à une erreur de décalage de la taille du lot car le modèle attend une cible de taille `[batch_size]`, mais reçoit un tenseur de taille `[batch_size, n_classes]`. Par exemple, si le modèle prédit l'une des 24 classes, la cible doit être un tenseur de forme `(32,)` pour une taille de lot de 32, pas `(32, 24) '[1].
2. Problèmes de remodelage:
- Parfois, le remodelage des opérations dans le modèle peut réduire par inadvertance la taille du lot. Par exemple, si un tenseur est remodelé d'une manière que sa première dimension (taille du lot) est modifiée, cela peut conduire à un décalage lors du calcul des fonctions de perte qui s'attendent à ce que les tailles de lot d'entrée et de cible correspondent [5].
3. Comportement de dataloader:
- `DatalOader` de Pytorch peut parfois renvoyer des lots de différentes tailles, surtout si la taille de l'ensemble de données n'est pas un multiple de la taille du lot. Cela se produit lorsque `drop_last = false`, ce qui fait que le dernier lot est plus petit que la taille du lot spécifiée. Bien qu'il ne soit généralement pas un problème de décalage dans un lot, il peut provoquer une confusion s'il n'est pas géré correctement [3].
4. Implémentation de jeu de données ou de modèle personnalisé:
- Les ensembles de données ou les modèles personnalisés peuvent provoquer par inadvertance des décalages de taille par lots si les données ou les sorties du modèle ne sont pas correctement alignées. Par exemple, si un ensemble de données personnalisé renvoie les données dans un format inattendu, ou si un passe avant d'un modèle remodèle les données d'une manière qui modifie la taille du lot, cela peut entraîner des erreurs pendant la formation [7].
5. Exigences de la fonction de perte:
- Différentes fonctions de perte ont des exigences différentes pour les formes d'entrée et cibles. Par exemple, «L1Loss» nécessite que les deux entrées aient la même forme, ce qui peut entraîner des décalages de taille par lots si les formes ne s'alignent pas correctement [2].
[1] https://stackoverflow.com/questions/74785188/pytorch-canding-about-input-and-babel-batch-size-mismatch
[2] https://github.com/lightning-ai/pytorch-lightning/discussions/14812
[3] https://discuss.pytorch.org/t/problem-with-batch-size/114363
[4] https://discuss.pytorch.org/t/test-accuracy-with-ifferent-batch-size/22930
[5] https://discuss.pytorch.org/t/batch-size-mimatch/98354
[6] https://stackoverflow.com/questions/62123795/mismatch-in-batch-size
[7] https://discuss.pytorch.org/t/batch-size-match/187427
[8] https://github.com/lightning-ai/pytorch-lightning/issues/3668