{"record":{"id":"b644d0dc86a79598","repo":"keras-team/keras","slug":"the-argument-kernel-size-cannot-contain-0-recei","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_depthwise_conv.py","lineNumber":139,"sourceCode":"        self.use_bias = use_bias\n        self.depthwise_initializer = initializers.get(depthwise_initializer)\n        self.bias_initializer = initializers.get(bias_initializer)\n        self.depthwise_regularizer = regularizers.get(depthwise_regularizer)\n        self.bias_regularizer = regularizers.get(bias_regularizer)\n        self.depthwise_constraint = constraints.get(depthwise_constraint)\n        self.bias_constraint = constraints.get(bias_constraint)\n        self.input_spec = InputSpec(min_ndim=self.rank + 2)\n        self.data_format = self.data_format\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 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. 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":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/convolutional/base_depthwise_conv.py#L121-L157","documentation":"Depthwise convolution kernels must have non-zero size in every spatial dimension; a 0 in kernel_size (e.g. (3,0)) is a degenerate filter. The constructor uses all(self.kernel_size) to reject any zero component.","triggerScenarios":"Constructing DepthwiseConv1D/2D/3D with kernel_size containing a 0, typically a computed or config-driven kernel size.","commonSituations":"Kernel size derived from data shapes or config parsing that yields 0; rank/tuple arity mismatch producing a stray 0.","solutions":["Set kernel_size to positive integers in every spatial dimension.","Validate all(k > 0 for k in kernel_size) before constructing the layer.","Check tuple arity matches the layer rank."],"exampleFix":"# before\nkeras.layers.DepthwiseConv2D(kernel_size=(3, 0))\n\n# after\nkeras.layers.DepthwiseConv2D(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":["Validate kernel sizes in config loaders","Match tuple arity to conv rank"],"tags":["keras","depthwise-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"}