<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#L63-L201) |

Reshapes a tensor.

#### View aliases


**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.reshape`](https://www.tensorflow.org/api_docs/python/tf/reshape)

<br />

    tf.reshape(
        tensor, shape, name=None
    )

### Used in the notebooks

| Used in the guide | Used in the tutorials |
|---|---|
| - [Introduction to Tensors](https://www.tensorflow.org/guide/tensor) - [Advanced automatic differentiation](https://www.tensorflow.org/guide/advanced_autodiff) - [DTensor concepts](https://www.tensorflow.org/guide/dtensor_overview) - [Multilayer perceptrons for digit recognition with Core APIs](https://www.tensorflow.org/guide/core/mlp_core) - [Distributed training with Core APIs and DTensor](https://www.tensorflow.org/guide/core/distribution) | - [Learned data compression](https://www.tensorflow.org/tutorials/generative/data_compression) - [Adversarial example using FGSM](https://www.tensorflow.org/tutorials/generative/adversarial_fgsm) - [Convolutional Variational Autoencoder](https://www.tensorflow.org/tutorials/generative/cvae) - [Load CSV data](https://www.tensorflow.org/tutorials/load_data/csv) - [Load text](https://www.tensorflow.org/tutorials/load_data/text) |

Given `tensor`, this operation returns a new [`tf.Tensor`](https://www.tensorflow.org/api_docs/python/tf/Tensor) that has the same
values as `tensor` in the same order, except with a new shape given by
`shape`.

    t1 = [[1, 2, 3],
          [4, 5, 6]]
    print(tf.shape(t1).numpy())
    [2 3]
    t2 = tf.reshape(t1, [6])
    t2
    <tf.Tensor: shape=(6,), dtype=int32,
      numpy=array([1, 2, 3, 4, 5, 6], dtype=int32)>
    tf.reshape(t2, [3, 2])
    <tf.Tensor: shape=(3, 2), dtype=int32, numpy=
      array([[1, 2],
             [3, 4],
             [5, 6]], dtype=int32)>

The [`tf.reshape`](https://www.tensorflow.org/api_docs/python/tf/reshape) does not change the order of or the total number of elements
in the tensor, and so it can reuse the underlying data buffer. This makes it
a fast operation independent of how big of a tensor it is operating on.

    tf.reshape([1, 2, 3], [2, 2])
    Traceback (most recent call last):

    InvalidArgumentError: Input to reshape is a tensor with 3 values, but the
    requested shape has 4

To instead reorder the data to rearrange the dimensions of a tensor, see
[`tf.transpose`](https://www.tensorflow.org/api_docs/python/tf/transpose).

    t = [[1, 2, 3],
         [4, 5, 6]]
    tf.reshape(t, [3, 2]).numpy()
    array([[1, 2],
           [3, 4],
           [5, 6]], dtype=int32)
    tf.transpose(t, perm=[1, 0]).numpy()
    array([[1, 4],
           [2, 5],
           [3, 6]], dtype=int32)

If one component of `shape` is the special value -1, the size of that
dimension is computed so that the total size remains constant. In particular,
a `shape` of `[-1]` flattens into 1-D. At most one component of `shape` can
be -1.

    t = [[1, 2, 3],
         [4, 5, 6]]
    tf.reshape(t, [-1])
    <tf.Tensor: shape=(6,), dtype=int32,
      numpy=array([1, 2, 3, 4, 5, 6], dtype=int32)>
    tf.reshape(t, [3, -1])
    <tf.Tensor: shape=(3, 2), dtype=int32, numpy=
      array([[1, 2],
             [3, 4],
             [5, 6]], dtype=int32)>
    tf.reshape(t, [-1, 2])
    <tf.Tensor: shape=(3, 2), dtype=int32, numpy=
      array([[1, 2],
             [3, 4],
             [5, 6]], dtype=int32)>

`tf.reshape(t, [])` reshapes a tensor `t` with one element to a scalar.

    tf.reshape([7], []).numpy().item()
    7

#### More examples:

    t = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(tf.shape(t).numpy())
    [9]
    tf.reshape(t, [3, 3])
    <tf.Tensor: shape=(3, 3), dtype=int32, numpy=
      array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]], dtype=int32)>

    t = [[[1, 1], [2, 2]],
         [[3, 3], [4, 4]]]
    print(tf.shape(t).numpy())
    [2 2 2]
    tf.reshape(t, [2, 4])
    <tf.Tensor: shape=(2, 4), dtype=int32, numpy=
      array([[1, 1, 2, 2],
             [3, 3, 4, 4]], dtype=int32)>

    t = [[[1, 1, 1],
          [2, 2, 2]],
         [[3, 3, 3],
          [4, 4, 4]],
         [[5, 5, 5],
          [6, 6, 6]]]
    print(tf.shape(t).numpy())
    [3 2 3]
    # Pass '[-1]' to flatten 't'.
    tf.reshape(t, [-1])
    <tf.Tensor: shape=(18,), dtype=int32,
      numpy=array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6],
      dtype=int32)>
    # -- Using -1 to infer the shape --
    # Here -1 is inferred to be 9:
    tf.reshape(t, [2, -1])
    <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
      array([[1, 1, 1, 2, 2, 2, 3, 3, 3],
             [4, 4, 4, 5, 5, 5, 6, 6, 6]], dtype=int32)>
    # -1 is inferred to be 2:
    tf.reshape(t, [-1, 9])
    <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
      array([[1, 1, 1, 2, 2, 2, 3, 3, 3],
             [4, 4, 4, 5, 5, 5, 6, 6, 6]], dtype=int32)>
    # -1 is inferred to be 3:
    tf.reshape(t, [ 2, -1, 3])
    <tf.Tensor: shape=(2, 3, 3), dtype=int32, numpy=
      array([[[1, 1, 1],
              [2, 2, 2],
              [3, 3, 3]],
             [[4, 4, 4],
              [5, 5, 5],
              [6, 6, 6]]], dtype=int32)>

<br />

<br />

<br />

| ## Args ||
|---|---|
| `tensor` | A `Tensor`. |
| `shape` | A `Tensor`. Must be one of the following types: `int32`, `int64`. Defines the shape of the output tensor. |
| `name` | Optional string. A name for the operation. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A `Tensor`. Has the same type as `tensor`. ||

<br />