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
- 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
- Assert len(data) == len(targets) immediately before construction
- 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
- Build data and targets in one function so they cannot diverge in length
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
- The `factor` argument should be a number (or a list of two n
- Received: {factor_name}={factor}
- Received: {factor_name}={factor}
- Received: value_range={value_range}
- Received: {factor_name}={factor}
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/78988efc851f8c42.
Report an issue: GitHub.