keras-team/keras · error · ValueError

self._VALUE_RANGE_VALIDATION_ERROR + f"Received: value_range

Error message

self._VALUE_RANGE_VALIDATION_ERROR + f"Received: value_range={value_range}"

What it means

RandomColorDegeneration requires value_range to be a tuple/list; anything else (scalar, None, string) raises this ValueError from _set_value_range at layer construction.

Source

Thrown at keras/src/layers/preprocessing/image_preprocessing/random_color_degeneration.py:61

    )

    def __init__(
        self,
        factor,
        value_range=(0, 255),
        data_format=None,
        seed=None,
        **kwargs,
    ):
        super().__init__(data_format=data_format, **kwargs)
        self._set_factor(factor)
        self._set_value_range(value_range)
        self.seed = seed
        self.generator = SeedGenerator(seed)

    def _set_value_range(self, value_range):
        if not isinstance(value_range, (tuple, list)):
            raise ValueError(
                self._VALUE_RANGE_VALIDATION_ERROR
                + f"Received: value_range={value_range}"
            )
        if len(value_range) != 2:
            raise ValueError(
                self._VALUE_RANGE_VALIDATION_ERROR
                + f"Received: value_range={value_range}"
            )
        self.value_range = sorted(value_range)

    def get_random_transformation(self, data, training=True, seed=None):
        if isinstance(data, dict):
            images = data["images"]
        else:
            images = data
        images_shape = self.backend.shape(images)
        rank = len(images_shape)
        if rank == 3:

View on GitHub (pinned to 7a34a03db6)

Solutions

  1. Pass value_range=(0, 255) or (0, 1) matching your pixel scale
  2. Standardize on one convention (e.g. always Rescaling to [0,1] and value_range=(0,1)) across the augmentation stack

Example fix

# before
layer = keras.layers.RandomColorDegeneration(factor=0.5, value_range=255)
# after
layer = keras.layers.RandomColorDegeneration(factor=0.5, value_range=(0, 255))
Defensive patterns

Strategy: type-guard

Validate before calling

if not isinstance(value_range, (tuple, list)):
    raise ValueError('value_range must be (low, high)')

Type guard

def is_valid_value_range(v):
    return isinstance(v, (tuple, list)) and len(v) == 2

Prevention

When it happens

Trigger: layers.RandomColorDegeneration(factor=0.5, value_range=255) or value_range=None.

Common situations: Same family as other preprocessing layers: assuming scalar max; forgetting to declare (0, 1) for rescaled float images.

Related errors


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