Concepts / Data Loader Settings

Data Loader Settings

Keep the two settings in mind as two separate questions. max_length asks how long each sample is. stride asks how far the loader moves forward before it starts the next sample.

  • Programming

Why a Single Sample Hides the Settings

So far every batch you have drawn from the data loader has contained a single sample. That keeps the picture simple, but it hides how the loader behaves when its settings change. The practical way to build intuition is to run the same loader several times with different settings and watch what changes in the output.

This article follows one loader through a short trace. You will make a prediction, run the code, compare the two, and, if they disagree, find the exact step where the output departed from what you expected. The settings you will adjust are max_length, stride, and batch_size. Each one controls a different part of the result, so the question at every stage is which setting is responsible for what you see.

Two Questions the Settings Answer

Keep the two settings in mind as two separate questions. max_length asks how long each sample is. stride asks how far the loader moves forward before it starts the next sample. The source suggests testing two pairs of values to build intuition: max_length=2 with stride=2, and max_length=8 with stride=2. Both pairs keep stride fixed at 2 while max_length changes from 2 to 8. Holding one value constant and varying the other is a good habit, because any difference you see in the output can be traced to the single setting you changed.

position 0sample 1position 1sample 1position 2sample 2position 3sample 2position 4sample 3position 5sample 3
Which token positions does each sample cover, and how much do consecutive samples overlap when max_length=2 and stride=2? This is an illustrative token-position map built for this article, not a figure from the source.

In this picture each sample covers two consecutive positions, and because the stride is also 2, the next sample starts right after the previous one ends. No positions are shared and none are skipped. The diagram shows only the relationship between the two settings; the actual contents depend on the text the loader reads.

What do you think happens?

With max_length=4 and stride=4, where does the second sample begin relative to the first?

  • At position 2, overlapping the first sample

  • At position 4, exactly where the first sample ended

  • At position 8, leaving a gap of four positions

Reveal answer
Answer:

At position 4, exactly where the first sample ended

When stride equals max_length, each sample starts exactly where the previous one ended. The first sample covers positions 0 to 3, so the second starts at position 4.

When the two values differ, the starting positions shift. If stride is smaller than max_length, consecutive samples overlap. If stride is larger than max_length, positions are skipped between samples. Changing only max_length from 2 to 8 while keeping stride at 2 therefore lengthens every sample, but it also makes consecutive samples share more positions, because each new sample still begins only two positions after the previous one.

Where batch_size Takes Effect

batch_size sets how many samples are grouped together in one batch, while max_length sets how long each sample is. These two readings are the most important distinction in this article. batch_size counts samples, which become rows of the output. max_length counts values inside each sample, which become the entries within a row.

python
Notes on the code
  • Line 1 to 3: builds the loader and stores it in dataloader; nothing is printed and no batch is drawn yet
  • Line 4: creates an iterator that will hand out batches one at a time
  • Line 5: produces one batch; this is the first place batch_size affects the result
  • Lines 6 and 7: print the inputs and then the targets
Code walkthrough
Read the code in the order Python runs it. The configuration call builds the loader, the iter call wraps it in an iterator, and the next call is where a batch is actually produced. The batch_size=8 argument, given in the create_dataloader_v1 call, is what makes next return eight samples together.
  1. 1
    create_dataloader_v1(...) builds a loader object. Nothing is printed and no batch has been drawn.
  2. 2
    batch_size=8 tells the loader to group eight samples into each batch. This is the line that controls how many samples come out together.
  3. 3
    max_length=4 and stride=4 determine the contents of each sample, not how many samples are grouped.
  4. 4
    iter(dataloader) creates an iterator that will hand out batches one at a time.
  5. 5
    next(data_iter) produces one batch, which is then split into inputs and targets.
  6. 6
    The two print statements come last. Because shuffle=False, the rows follow the order the loader produces them.
raw textsamplesmax_length=4, stride=4batchbatch_size=8next(data_iter)inputsprintedtargetsprintedwindowedgroupedone per callsplitsplit
How do individual samples flow from the dataset into groups of batch_size, and which setting determines how many come out together? Read left to right.

Tracing One Batch of Eight

Worked example

Predicting the shape of one batch

The loader is created with batch_size=8, max_length=4, and stride=4. When next returns one batch, how many rows does inputs contain, and how many values does each row contain? Use only the numbers in the call, since the contents of raw_text are not needed for this structural question.

  1. 1
    Identify the setting that counts rows

    batch_size=8 sets how many samples are grouped in one batch. Each sample becomes one row, so inputs has 8 rows.

  2. 2
    Identify the setting that counts values

    max_length=4 sets how long each sample is. Each row therefore contains 4 values.

  3. 3
    Confirm stride does not change the shape

    stride=4 decides where each new sample starts. It affects which text fills the rows, not how many rows or values there are.

  4. 4
    Compare with the single-sample case

    A batch size of 1 would give one row. Raising batch_size to 8 changes the number of rows the single call returns.

Result

inputs should contain 8 rows with 4 values each. Check your printed output against this shape before looking at the specific numbers.

What do you think happens?

Before running the code, what shape do you expect inputs to have after one call to next?

Reveal answer
Answer:

8 rows, each with 4 values

batch_size counts the samples grouped together, which become rows. max_length counts the values in each sample, which become the entries of each row.

Batch Size 1 Versus Larger Batches

The batches you sampled earlier had a batch size of 1. The source notes that this is useful for illustration, which is why it appeared first. With one sample per batch, you can see exactly what the loader produces without any grouping to interpret. Once the batch size rises above 1, the loader groups several samples together in each call to next, and the output becomes a block of rows instead of a single row.

The source also describes the trade-off that governs the choice of batch size. Small batch sizes require less memory during training, but they lead to more iterations. Larger batches reverse that balance. The comparison below uses only the points the source makes, together with the direct reading of the batch_size=8 example.

AspectBatch size 1Larger batch size (for example 8)
Samples per next callOne sample, shown as a single rowSeveral samples grouped together, shown as a block of rows
Memory use during trainingSmallest, as the source describes for small batch sizesLarger, since more samples are held at once
Number of iterationsMore iterations to cover the same dataFewer iterations to cover the same data
Typical roleUseful for illustration, because nothing needs to be groupedUsed to sample a batch greater than 1 in the batch_size=8 example

Batch size 1 compared with a larger batch size, using the trade-off stated in the source

Mistakes That Make a Batch Look Wrong

  • Common mistake

    Reading batch_size as the number of values in each row

    What it looks like

    Expecting inputs to have 8 values per row when batch_size=8 and max_length=4

    Why it fails

    batch_size counts samples grouped together, which become rows. max_length counts values in each sample.

    Do this instead

    Count rows against batch_size and values per row against max_length.

  • Common mistake

    Assuming stride changes how many rows come out

    What it looks like

    Expecting a different row count after changing stride from 4 to 2

    Why it fails

    stride only decides where the next sample begins, which changes the contents of the rows.

    Do this instead

    Keep the row count tied to batch_size and look at stride when comparing which positions the rows cover.

  • Common mistake

    Blaming the loader before checking the settings

    Why it fails

    A mismatch between prediction and output often comes from misreading the settings rather than from a fault in the loader.

    Do this instead

    Recheck the create_dataloader_v1 arguments first, then the iterator calls, then the printed values.

  • Common mistake

    Changing several settings at once, which makes it impossible to tell which change caused a difference in the output

Finding Where a Batch Diverges

  1. 1
    Check the settings in the create_dataloader_v1 call: batch_size, max_length, stride, and shuffle.
  2. 2
    Check the iterator: confirm that iter(dataloader) was created once and that next was called on it.
  3. 3
    Check the batch returned by next: count the rows and the values in each row against the settings.
  4. 4
    Check the printed inputs and then the printed targets, in that order, to see which one first departs from expectation.
MEDIUM

A teammate creates a loader with batch_size=8, max_length=4, and stride=4, then prints inputs expecting one row of 32 values. Using the four-step check above, identify which step reveals the mismatch and state what the correct expectation should be.

Hints
  • Start with the settings in the call and ask which argument counts rows.
  • Recall that max_length counts values inside each sample, not the number of samples in a batch.
EASY

Run the loader twice, once with max_length=2 and stride=2, and once with max_length=8 and stride=2, keeping batch_size fixed. Write down what changes in each row and what stays the same, then explain the difference using only the setting you changed.

Hints
  • Hold batch_size constant so that the row count does not change between runs.
  • Compare how many values each row contains in the two runs.

Key Takeaways

  • max_length sets how long each sample is, and stride sets how far the loader moves before the next sample begins; changing one while holding the other fixed isolates its effect.
  • batch_size sets how many samples are grouped into one batch, so it determines the number of rows, while max_length determines the number of values in each row.
  • A batch size of 1 is useful for illustration, while small batch sizes need less memory during training but lead to more iterations.
  • When a printed batch looks wrong, check the settings, then the iterator calls, then the returned batch, then the printed inputs and targets, to locate the step where the output diverged.

Related concepts

More concepts starting with D