collate_fn für Eingaben variabler Länge
Füllen Sie ungleich lange Samples auf und stapeln Sie sie.
collate_fn für Eingaben variabler Länge ist eine kostenlose Deep Learning Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Deep Learning Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Deep Learning Academy-Kurs umfasst insgesamt 4 Lektionen.
Wenn Samples nicht zusammenpassen
Zum Stapeln in einem Batch müssen alle Samples dieselbe Form haben. Sätze und Audioclips sind jedoch unterschiedlich lang, daher schlägt der standardmäßige collate-Schritt fehl. 🧩
Aufgabe von collate_fn
Der DataLoader sammelt eine Liste von Samples und übergibt sie an collate_fn, das sie zu einem Batch zusammenführt. Standardmäßig stapelt es die Tensoren einfach.
Unregelmäßige Eingaben verhindern das Stapeln
Wenn Sie eine Sequenz der Länge 5 und eine der Länge 8 stapeln, löst PyTorch einen Formfehler aus. Ragged-Längen sind genau der Fall, den ein benutzerdefiniertes collate behandeln muss.
Eigenes collate_fn schreiben
Sie übergeben dem DataLoader eine Funktion als Argument collate_fn. Sie erhält eine Liste von Samples und gibt die Batch-Form zurück, die Ihr Modell erwartet.
loader = DataLoader(ds, batch_size=4, collate_fn=my_collate)Schritt eins: Die Liste aufteilen
Entpacken Sie innerhalb Ihrer Funktion die Liste von Paaren in separate Sequenzen und Labels. Nun können Sie jede Gruppe einzeln behandeln, bevor Sie sie zusammenführen.
def my_collate(batch):
seqs, labels = zip(*batch)Auf die längste Sequenz auffüllen
Der entscheidende Trick bei variablen Längen ist das Padding: Erweitern Sie jede Sequenz mit einem Füllwert auf die Länge der längsten Sequenz, sodass alle schließlich dieselbe Form haben.
pad_sequence erledigt das für Sie
PyTorch enthält pad_sequence, das eine Liste von Tensoren auf dieselbe Länge auffüllt und sie stapelt. Setzen Sie batch_first, damit die Batch-Dimension an erster Stelle steht.
from torch.nn.utils.rnn import pad_sequence
padded = pad_sequence(seqs, batch_first=True)Die tatsächlichen Längen behalten
Padding fügt künstliche Tokens hinzu. Geben Sie deshalb auch die tatsächliche Länge jeder Sequenz zurück. Ihr Modell verwendet diese Werte, um die aufgefüllten Positionen beim Forward-Pass zu ignorieren.
lengths = torch.tensor([len(s) for s in seqs])Die Labels stapeln
Labels haben normalerweise eine feste Größe, daher funktioniert für sie ein normaler Stack. Geben Sie die aufgefüllten Eingaben, die Längen und die gestapelten Labels gemeinsam zurück.
labels = torch.stack(labels)
return padded, lengths, labelsDas Padding maskieren
Später erstellen Sie aus den Längen eine Maske, damit Loss und Attention die aufgefüllten Positionen überspringen. Padding sorgt für eine einheitliche Form, ohne die Gradienten zu verfälschen.
Eine Funktion für jede Form
Mit einem benutzerdefinierten collate_fn verarbeitet derselbe DataLoader Text, Audio und Graphen. Sie bestimmen genau, wie unterschiedlich geformte Samples zu einem einheitlichen Batch werden.
Kurze Überprüfung
Warum benötigen Sequenzen variabler Länge ein benutzerdefiniertes collate_fn?
Zusammenfassung
Ein benutzerdefiniertes collate_fn verwandelt eine Liste unterschiedlich großer Samples in einen Batch, normalerweise indem es Sequenzen auf dieselbe Länge auffüllt und ihre tatsächlichen Größen festhält. 🎉
Lerne Python mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „collate_fn für Eingaben variabler Länge“ kostenlos?
Ja — der vollständige Text von „collate_fn für Eingaben variabler Länge“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Deep Learning Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Deep Learning Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „collate_fn für Eingaben variabler Länge“?
Füllen Sie ungleich lange Samples auf und stapeln Sie sie. Du übst Deep Learning Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Deep Learning Academy zu starten?
Keine Vorkenntnisse erforderlich. Deep Learning Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „collate_fn für Eingaben variabler Länge“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Deep Learning Academy-Lektion Code schreiben und ausführen?
Ja. Jede Deep Learning Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Eine eigene Dataset-Klasse schreiben
- Batching, Shuffling und num_workers
- collate_fn für Eingaben variabler Länge
- Eingaben normalisieren und standardisieren