Deep Learning Academy · Lektion

collate_fn für Eingaben variabler Länge

Füllen Sie ungleich lange Samples auf und stapeln Sie sie.

Lektion 3 von 413 Schritte

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, labels

Das 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. 🎉

Kostenlos starten

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

  1. Eine eigene Dataset-Klasse schreiben
  2. Batching, Shuffling und num_workers
  3. collate_fn für Eingaben variabler Länge
  4. Eingaben normalisieren und standardisieren
← Zurück zu Deep Learning Academy