keras-team/keras · error · ValueError
adaptive_average_pool supports only 1D/2D/3D inputs
Error message
adaptive_average_pool supports only 1D/2D/3D inputs
What it means
Dispatch guard in the JAX backend's adaptive_average_pool: it computes the number of spatial dims as inputs.ndim - 2 and routes 1D/2D/3D cases to dedicated kernels. Any other rank (0D, 4D+, or inputs with fewer than 3 dims) falls through to this generic rejection. Note the message text says 'adaptive_average_pool' but it applies to the average variant.
Solutions
- Reshape the input to rank 3 (1D: (batch, length, channels)), rank 4 (2D), or rank 5 (3D) depending on the pooling variant used
- For higher-dimensional pooling, apply the op to a flattened spatial view or use regular (non-adaptive) pooling layer-by-layer
- Verify data_format matches the actual layout so ndim is interpreted correctly
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at keras/src/backend/jax/ops/nn.py:684 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/cd31fc5961a7cbbd.
Report an issue: GitHub.
Appendix: source
Thrown at keras/src/backend/jax/ops/nn.py:684
combined_w = jnp.concatenate([small_w_pool, big_w_pool], axis=3)
out = jnp.take(combined_w, gather_w, axis=3)
if data_format == "channels_first":
out = jnp.transpose(out, (0, 4, 1, 2, 3))
return out
def adaptive_average_pool(inputs, output_size, data_format=None):
data_format = standardize_data_format(data_format)
dims = inputs.ndim - 2
if dims == 1:
return _adaptive_average_pool1d(inputs, output_size, data_format)
if dims == 2:
return _adaptive_average_pool2d(inputs, output_size, data_format)
if dims == 3:
return _adaptive_average_pool3d(inputs, output_size, data_format)
raise ValueError("adaptive_average_pool supports only 1D/2D/3D inputs")
def adaptive_max_pool(inputs, output_size, data_format=None):
data_format = standardize_data_format(data_format)
dims = inputs.ndim - 2
if dims == 1:
return _adaptive_max_pool1d(inputs, output_size, data_format)
if dims == 2:
return _adaptive_max_pool2d(inputs, output_size, data_format)
if dims == 3:
return _adaptive_max_pool3d(inputs, output_size, data_format)
raise ValueError("adaptive_max_pool supports only 1D/2D/3D inputs")
def _convert_to_lax_conv_dimension_numbers(
num_spatial_dims,
data_format="channels_last",
transpose=False,View on GitHub (pinned to 7a34a03db6)