{"record":{"id":"92763e587d8beb55","repo":"keras-team/keras","slug":"cannot-quantize-a-layer-that-isn-t-yet-built-laye","errorCode":null,"errorMessage":"Cannot quantize a layer that isn't yet built. Layer '{self.name}' (of type '{self.__class__.__name__}') is not built yet.","messagePattern":"Cannot quantize a layer that isn't yet built\\. Layer '(.+?)' \\(of type '(.+?)'\\) is not built yet\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/layer.py","lineNumber":1368,"sourceCode":"                scope.losses[:] = [\n                    x for x in scope.losses if id(x) not in self._loss_ids\n                ]\n        self._losses.clear()\n        self._loss_ids.clear()\n        for layer in self._layers:\n            layer._clear_losses()\n\n    # Quantization-related (int8 and float8) methods\n\n    def quantized_build(self, input_shape, mode):\n        raise self._not_implemented_error(self.quantized_build)\n\n    def quantize(self, mode=None, type_check=True, config=None):\n        raise self._not_implemented_error(self.quantize)\n\n    def _check_quantize_args(self, mode, compute_dtype):\n        if not self.built:\n            raise ValueError(\n                \"Cannot quantize a layer that isn't yet built. \"\n                f\"Layer '{self.name}' (of type '{self.__class__.__name__}') \"\n                \"is not built yet.\"\n            )\n        if getattr(self, \"_is_quantized\", False):\n            raise ValueError(\n                f\"Layer '{self.name}' is already quantized with \"\n                f\"dtype_policy='{self.dtype_policy.name}'. \"\n                f\"Received: mode={mode}\"\n            )\n        if mode not in dtype_policies.QUANTIZATION_MODES:\n            raise ValueError(\n                \"Invalid quantization mode. \"\n                f\"Expected one of {dtype_policies.QUANTIZATION_MODES}. \"\n                f\"Received: mode={mode}\"\n            )\n        if mode == \"int8\" and compute_dtype == \"float16\":\n            raise ValueError(","sourceCodeStart":1350,"sourceCodeEnd":1386,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/layer.py#L1350-L1386","documentation":"Quantization wraps a layer's existing weights (kernel, scale, zero-point), so the layer must be built before quantize() runs. This error fires when _check_quantize_args sees built=False.","triggerScenarios":"Calling model.quantize('int8') on a freshly constructed, never-called model; quantizing a layer whose build was deferred (lazy build) and no input was passed.","commonSituations":"Applying post-training quantization in a script before loading/running the model; quantizing sublayers extracted from a config rather than a built model.","solutions":["Build first: model(x_sample) or layer.build(input_shape), then call quantize()","When quantizing from a saved model, load the weights (which builds via build_from_config) before quantize()"],"exampleFix":"# before\nmodel = keras.Sequential([keras.layers.Dense(10)])\nmodel.quantize('int8')\n# after\nmodel = keras.Sequential([keras.layers.Dense(10)])\nmodel(np.zeros((1, 32)))\nmodel.quantize('int8')","handlingStrategy":"validation","validationCode":"if not layer.built:\n    layer.build(input_shape)\nlayer.quantize('int8')","typeGuard":"def ready_to_quantize(layer):\n    return bool(layer.built) and not getattr(layer, '_is_quantized', False)","tryCatchPattern":null,"preventionTips":["Always run or build the model before quantize()","Load weights before quantizing saved models"],"tags":["keras","quantization","build"],"backgroundTag":"layer-not-built","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}