<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.21.0/tensorflow/python/ops/array_ops.py#L392-L459) |

Returns a tensor with a length 1 axis inserted at index `axis`.

    tf.expand_dims(
        input, axis, name=None
    )

### Used in the notebooks

| Used in the guide | Used in the tutorials |
|---|---|
| - [Extension types](https://www.tensorflow.org/guide/extension_type) - [Import a JAX model using JAX2TF](https://www.tensorflow.org/guide/jax2tf) - [Migrate \`tf.feature_column\`s to Keras preprocessing layers](https://www.tensorflow.org/guide/migrate/migrating_feature_columns) - [Understanding masking \& padding](https://www.tensorflow.org/guide/keras/understanding_masking_and_padding) - [Working with RNNs](https://www.tensorflow.org/guide/keras/working_with_rnns) | - [Integrated gradients](https://www.tensorflow.org/tutorials/interpretability/integrated_gradients) - [Playing CartPole with the Actor-Critic method](https://www.tensorflow.org/tutorials/reinforcement_learning/actor_critic) - [Overfit and underfit](https://www.tensorflow.org/tutorials/keras/overfit_and_underfit) - [Generate music with an RNN](https://www.tensorflow.org/tutorials/audio/music_generation) - [DeepDream](https://www.tensorflow.org/tutorials/generative/deepdream) |

Given a tensor `input`, this operation inserts a dimension of length 1 at the
dimension index `axis` of `input`'s shape. The dimension index follows Python
indexing rules: It's zero-based, and a negative index is counted backward
from the end.

This operation is useful to:

- Add an outer "batch" dimension to a single element.
- Align axes for broadcasting.
- To add an inner vector length axis to a tensor of scalars.

#### For example:

If you have a single image of shape `[height, width, channels]`:

    image = tf.zeros([10,10,3])

You can add an outer `batch` axis by passing `axis=0`:

    tf.expand_dims(image, axis=0).shape.as_list()
    [1, 10, 10, 3]

The new axis location matches Python `list.insert(axis, 1)`:

    tf.expand_dims(image, axis=1).shape.as_list()
    [10, 1, 10, 3]

Following standard Python indexing rules, a negative `axis` counts from the
end so `axis=-1` adds an inner most dimension:

    tf.expand_dims(image, -1).shape.as_list()
    [10, 10, 3, 1]

This operation requires that `axis` is a valid index for `input.shape`,
following Python indexing rules:

    -1-tf.rank(input) <= axis <= tf.rank(input)

This operation is related to:

- [`tf.squeeze`](https://www.tensorflow.org/api_docs/python/tf/squeeze), which removes dimensions of size 1.
- [`tf.reshape`](https://www.tensorflow.org/api_docs/python/tf/reshape), which provides more flexible reshaping capability.
- [`tf.sparse.expand_dims`](https://www.tensorflow.org/api_docs/python/tf/sparse/expand_dims), which provides this functionality for [`tf.SparseTensor`](https://www.tensorflow.org/api_docs/python/tf/sparse/SparseTensor)

<br />

<br />

<br />

| ## Args ||
|---|---|
| `input` | A `Tensor`. |
| `axis` | Integer specifying the dimension index at which to expand the shape of `input`. Given an input of D dimensions, `axis` must be in range `[-(D+1), D]` (inclusive). |
| `name` | Optional string. The name of the output `Tensor`. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A tensor with the same data as `input`, with an additional dimension inserted at the index specified by `axis`. ||

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `TypeError` | If `axis` is not specified. |
| `InvalidArgumentError` | If `axis` is out of range `[-(D+1), D]`. |

<br />