![]() |
Reshapes a tensor.
View aliases
Compat aliases for migration
SeeMigration guide formore details.
tf.reshape( tensor, shape, name=None)
Used in the notebooks
Used in the guide | Used in the tutorials |
---|---|
Given tensor
, this operation returns a new tf.Tensor
that has the samevalues 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 elementsin the tensor, and so it can reuse the underlying data buffer. This makes ita 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 thatdimension 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
canbe -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 . |
As an expert in TensorFlow and tensor manipulation, I bring a wealth of knowledge and practical experience to the table. My expertise is evident in the detailed understanding of the tf.reshape
function, as showcased in the provided article.
Let's delve into the key concepts and information presented in the article:
1. Overview of tf.reshape
Function:
- Purpose: The
tf.reshape
function is used to reshape a given tensor while preserving the order and total number of elements within it. - Syntax:
tf.reshape(tensor, shape, name=None)
- Parameters:
tensor
: Input tensor to be reshaped.shape
: Desired shape of the output tensor.name
: Optional string parameter providing a name for the operation.
2. Examples and Demonstrations:
- The article provides several examples to illustrate the functionality of
tf.reshape
.- Reshaping a tensor
t1
from shape[2, 3]
to a flattened shape[6]
. - Reshaping a flattened tensor
t2
back to shape[3, 2]
. - Demonstrating that
tf.reshape
doesn't change the order or total elements in the tensor, optimizing performance by reusing the underlying data buffer. - Handling cases where the requested shape is incompatible, resulting in a
InvalidArgumentError
. - Demonstrating the use of
tf.transpose
for rearranging dimensions.
- Reshaping a tensor
3. Handling Special Cases with -1
:
- If one component of the
shape
parameter is-1
, TensorFlow automatically computes the size of that dimension to maintain a constant total size. - Examples include flattening a tensor to 1-D using
shape=[-1]
and using-1
to infer the size of a dimension.
4. Flattening and Inferring Shapes:
- The article demonstrates flattening a tensor with various shapes, including using
-1
to infer dimensions. - Examples include flattening a 3x3 tensor to a 1-D array and inferring shapes such as
[2, -1]
,[-1, 9]
, and[2, -1, 3]
.
5. Function Outputs and Type Compatibility:
- The output of
tf.reshape
is a tensor with the same data type as the input tensor. - The function returns a tensor with the specified shape while maintaining the order of elements.
6. Error Handling:
- The article demonstrates error handling, showing that attempting to reshape a tensor into an incompatible shape raises an
InvalidArgumentError
.
In conclusion, the tf.reshape
function is a versatile tool for reshaping tensors in TensorFlow, allowing for flexibility in manipulating data structures. The provided examples cover a range of scenarios, showcasing the depth of understanding and practical application of tensor manipulation.