collate_fn для входных данных переменной длины
Дополните выравниванием и объедините образцы разной длины
«collate_fn для входных данных переменной длины» — бесплатный урок Deep Learning Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Deep Learning Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Deep Learning Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
When Samples Don't Match
Stacking into a batch needs every sample the same shape. But sentences and audio clips have different lengths, so the default collate step fails. 🧩
What collate_fn Does
The DataLoader gathers a list of samples and passes them to collate_fn, which merges them into one batch. By default it simply stacks tensors.
Ragged Inputs Break Stacking
Try to stack a length-5 and a length-8 sequence and PyTorch raises a shape error. Ragged lengths are exactly the case a custom collate must handle.
Write Your Own collate_fn
You pass a function to the DataLoader's collate_fn argument. It receives a list of samples and returns whatever batch shape your model expects.
loader = DataLoader(ds, batch_size=4, collate_fn=my_collate)Step One: Split the List
Inside your function, unzip the list of pairs into separate sequences and labels. Now you can treat each group on its own before merging.
def my_collate(batch):
seqs, labels = zip(*batch)Pad to the Longest
The trick for variable lengths is padding: extend every sequence to the longest one with a filler value, so they finally share a shape.
pad_sequence Does It for You
PyTorch ships pad_sequence, which pads a list of tensors to equal length and stacks them. Set batch_first so the batch dimension comes first.
from torch.nn.utils.rnn import pad_sequence
padded = pad_sequence(seqs, batch_first=True)Remember the Real Lengths
Padding adds fake tokens, so also return each sequence's true length. Your model uses these to ignore the padded positions during the forward pass.
lengths = torch.tensor([len(s) for s in seqs])Stack the Labels
Labels are usually fixed size, so a normal stack works for them. Return the padded inputs, the lengths, and the stacked labels together.
labels = torch.stack(labels)
return padded, lengths, labelsMask Out the Padding
Later you build a mask from the lengths so the loss and attention skip padded slots. Padding fills shape without polluting the gradients.
One Function, Any Shape
With a custom collate_fn, the same DataLoader handles text, audio, and graphs. You control exactly how loose samples become one tidy batch.
Quick Check
Why do variable-length sequences need a custom collate_fn?
Recap
A custom collate_fn turns a list of uneven samples into one batch, usually by padding sequences to equal length and tracking their real sizes. 🎉
Часто задаваемые вопросы
Урок «collate_fn для входных данных переменной длины» бесплатный?
Да — полный текст урока «collate_fn для входных данных переменной длины» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Deep Learning Academy, подпишись на CoddyKit PRO. Курс Deep Learning Academy содержит 4 уроков всего.
Чему я научусь в уроке «collate_fn для входных данных переменной длины»?
Дополните выравниванием и объедините образцы разной длины Ты практикуешь Deep Learning Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Deep Learning Academy?
Предыдущий опыт не требуется. Deep Learning Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «collate_fn для входных данных переменной длины»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Deep Learning Academy?
Да. Каждый урок Deep Learning Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Напишите собственный класс набора данных
- Формирование пакетов, перемешивание и num_workers
- collate_fn для входных данных переменной длины
- Нормализация и стандартизация входных данных