keras-team/keras · error · ValueError
The argument `kernel_size` cannot contain 0. Received…
Error message
The argument `kernel_size` cannot contain 0. Received: kernel_size={self.kernel_size}. What it means
Raised when constructing a separable convolution layer (SeparableConv1D/SeparableConv2D) whose `kernel_size` argument contains 0. `kernel_size` must be a positive integer or a tuple/list of positive integers; a 0 dimension would produce a degenerate kernel with no trainable weights. Check the value passed for `kernel_size` and remove or correct any zero entries.
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.
Example fix
# before keras.layers.SeparableConv2D(32, kernel_size=(0, 3)) # after keras.layers.SeparableConv2D(32, kernel_size=(3, 3))
Defensive patterns
Strategy: validation
Validate before calling
ks = kernel_size if isinstance(kernel_size, (tuple, list)) else (kernel_size,) assert all(k > 0 for k in ks)
Type guard
def valid_kernel_size(kernel_size, rank) -> bool:
ks = kernel_size if isinstance(kernel_size, (tuple, list)) else (kernel_size,)
return len(ks) == rank and all(k > 0 for k in ks) Prevention
- Check tuple arity vs layer rank
- Validate model config dicts before build
When it happens
Trigger: Passing kernel_size with a zero element (e.g. (0,3) to SeparableConv2D), typically from computed kernel sizes or a rank mismatch.
Common situations: Dynamic kernel sizing that yields 0; passing a 2-tuple to SeparableConv1D; config typos.
Related errors
- Invalid value for argument `depth_multiplier`. Expected a…
- Invalid value for argument `filters`. Expected a strictly…
- The argument `kernel_size` cannot contain 0. Received…
- The argument `strides` cannot contains 0(s). Received…
- Invalid value for argument `depth_multiplier`. Expected a…
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/3ce9a6e2b3423dd2.
Report an issue: GitHub.
Appendix: source
Thrown at keras/src/layers/convolutional/base_separable_conv.py:148
self.data_format = self.data_format
self.input_spec = InputSpec(min_ndim=self.rank + 2)
if self.depth_multiplier is not None and self.depth_multiplier <= 0:
raise ValueError(
"Invalid value for argument `depth_multiplier`. Expected a "
"strictly positive value. Received "
f"depth_multiplier={self.depth_multiplier}."
)
if self.filters is not None and self.filters <= 0:
raise ValueError(
"Invalid value for argument `filters`. Expected a strictly "
f"positive value. Received filters={self.filters}."
)
if not all(self.kernel_size):
raise ValueError(
"The argument `kernel_size` cannot contain 0. Received: "
f"kernel_size={self.kernel_size}."
)
if not all(self.strides):
raise ValueError(
"The argument `strides` cannot contains 0(s). Received: "
f"strides={self.strides}"
)
def build(self, input_shape):
if self.data_format == "channels_last":
channel_axis = -1
input_channel = input_shape[-1]
else:
channel_axis = 1
input_channel = input_shape[1]
self.input_spec = InputSpec(View on GitHub (pinned to 7a34a03db6)