keras-team/keras · error · ValueError

Data and targets have to be of same length. Data length is {

Error message

Data and targets have to be of same length. Data length is {len(data)} while target length is {len(targets)}

What it means

TimeseriesGenerator (legacy sequence preprocessing) pairs each input window with a target, so it requires len(data) == len(targets) exactly. Any mismatch raises this ValueError in __init__ before any windowing logic runs.

Source

Thrown at keras/src/legacy/preprocessing/sequence.py:73

    """

    def __init__(
        self,
        data,
        targets,
        length,
        sampling_rate=1,
        stride=1,
        start_index=0,
        end_index=None,
        shuffle=False,
        reverse=False,
        batch_size=128,
        **kwargs,
    ):
        super().__init__(**kwargs)
        if len(data) != len(targets):
            raise ValueError(
                "Data and targets have to be "
                f"of same length. Data length is {len(data)} "
                f"while target length is {len(targets)}"
            )

        self.data = data
        self.targets = targets
        self.length = length
        self.sampling_rate = sampling_rate
        self.stride = stride
        self.start_index = start_index + length
        if end_index is None:
            end_index = len(data) - 1
        self.end_index = end_index
        self.shuffle = shuffle
        self.reverse = reverse
        self.batch_size = batch_size

View on GitHub (pinned to 7a34a03db6)

Solutions

  1. Pass targets of the same length as data; with default settings the target for a window is the step right after it, so pass targets=data for next-step forecasting
  2. Assert len(data) == len(targets) immediately before construction
  3. Double-check any slicing used to create targets

Example fix

# before
TimeseriesGenerator(series, series[1:], length=5)
# after
TimeseriesGenerator(series, series, length=5)  # next step is the target by default
Defensive patterns

Strategy: validation

Validate before calling

assert len(data) == len(targets), (len(data), len(targets))

Try / catch

try:
    TimeseriesGenerator(data, targets, length=L)
except ValueError as e:
    if 'same length' not in str(e):
        raise
    targets = targets[:len(data)]
    TimeseriesGenerator(data, targets, length=L)

Prevention

When it happens

Trigger: Constructing TimeseriesGenerator(data, targets, length=...) where data and targets have different first dimensions, e.g. 1000 timesteps of data vs 999 targets from an off-by-one shift.

Common situations: Building targets by shifting a series (series[1:]) and forgetting the result is one shorter; slicing data and targets with different index ranges; mixing DataFrame columns of different lengths.

Related errors


AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25). Data as JSON: /api/errors/78988efc851f8c42. Report an issue: GitHub.