keras-team/keras · error · ValueError

Received: value_range={value_range}

Error message

Received: value_range={value_range}

What it means

Raised by Solarization's _set_value_range when `value_range` is not a tuple or list. The layer needs the min/max of the expected pixel value range (e.g. (0, 255) or (0.0, 1.0)) to scale the threshold; a scalar or string is rejected.

Source

Thrown at keras/src/layers/preprocessing/image_preprocessing/solarization.py:88

        threshold_factor=0.0,
        value_range=(0, 255),
        seed=None,
        **kwargs,
    ):
        super().__init__(**kwargs)
        self.seed = seed
        self.generator = SeedGenerator(seed)
        self.addition_factor = self._set_factor(
            addition_factor, "addition_factor"
        )
        self.threshold_factor = self._set_factor(
            threshold_factor, "threshold_factor"
        )
        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 _set_factor(self, factor, factor_name):
        if isinstance(factor, (tuple, list)):
            if len(factor) != 2:
                raise ValueError(
                    self._FACTOR_VALIDATION_ERROR
                    + f"Received: {factor_name}={factor}"
                )
            self._check_factor_range(factor[0])

View on GitHub (pinned to 7a34a03db6)

Solutions

  1. Pass a 2-element tuple/list, e.g. value_range=(0, 255) for uint8 inputs or (0.0, 1.0) for normalized floats

Example fix

// before
layer = Solarization(value_range=255)
// after
layer = Solarization(value_range=(0, 255))
Defensive patterns

Strategy: validation

Validate before calling

assert isinstance(value_range, (tuple, list)) and len(value_range) == 2, 'value_range must be a (min, max) pair'

Type guard

def is_value_range(v):
    return isinstance(v, (tuple, list)) and len(v) == 2 and all(isinstance(x, (int, float)) for x in v)

Try / catch

try:
    layer = Solarization(value_range=vr)
except ValueError:
    raise ValueError('value_range must be like (0, 255) or (0.0, 1.0)')

Prevention

When it happens

Trigger: Calling Solarization(value_range=255) or value_range="0-255" — any non-sequence value.

Common situations: Passing a single max value instead of a (min, max) pair when adapting code from layers that take only a maximum; configs serializing the range as a string.

Related errors


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