keras-team/keras · error · ValueError
`output_dim` must be a positive integer. Received: output_di
Error message
`output_dim` must be a positive integer. Received: output_dim={output_dim} (of type {type(output_dim).__name__}). What it means
keras.layers.Embedding requires output_dim (embedding vector length) to be a Python int strictly greater than 0; bools are rejected explicitly. Floats, numpy ints, 0, negatives, or True all fail this check in __init__ immediately after the input_dim check.
Source
Thrown at keras/src/layers/core/embedding.py:116
quantization_config=None,
**kwargs,
):
if (
not isinstance(input_dim, int)
or isinstance(input_dim, bool)
or input_dim <= 0
):
raise ValueError(
"`input_dim` must be a positive integer. "
f"Received: input_dim={input_dim} "
f"(of type {type(input_dim).__name__})."
)
if (
not isinstance(output_dim, int)
or isinstance(output_dim, bool)
or output_dim <= 0
):
raise ValueError(
"`output_dim` must be a positive integer. "
f"Received: output_dim={output_dim} "
f"(of type {type(output_dim).__name__})."
)
input_length = kwargs.pop("input_length", None)
if input_length is not None:
warnings.warn(
"Argument `input_length` is deprecated. Just remove it."
)
super().__init__(**kwargs)
self.input_dim = input_dim
self.output_dim = output_dim
self.embeddings_initializer = initializers.get(embeddings_initializer)
self.embeddings_regularizer = regularizers.get(embeddings_regularizer)
self.embeddings_constraint = constraints.get(embeddings_constraint)
self.mask_zero = mask_zero
self.supports_masking = mask_zero
self.autocast = FalseView on GitHub (pinned to 7a34a03db6)
Solutions
- Pass a plain Python int greater than 0, e.g. Embedding(input_dim=10000, output_dim=128)
- Cast config values with int(...) at the call site
- Ensure the value is not accidentally a boolean flag
Example fix
# before layer = keras.layers.Embedding(input_dim=10000, output_dim=float(cfg['dim'])) # after layer = keras.layers.Embedding(input_dim=10000, output_dim=int(cfg['dim']))
Defensive patterns
Strategy: type-guard
Validate before calling
assert isinstance(output_dim, int) and not isinstance(output_dim, bool) and output_dim > 0
Type guard
def is_positive_int(v):
return isinstance(v, int) and not isinstance(v, bool) and v > 0 Prevention
- Cast hyperparameters from argparse/config files to int
- Validate hyperparameters in config-loading code, not at model construction
When it happens
Trigger: Constructing Embedding with output_dim=0, output_dim=-16, output_dim=128.0, output_dim=np.int32(64), or output_dim=True.
Common situations: Hyperparameters loaded from YAML/JSON configs (deserialized as floats); argparse values not cast to int; deriving output_dim from arithmetic that yields a float.
Related errors
- `input_dim` must be a positive integer. Received: input_dim=
- You must build the layer before accessing `embeddings`.
- self._VALUE_RANGE_VALIDATION_ERROR + f"Received: value_range
- self._VALUE_RANGE_VALIDATION_ERROR + f"Received: value_range
- self._VALUE_RANGE_VALIDATION_ERROR + f"Received: value_range
AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25).
Data as JSON: /api/errors/2ed9413bb74fe077.
Report an issue: GitHub.