keras-team/keras · error · ValueError
The `factor` argument should be a number (or a list of two n
Error message
The `factor` argument should be a number (or a list of two numbers) in the range [0, 1.0]. Received: input_number={input_number} What it means
Raised by RandomShear's _check_factor_range when a shear factor value falls outside [0.0, 1.0]. Every element of the factor (or the scalar itself) must satisfy 0.0 <= x <= 1.0; shear magnitude is expressed as a fraction, not degrees.
Source
Thrown at keras/src/layers/preprocessing/image_preprocessing/random_shear.py:138
+ 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 < 0.0:
raise ValueError(
self._FACTOR_VALIDATION_ERROR
+ f"Received: input_number={input_number}"
)
def get_random_transformation(self, data, training=True, seed=None):
if not training:
return None
if isinstance(data, dict):
images = data["images"]
else:
images = data
images_shape = self.backend.shape(images)
if len(images_shape) == 3:
batch_size = 1
else:
batch_size = images_shape[0]View on GitHub (pinned to 7a34a03db6)
Solutions
- Scale the value into [0, 1.0] — for degrees d, use factor=d/360 or the appropriate fraction
- Note negatives are not allowed here (unlike RandomTranslation): pass a positive magnitude, e.g. factor=0.2 gives [-0.2, 0.2]
Example fix
// before layer = keras.layers.RandomShear(factor=25) // degrees // after layer = keras.layers.RandomShear(factor=25/360)
Defensive patterns
Strategy: validation
Validate before calling
assert all(0.0 <= x <= 1.0 for x in (factor if isinstance(factor, (tuple, list)) else [factor])), 'shear factor must be within [0, 1.0]'
Type guard
def in_unit_range(x):
return isinstance(x, (int, float)) and 0.0 <= x <= 1.0 Try / catch
try:
layer = keras.layers.RandomShear(factor=factor)
except ValueError:
factor = min(max(factor if isinstance(factor, (int, float)) else max(factor), 0.0), 1.0)
layer = keras.layers.RandomShear(factor=factor) Prevention
- Convert degree-based shear values to fractions of 360 before passing
- Note this layer rejects negative factors, unlike RandomTranslation
When it happens
Trigger: Calling RandomShear(factor=1.5), RandomShear(factor=(-0.2, 0.4)), or any 2-element list where one element is negative or greater than 1.0.
Common situations: Treating factor as degrees (e.g. passing 45 for a 45-degree shear) after migrating from torchvision or old tf.image code; flipping the sign convention used by RandomTranslation/RandomZoom which allow negatives.
Related errors
- Received: input_number={input_number}
- Received: input_number={input_number}
- Received: input_number={input_number}
- The `factor` argument should be a number (or a list of two n
- Unknown `fill_mode` {fill_mode}. Expected of one {self._SUPP
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/ff784ef04190adb4.
Report an issue: GitHub.