keras-team/keras · error · ValueError

A KerasTensor cannot be used as input to a JAX function. A…

Error message

A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces `keras.layers` and `keras.ops`). You are likely doing something like:

```
x = Input(...)
...
jax_fn(x)  # Invalid.
```

What you should do instead is wrap `jax_fn` in a layer:

```
class MyLayer(Layer):
    def call(self, x):
        return jax_fn(x)

x = MyLayer()(x)
```

What it means

Error "A KerasTensor cannot be used as input to a JAX function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces `keras.layers` and `keras.ops`). You are likely doing something like: ``` x = Input(...) ... jax_fn(x) # Invalid. ``` What you should do instead is wrap `jax_fn` in a layer: ``` class MyLayer(Layer): def call(self, x): return jax_fn(x) x = MyLayer()(x) ``` " thrown in keras-team/keras.

Solutions

  1. Wrap the jax_fn call inside a custom keras.Layer whose call() applies jax_fn to its input, and use that layer in the Functional graph
  2. Use ops from keras.ops, which handle symbolic KerasTensors, instead of raw jax functions
  3. For pure functions on concrete data, run them outside the model on real tensors, not on symbolic inputs
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at keras/src/backend/common/keras_tensor.py:171 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/0ad0bb4376bc087e. Report an issue: GitHub.

Appendix: source

Thrown at keras/src/backend/common/keras_tensor.py:171

            "You cannot convert it to an int."
        )

    def __float__(self):
        raise ValueError(
            "A KerasTensor is symbolic: it's a placeholder for a shape "
            "an a dtype. It doesn't have any actual numerical value. "
            "You cannot convert it to a float."
        )

    def __array__(self):
        raise ValueError(
            "A KerasTensor is symbolic: it's a placeholder for a shape "
            "an a dtype. It doesn't have any actual numerical value. "
            "You cannot convert it to a NumPy array."
        )

    def __jax_array__(self):
        raise ValueError(
            "A KerasTensor cannot be used as input to a JAX function. "
            "A KerasTensor is a symbolic placeholder for a shape and dtype, "
            "used when constructing Keras Functional models "
            "or Keras Functions. You can only use it as input to a Keras layer "
            "or a Keras operation (from the namespaces `keras.layers` "
            "and `keras.ops`). "
            "You are likely doing something like:\n\n"
            "```\n"
            "x = Input(...)\n"
            "...\n"
            "jax_fn(x)  # Invalid.\n"
            "```\n\n"
            "What you should do instead is wrap `jax_fn` in a layer:\n\n"
            "```\n"
            "class MyLayer(Layer):\n"
            "    def call(self, x):\n"
            "        return jax_fn(x)\n\n"
            "x = MyLayer()(x)\n"

View on GitHub (pinned to 7a34a03db6)