{"record":{"id":"3ce9a6e2b3423dd2","repo":"keras-team/keras","slug":"the-argument-kernel-size-cannot-contain-0-recei-3ce9a6","errorCode":null,"errorMessage":"The argument `kernel_size` cannot contain 0. Received: kernel_size={self.kernel_size}.","messagePattern":"The argument `kernel_size` cannot contain 0\\. Received: kernel_size=(.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/convolutional/base_separable_conv.py","lineNumber":148,"sourceCode":"        self.data_format = self.data_format\n\n        self.input_spec = InputSpec(min_ndim=self.rank + 2)\n\n        if self.depth_multiplier is not None and self.depth_multiplier <= 0:\n            raise ValueError(\n                \"Invalid value for argument `depth_multiplier`. Expected a \"\n                \"strictly positive value. Received \"\n                f\"depth_multiplier={self.depth_multiplier}.\"\n            )\n\n        if self.filters is not None and self.filters <= 0:\n            raise ValueError(\n                \"Invalid value for argument `filters`. Expected a strictly \"\n                f\"positive value. Received filters={self.filters}.\"\n            )\n\n        if not all(self.kernel_size):\n            raise ValueError(\n                \"The argument `kernel_size` cannot contain 0. Received: \"\n                f\"kernel_size={self.kernel_size}.\"\n            )\n\n        if not all(self.strides):\n            raise ValueError(\n                \"The argument `strides` cannot contains 0(s). Received: \"\n                f\"strides={self.strides}\"\n            )\n\n    def build(self, input_shape):\n        if self.data_format == \"channels_last\":\n            channel_axis = -1\n            input_channel = input_shape[-1]\n        else:\n            channel_axis = 1\n            input_channel = input_shape[1]\n        self.input_spec = InputSpec(","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/convolutional/base_separable_conv.py#L130-L166","documentation":"Separable convolution kernel_size must not contain 0 in any spatial dimension; a zero-extent filter is invalid. __init__ validates every element of kernel_size.","triggerScenarios":"Passing kernel_size with a zero element (e.g. (0,3) to SeparableConv2D), typically from computed kernel sizes or a rank mismatch.","commonSituations":"Dynamic kernel sizing that yields 0; passing a 2-tuple to SeparableConv1D; config typos.","solutions":["Set kernel_size to positive integers matching the layer's rank.","Guard computed sizes: all(k > 0 for k in kernel_size) before construction.","Log/validate model config before building the model."],"exampleFix":"# before\nkeras.layers.SeparableConv2D(32, kernel_size=(0, 3))\n\n# after\nkeras.layers.SeparableConv2D(32, kernel_size=(3, 3))","handlingStrategy":"validation","validationCode":"ks = kernel_size if isinstance(kernel_size, (tuple, list)) else (kernel_size,)\nassert all(k > 0 for k in ks)","typeGuard":"def valid_kernel_size(kernel_size, rank) -> bool:\n    ks = kernel_size if isinstance(kernel_size, (tuple, list)) else (kernel_size,)\n    return len(ks) == rank and all(k > 0 for k in ks)","tryCatchPattern":null,"preventionTips":["Check tuple arity vs layer rank","Validate model config dicts before build"],"tags":["keras","separable-conv","kernel-size","invalid-arguments"],"backgroundTag":"invalid-layer-argument-value","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}