keras-team/keras · error · ValueError

`zoom_range` should be a float or a tuple or list of two flo

Error message

`zoom_range` should be a float or a tuple or list of two floats. Received: {zoom_range}

What it means

ImageDataGenerator zoom_range must be a single float/int (symmetric [1-z, 1+z]) or a sequence of exactly two numbers. Anything else (1 number in a list, 3 elements, strings) is rejected.

Source

Thrown at keras/src/legacy/preprocessing/image.py:1038

        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 "
                "a tuple or list of two floats. "
                f"Received: {zoom_range}"
            )
        if zca_whitening:
            if not featurewise_center:
                self.featurewise_center = True
                warnings.warn(
                    "This ImageDataGenerator specifies "
                    "`zca_whitening`, which overrides "
                    "setting of `featurewise_center`."
                )
            if featurewise_std_normalization:
                self.featurewise_std_normalization = False
                warnings.warn(
                    "This ImageDataGenerator specifies "
                    "`zca_whitening` "
                    "which overrides setting of"

View on GitHub (pinned to 7a34a03db6)

Solutions

  1. Use a float: zoom_range=0.2, or a 2-element list [0.8, 1.2]
  2. Parse config values into float/list before passing
  3. Order matters: [lower, upper]

Example fix

// before
zoom_range=[0.2]
// after
zoom_range=[0.8, 1.2]
Defensive patterns

Strategy: validation

Validate before calling

import numbers
ok = isinstance(zoom_range,(int,float)) or (isinstance(zoom_range,(list,tuple)) and len(zoom_range)==2 and all(isinstance(v,(int,float)) for v in zoom_range))
assert ok, zoom_range

Type guard

def zoom_ok(z): return isinstance(z,(int,float)) or (isinstance(z,(list,tuple)) and len(z)==2)

Try / catch

try: ImageDataGenerator(zoom_range=z)
except ValueError as e: if 'zoom_range' in str(e): z = [0.8, 1.2]

Prevention

When it happens

Trigger: ImageDataGenerator(zoom_range=[0.2]) or zoom_range=[0.8,1.2,1.5] or zoom_range='0.2'.

Common situations: Config file parses zoom_range as a string; partial copy of a 2-element example.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


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