keras-team/keras · error · ValueError
`validation_split` must be strictly between 0 and 1. Receiv
Error message
`validation_split` must be strictly between 0 and 1. Received: {validation_split} What it means
validation_split, when truthy, must be strictly between 0 and 1 (exclusive). 0, 1, negative values, or values >= 1 raise this error.
Source
Thrown at keras/src/legacy/preprocessing/image.py:1021
if data_format not in {"channels_last", "channels_first"}:
raise ValueError(
'`data_format` should be `"channels_last"` '
"(channel after row and column) or "
'`"channels_first"` (channel before row and column). '
f"Received: {data_format}"
)
self.data_format = data_format
if data_format == "channels_first":
self.channel_axis = 1
self.row_axis = 2
self.col_axis = 3
if data_format == "channels_last":
self.channel_axis = 3
self.row_axis = 1
self.col_axis = 2
if validation_split and not 0 < validation_split < 1:
raise ValueError(
"`validation_split` must be strictly between 0 and 1. "
f" Received: {validation_split}"
)
self._validation_split = validation_split
self.mean = None
self.std = None
self.zca_whitening_matrix = None
if isinstance(zoom_range, (float, int)):
self.zoom_range = [1 - zoom_range, 1 + zoom_range]
elif len(zoom_range) == 2 and all(
isinstance(val, (float, int)) for val in zoom_range
):
self.zoom_range = [zoom_range[0], zoom_range[1]]
else:
raise ValueError(
"`zoom_range` should be a float or "View on GitHub (pinned to 7a34a03db6)
Solutions
- Pass a fraction like 0.2 (0 < v < 1)
- Omit validation_split entirely if no split is needed
- If percentage in config, divide by 100 before constructing
Example fix
// before ImageDataGenerator(validation_split=20) // after ImageDataGenerator(validation_split=0.2)
Defensive patterns
Strategy: validation
Validate before calling
assert validation_split is None or 0 < validation_split < 1, validation_split
Type guard
def valid_split(v): return v is None or (isinstance(v,(int,float)) and 0 < v < 1)
Try / catch
try: ImageDataGenerator(validation_split=vs) except ValueError as e: if 'validation_split' in str(e): vs = 0.2
Prevention
- Store splits as fractions, never percentages
When it happens
Trigger: ImageDataGenerator(validation_split=0), validation_split=1.0, validation_split=-0.2, or 100 (percent instead of fraction).
Common situations: Thinking 0/1 booleans; passing a percentage (20) instead of a fraction (0.2).
Related errors
- The `factor` argument should be a number (or a list of two n
- Received: input_number={input_number}
- Received: input_number={input_number}
- Received: input_number={input_number}
- Invalid subset name: {subset}; expected "training" or "valid
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/3a9eeabf948529b6.
Report an issue: GitHub.