collate_fn pour les entrées de longueur variable
Complétez et empilez des échantillons de longueurs différentes.
collate_fn pour les entrées de longueur variable est une leçon Deep Learning Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Deep Learning Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Deep Learning Academy comprend 4 leçons au total.
Lorsque les échantillons ne correspondent pas
Pour empiler un lot, tous les échantillons doivent avoir la même forme. Or les phrases et les extraits audio ont des longueurs différentes : l'étape collate par défaut échoue donc. 🧩
Rôle de collate_fn
Le DataLoader rassemble une liste d'échantillons et la transmet à collate_fn, qui les fusionne en un seul lot. Par défaut, cette fonction empile simplement les tenseurs.
Les entrées irrégulières empêchent l'empilement
Si vous essayez d'empiler une séquence de longueur 5 et une autre de longueur 8, PyTorch déclenche une erreur de forme. Les longueurs irrégulières sont précisément le cas qu'un regroupement personnalisé doit gérer.
Écrire votre propre collate_fn
Vous transmettez une fonction à l'argument collate_fn du DataLoader. Elle reçoit une liste d'échantillons et renvoie la forme de lot attendue par votre modèle.
loader = DataLoader(ds, batch_size=4, collate_fn=my_collate)Première étape : séparer la liste
Dans votre fonction, décomposez la liste de paires en séquences et étiquettes distinctes. Vous pouvez alors traiter chaque groupe séparément avant de les fusionner.
def my_collate(batch):
seqs, labels = zip(*batch)Compléter jusqu'à la plus longue
L'astuce pour les longueurs variables est le remplissage : étendez chaque séquence jusqu'à la longueur de la plus longue avec une valeur de remplissage, afin qu'elles aient finalement la même forme.
pad_sequence s'en charge pour vous
PyTorch fournit pad_sequence, qui complète une liste de tenseurs jusqu'à une longueur égale et les empile. Définissez batch_first pour que la dimension du lot soit placée en premier.
from torch.nn.utils.rnn import pad_sequence
padded = pad_sequence(seqs, batch_first=True)Ne pas oublier les longueurs réelles
Le remplissage ajoute de faux jetons : renvoyez donc aussi la longueur réelle de chaque séquence. Votre modèle les utilise pour ignorer les positions complétées pendant la propagation vers l'avant.
lengths = torch.tensor([len(s) for s in seqs])Empiler les étiquettes
Les étiquettes ont généralement une taille fixe, donc un stack normal fonctionne pour elles. Renvoyez ensemble les entrées complétées, les longueurs et les étiquettes empilées.
labels = torch.stack(labels)
return padded, lengths, labelsMasquer le remplissage
Vous construirez ensuite un masque à partir des longueurs, afin que la perte et l'attention ignorent les emplacements complétés. Le remplissage uniformise la forme sans fausser les gradients.
Une fonction, toutes les formes
Avec un collate_fn personnalisé, le même DataLoader gère le texte, l'audio et les graphes. Vous contrôlez précisément la manière dont des échantillons de tailles différentes deviennent un lot bien organisé.
Vérification rapide
Pourquoi les séquences de longueur variable ont-elles besoin d'un collate_fn personnalisé ?
Récapitulatif
Un collate_fn personnalisé transforme une liste d'échantillons irréguliers en un seul lot, généralement en complétant les séquences jusqu'à une longueur égale et en conservant leurs tailles réelles. 🎉
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « collate_fn pour les entrées de longueur variable » est-elle gratuite ?
Oui — le texte complet de « collate_fn pour les entrées de longueur variable » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Deep Learning Academy, passe à CoddyKit PRO. Le cours Deep Learning Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « collate_fn pour les entrées de longueur variable » ?
Complétez et empilez des échantillons de longueurs différentes. Tu pratiques Deep Learning Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Deep Learning Academy ?
Aucune expérience préalable n'est requise. Deep Learning Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « collate_fn pour les entrées de longueur variable » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Deep Learning Academy ?
Oui. Chaque leçon Deep Learning Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Écrire une classe de jeu de données personnalisée
- Regroupement, mélange et num_workers
- collate_fn pour les entrées de longueur variable
- Normaliser et standardiser les entrées