{"record":{"id":"174101925076c1bc","repo":"keras-team/keras","slug":"layer-self-class-name-does-not-take-a-f","errorCode":null,"errorMessage":"Layer {self.__class__.__name__} does not take a `factor` argument. Received: factor={factor}","messagePattern":"Layer (.+?) does not take a `factor` argument\\. Received: factor=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/base_image_preprocessing_layer.py","lineNumber":24,"sourceCode":"    densify_bounding_boxes,\n)\n\n\nclass BaseImagePreprocessingLayer(DataLayer):\n    _USE_BASE_FACTOR = True\n    _FACTOR_BOUNDS = (-1, 1)\n\n    def __init__(\n        self, factor=None, bounding_box_format=None, data_format=None, **kwargs\n    ):\n        super().__init__(**kwargs)\n        self.bounding_box_format = bounding_box_format\n        self.data_format = backend_config.standardize_data_format(data_format)\n        if self._USE_BASE_FACTOR:\n            factor = factor or 0.0\n            self._set_factor(factor)\n        elif factor is not None:\n            raise ValueError(\n                f\"Layer {self.__class__.__name__} does not take \"\n                f\"a `factor` argument. Received: factor={factor}\"\n            )\n\n    def _set_factor(self, factor):\n        error_msg = (\n            \"The `factor` argument should be a number \"\n            \"(or a list of two numbers) \"\n            \"in the range \"\n            f\"[{self._FACTOR_BOUNDS[0]}, {self._FACTOR_BOUNDS[1]}]. \"\n            f\"Received: factor={factor}\"\n        )\n        if isinstance(factor, (tuple, list)):\n            if len(factor) != 2:\n                raise ValueError(error_msg)\n            if (\n                factor[0] > self._FACTOR_BOUNDS[1]\n                or factor[1] < self._FACTOR_BOUNDS[0]","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/base_image_preprocessing_layer.py#L6-L42","documentation":"BaseImagePreprocessingLayer subclasses declare _USE_BASE_FACTOR=True only if augmentation strength is controlled by a factor (e.g. RandomContrast, Solarization). If a subclass that does not use factor (like AutoContrast) receives a non-None factor argument, the base __init__ raises this error to catch the misplaced configuration early.","triggerScenarios":"keras.layers.AutoContrast(factor=0.5) or any factor-free image layer constructed with a factor kwarg, often leaked from a copied config dict or **kwargs.","commonSituations":"Sharing a hyperparameter dict across multiple augmentation layers where only some accept factor; upgrading code where a layer signature changed and factor was removed.","solutions":["Remove the factor argument from the constructor call of this layer.","If you intended factor-based augmentation, use a layer that supports it (e.g. RandomContrast).","Audit shared config dicts so layer-specific keys are not splatted via **kwargs into every layer."],"exampleFix":"# before\nlayer = keras.layers.AutoContrast(value_range=(0,255), factor=0.5)\n# after\nlayer = keras.layers.AutoContrast(value_range=(0,255))","handlingStrategy":"validation","validationCode":"import inspect\nif \"factor\" not in inspect.signature(LayerClass.__init__).parameters:\n    kwargs.pop(\"factor\", None)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not splat a shared **aug_config into every layer; build per-layer kwargs explicitly.","Check the layer signature when copying constructor calls between layers."],"tags":["keras","image-preprocessing","invalid-argument","config"],"backgroundTag":"unsupported-argument","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}