tf.reshape
View source on GitHub |
Reshapes a tensor.
tf.reshape( tensor, shape, name=None )
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 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
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
.
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 . |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/reshape