tf.reshape  |  TensorFlow v2.16.1 (original) (raw)

Reshapes a tensor.

View aliases

Compat aliases for migration

SeeMigration guide for more details.

tf.compat.v1.reshape

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

Used in the notebooks

Used in the guide Used in the tutorials
Introduction to Tensors Advanced automatic differentiation DTensor concepts Multilayer perceptrons for digit recognition with Core APIs Distributed training with Core APIs and DTensor Learned data compression Adversarial example using FGSM Convolutional Variational Autoencoder Load CSV data Load text

Given tensor, this operation returns a new tf.Tensor that has the same values as tensor in the same order, except with a new shape given byshape.

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 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, seetf.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() 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)>

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.
Returns
A Tensor. Has the same type as tensor.