.. _l-onnx-doc-Reshape: ======= Reshape ======= .. contents:: :local: .. _l-onnx-op-reshape-14: Reshape - 14 ============ **Version** * **name**: `Reshape (GitHub) `_ * **domain**: **main** * **since_version**: **14** * **function**: False * **support_level**: SupportType.COMMON * **shape inference**: True This version of the operator has been available **since version 14**. **Summary** Reshape the input tensor similar to numpy.reshape. First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor. At most one dimension of the new shape can be -1. In this case, the value is inferred from the size of the tensor and the remaining dimensions. A dimension could also be 0, in which case the actual dimension value is unchanged (i.e. taken from the input tensor). If 'allowzero' is set, and the new shape includes 0, the dimension will be set explicitly to zero (i.e. not taken from input tensor). Shape (second input) could be an empty shape, which means converting to a scalar. The input tensor's shape and the output tensor's shape are required to have the same number of elements. If the attribute 'allowzero' is set, it is invalid for the specified shape to contain both a zero value and -1, as the value of the dimension corresponding to -1 cannot be determined uniquely. **Attributes** * **allowzero**: (Optional) By default, when any value in the 'shape' input is equal to zero the corresponding dimension value is copied from the input tensor dynamically. allowzero=1 indicates that if any value in the 'shape' input is set to zero, the zero value is honored, similar to NumPy. Default value is ``0``. **Inputs** * **data** (heterogeneous) - **T**: An input tensor. * **shape** (heterogeneous) - **tensor(int64)**: Specified shape for output. **Outputs** * **reshaped** (heterogeneous) - **T**: Reshaped data. **Type Constraints** * **T** in ( tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to all tensor types. **Examples** **_reshape** :: original_shape = [2, 3, 4] test_cases = { "reordered_all_dims": np.array([4, 2, 3], dtype=np.int64), "reordered_last_dims": np.array([2, 4, 3], dtype=np.int64), "reduced_dims": np.array([2, 12], dtype=np.int64), "extended_dims": np.array([2, 3, 2, 2], dtype=np.int64), "one_dim": np.array([24], dtype=np.int64), "negative_dim": np.array([2, -1, 2], dtype=np.int64), "negative_extended_dims": np.array([-1, 2, 3, 4], dtype=np.int64), "zero_dim": np.array([2, 0, 4, 1], dtype=np.int64), "zero_and_negative_dim": np.array([2, 0, 1, -1], dtype=np.int64), } data = np.random.random_sample(original_shape).astype(np.float32) for test_name, shape in test_cases.items(): node = onnx.helper.make_node( "Reshape", inputs=["data", "shape"], outputs=["reshaped"], ) reshaped = reshape_reference_implementation(data, shape) expect( node, inputs=[data, shape], outputs=[reshaped], name="test_reshape_" + test_name, ) **_allowzero** :: original_shape = [0, 3, 4] test_cases = { "allowzero_reordered": np.array([3, 4, 0], dtype=np.int64), } data = np.random.random_sample(original_shape).astype(np.float32) for test_name, shape in test_cases.items(): node = onnx.helper.make_node( "Reshape", inputs=["data", "shape"], outputs=["reshaped"], allowzero=1, # if allowzero=1, final shape = (3, 4, 0) # if allowzero=0, final shape = (3, 4, 4) ) reshaped = reshape_reference_implementation(data, shape, allowzero=1) expect( node, inputs=[data, shape], outputs=[reshaped], name="test_reshape_" + test_name, ) **Differences** .. raw:: html
00Reshape the input tensor similar to numpy.reshape.Reshape the input tensor similar to numpy.reshape.
11First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor.First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor.
22At most one dimension of the new shape can be -1. In this case, the value isAt most one dimension of the new shape can be -1. In this case, the value is
33inferred from the size of the tensor and the remaining dimensions. A dimensioninferred from the size of the tensor and the remaining dimensions. A dimension
44could also be 0, in which case the actual dimension value is unchanged (i.e. takencould also be 0, in which case the actual dimension value is unchanged (i.e. taken
5from the input tensor). If 'allowzero' is set, and the new shape includes 0, the
6dimension will be set explicitly to zero (i.e. not taken from input tensor).
57from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar.Shape (second input) could be an empty shape, which means converting to a scalar.
68The input tensor's shape and the output tensor's shape are required to have the same number of elements.The input tensor's shape and the output tensor's shape are required to have the same number of elements.
79
10If the attribute 'allowzero' is set, it is invalid for the specified shape to
11contain both a zero value and -1, as the value of the dimension corresponding
12to -1 cannot be determined uniquely.
13
14**Attributes**
15
16* **allowzero**:
17 (Optional) By default, when any value in the 'shape' input is equal
18 to zero the corresponding dimension value is copied from the input
19 tensor dynamically. allowzero=1 indicates that if any value in the
20 'shape' input is set to zero, the zero value is honored, similar to
21 NumPy. Default value is 0.
22
823**Inputs****Inputs**
924
1025* **data** (heterogeneous) - **T**:* **data** (heterogeneous) - **T**:
1126 An input tensor. An input tensor.
1227* **shape** (heterogeneous) - **tensor(int64)**:* **shape** (heterogeneous) - **tensor(int64)**:
1328 Specified shape for output. Specified shape for output.
1429
1530**Outputs****Outputs**
1631
1732* **reshaped** (heterogeneous) - **T**:* **reshaped** (heterogeneous) - **T**:
1833 Reshaped data. Reshaped data.
1934
2035**Type Constraints****Type Constraints**
2136
2237* **T** in (* **T** in (
2338 tensor(bfloat16), tensor(bfloat16),
2439 tensor(bool), tensor(bool),
2540 tensor(complex128), tensor(complex128),
2641 tensor(complex64), tensor(complex64),
2742 tensor(double), tensor(double),
2843 tensor(float), tensor(float),
2944 tensor(float16), tensor(float16),
3045 tensor(int16), tensor(int16),
3146 tensor(int32), tensor(int32),
3247 tensor(int64), tensor(int64),
3348 tensor(int8), tensor(int8),
3449 tensor(string), tensor(string),
3550 tensor(uint16), tensor(uint16),
3651 tensor(uint32), tensor(uint32),
3752 tensor(uint64), tensor(uint64),
3853 tensor(uint8) tensor(uint8)
3954 ): ):
4055 Constrain input and output types to all tensor types. Constrain input and output types to all tensor types.
.. _l-onnx-op-reshape-13: Reshape - 13 ============ **Version** * **name**: `Reshape (GitHub) `_ * **domain**: **main** * **since_version**: **13** * **function**: False * **support_level**: SupportType.COMMON * **shape inference**: True This version of the operator has been available **since version 13**. **Summary** Reshape the input tensor similar to numpy.reshape. First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor. At most one dimension of the new shape can be -1. In this case, the value is inferred from the size of the tensor and the remaining dimensions. A dimension could also be 0, in which case the actual dimension value is unchanged (i.e. taken from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar. The input tensor's shape and the output tensor's shape are required to have the same number of elements. **Inputs** * **data** (heterogeneous) - **T**: An input tensor. * **shape** (heterogeneous) - **tensor(int64)**: Specified shape for output. **Outputs** * **reshaped** (heterogeneous) - **T**: Reshaped data. **Type Constraints** * **T** in ( tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to all tensor types. **Differences** .. raw:: html
00Reshape the input tensor similar to numpy.reshape.Reshape the input tensor similar to numpy.reshape.
11First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor.First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor.
22At most one dimension of the new shape can be -1. In this case, the value isAt most one dimension of the new shape can be -1. In this case, the value is
33inferred from the size of the tensor and the remaining dimensions. A dimensioninferred from the size of the tensor and the remaining dimensions. A dimension
44could also be 0, in which case the actual dimension value is unchanged (i.e. takencould also be 0, in which case the actual dimension value is unchanged (i.e. taken
55from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar.from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar.
66The input tensor's shape and the output tensor's shape are required to have the same number of elements.The input tensor's shape and the output tensor's shape are required to have the same number of elements.
77
88**Inputs****Inputs**
99
1010* **data** (heterogeneous) - **T**:* **data** (heterogeneous) - **T**:
1111 An input tensor. An input tensor.
1212* **shape** (heterogeneous) - **tensor(int64)**:* **shape** (heterogeneous) - **tensor(int64)**:
1313 Specified shape for output. Specified shape for output.
1414
1515**Outputs****Outputs**
1616
1717* **reshaped** (heterogeneous) - **T**:* **reshaped** (heterogeneous) - **T**:
1818 Reshaped data. Reshaped data.
1919
2020**Type Constraints****Type Constraints**
2121
2222* **T** in (* **T** in (
23 tensor(bfloat16),
2324 tensor(bool), tensor(bool),
2425 tensor(complex128), tensor(complex128),
2526 tensor(complex64), tensor(complex64),
2627 tensor(double), tensor(double),
2728 tensor(float), tensor(float),
2829 tensor(float16), tensor(float16),
2930 tensor(int16), tensor(int16),
3031 tensor(int32), tensor(int32),
3132 tensor(int64), tensor(int64),
3233 tensor(int8), tensor(int8),
3334 tensor(string), tensor(string),
3435 tensor(uint16), tensor(uint16),
3536 tensor(uint32), tensor(uint32),
3637 tensor(uint64), tensor(uint64),
3738 tensor(uint8) tensor(uint8)
3839 ): ):
3940 Constrain input and output types to all tensor types. Constrain input and output types to all tensor types.
.. _l-onnx-op-reshape-5: Reshape - 5 =========== **Version** * **name**: `Reshape (GitHub) `_ * **domain**: **main** * **since_version**: **5** * **function**: False * **support_level**: SupportType.COMMON * **shape inference**: True This version of the operator has been available **since version 5**. **Summary** Reshape the input tensor similar to numpy.reshape. First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor. At most one dimension of the new shape can be -1. In this case, the value is inferred from the size of the tensor and the remaining dimensions. A dimension could also be 0, in which case the actual dimension value is unchanged (i.e. taken from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar. The input tensor's shape and the output tensor's shape are required to have the same number of elements. **Inputs** * **data** (heterogeneous) - **T**: An input tensor. * **shape** (heterogeneous) - **tensor(int64)**: Specified shape for output. **Outputs** * **reshaped** (heterogeneous) - **T**: Reshaped data. **Type Constraints** * **T** in ( tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to all tensor types. **Differences** .. raw:: html
00Reshape the input tensor similar to numpy.reshape.Reshape the input tensor similar to numpy.reshape.
11It takes a tensor as input and an argument shape. It outputs the reshaped tensor.First input is the data tensor, second input is a shape tensor which specifies the output shape. It outputs the reshaped tensor.
22At most one dimension of the new shape can be -1. In this case, the value isAt most one dimension of the new shape can be -1. In this case, the value is
33inferred from the size of the tensor and the remaining dimensions. A dimensioninferred from the size of the tensor and the remaining dimensions. A dimension
44could also be 0, in which case the actual dimension value is unchanged (i.e. takencould also be 0, in which case the actual dimension value is unchanged (i.e. taken
55from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar.from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar.
66The input tensor's shape and the output tensor's shape are required to have the same number of elements.The input tensor's shape and the output tensor's shape are required to have the same number of elements.
77
8**Attributes**
9
10* **consumed_inputs**:
11 legacy optimization attribute.
12* **shape**:
13 New shape
14
158**Inputs****Inputs**
169
1710* **data** (heterogeneous) - **T**:* **data** (heterogeneous) - **T**:
11 An input tensor.
1812 An input tensor.* **shape** (heterogeneous) - **tensor(int64)**:
13 Specified shape for output.
1914
2015**Outputs****Outputs**
2116
2217* **reshaped** (heterogeneous) - **T**:* **reshaped** (heterogeneous) - **T**:
2318 Reshaped data. Reshaped data.
2419
2520**Type Constraints****Type Constraints**
2621
2722* **T** in (* **T** in (
23 tensor(bool),
24 tensor(complex128),
25 tensor(complex64),
2826 tensor(double), tensor(double),
2927 tensor(float), tensor(float),
3028 tensor(float16) tensor(float16),
29 tensor(int16),
30 tensor(int32),
31 tensor(int64),
32 tensor(int8),
33 tensor(string),
34 tensor(uint16),
35 tensor(uint32),
36 tensor(uint64),
37 tensor(uint8)
3138 ): ):
3239 Constrain input and output types to float tensors. Constrain input and output types to all tensor types.
.. _l-onnx-op-reshape-1: Reshape - 1 =========== **Version** * **name**: `Reshape (GitHub) `_ * **domain**: **main** * **since_version**: **1** * **function**: False * **support_level**: SupportType.COMMON * **shape inference**: False This version of the operator has been available **since version 1**. **Summary** Reshape the input tensor similar to numpy.reshape. It takes a tensor as input and an argument `shape`. It outputs the reshaped tensor. At most one dimension of the new shape can be -1. In this case, the value is inferred from the size of the tensor and the remaining dimensions. A dimension could also be 0, in which case the actual dimension value is unchanged (i.e. taken from the input tensor). Shape (second input) could be an empty shape, which means converting to a scalar. The input tensor's shape and the output tensor's shape are required to have the same number of elements. **Attributes** * **consumed_inputs**: legacy optimization attribute. * **shape**: New shape **Inputs** * **data** (heterogeneous) - **T**: An input tensor. **Outputs** * **reshaped** (heterogeneous) - **T**: Reshaped data. **Type Constraints** * **T** in ( tensor(double), tensor(float), tensor(float16) ): Constrain input and output types to float tensors.