keras-team/keras · error · ValueError

Received: input_number={input_number}

Error message

Received: input_number={input_number}

What it means

Raised by RandomTranslation's _check_factor_range when a translation factor falls outside [-1.0, 1.0]. Translation is expressed as a fraction of the image dimension, so 100% is the maximum in either direction.

Source

Thrown at keras/src/layers/preprocessing/image_preprocessing/random_translation.py:169

                    + f"Received: {factor_name}={factor}"
                )
            self._check_factor_range(factor[0])
            self._check_factor_range(factor[1])
            lower, upper = sorted(factor)
        elif isinstance(factor, (int, float)):
            self._check_factor_range(factor)
            factor = abs(factor)
            lower, upper = [-factor, factor]
        else:
            raise ValueError(
                self._FACTOR_VALIDATION_ERROR
                + f"Received: {factor_name}={factor}"
            )
        return lower, upper

    def _check_factor_range(self, input_number):
        if input_number > 1.0 or input_number < -1.0:
            raise ValueError(
                self._FACTOR_VALIDATION_ERROR
                + f"Received: input_number={input_number}"
            )

    def _transform_images(self, images, transformation, interpolation):
        return self._translate_inputs(images, transformation, interpolation)

    def transform_labels(self, labels, transformation, training=True):
        return labels

    def get_transformed_x_y(self, x, y, transform):
        a0, a1, a2, b0, b1, b2, c0, c1 = self.backend.numpy.split(
            transform, 8, axis=-1
        )

        k = c0 * x + c1 * y + 1
        x_transformed = (a0 * x + a1 * y + a2) / k
        y_transformed = (b0 * x + b1 * y + b2) / k

View on GitHub (pinned to 7a34a03db6)

Solutions

  1. Divide pixel offsets by the image size to get a fraction
  2. Keep values in [-1.0, 1.0]; note negative scalars are fine here and become symmetric ranges

Example fix

// before
layer = RandomTranslation(height_factor=50, width_factor=50)  // meant pixels
// after
layer = RandomTranslation(height_factor=50/224, width_factor=50/224)
Defensive patterns

Strategy: validation

Validate before calling

vals = factor if isinstance(factor, (tuple, list)) else [factor]
assert all(-1.0 <= x <= 1.0 for x in vals), 'translation factors must be in [-1.0, 1.0]'

Type guard

def in_translation_range(x):
    return isinstance(x, (int, float)) and -1.0 <= x <= 1.0

Try / catch

try:
    layer = RandomTranslation(h, w)
except ValueError:
    h = max(-1.0, min(1.0, h / img_size))
    layer = RandomTranslation(h, w)

Prevention

When it happens

Trigger: Calling RandomTranslation(height_factor=1.5, width_factor=0.1), or a pair like (-1.2, 0.3).

Common situations: Passing pixel counts instead of fractions (e.g. 50 for 50 pixels on a 100px image); confusing the sign conventions with RandomShear (which forbids negatives).

Related errors


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