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

RandomBrightness requires value_range to be a tuple or list of two numbers describing the valid pixel range of the inputs. Passing a scalar, None, or string raises this ValueError from _set_value_range during layer construction.

Source

Thrown at keras/src/layers/preprocessing/image_preprocessing/random_brightness.py:79

               [[32.5, 33.5, 34.5]
                [35.5, 36.5, 37.5]]],
              shape=(2, 2, 3), dtype=int64)
    ```
    """

    _VALUE_RANGE_VALIDATION_ERROR = (
        "The `value_range` argument should be a list of two numbers. "
    )

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

    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) for uint8-scaled images or (0, 1) for float images
  2. Apply Rescaling(1/255) before and use (0, 1) consistently

Example fix

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

Strategy: type-guard

Validate before calling

if not isinstance(value_range, (tuple, list)):
    value_range = (0, value_range) if isinstance(value_range, (int, float)) else (0, 255)

Type guard

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

Prevention

When it happens

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

Common situations: Porting augmentation code from APIs that take a single max; assuming a default range exists; float images in [0,1] without declaring (0, 1).

Related errors


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