.. _op_ai_onnx_Flatten: Flatten ======= - **Domain**: ``ai.onnx`` - **Since version**: 25 Flattens the input tensor into a 2D matrix. If input tensor has shape (d_0, d_1, ... d_n) then the output will have shape (d_0 X d_1 ... d(axis-1), d_axis X d(axis+1) ... X dn). **Inputs** - **input** (*T*): A tensor of rank >= axis. **Outputs** - **output** (*T*): A 2D tensor with the contents of the input tensor, with input dimensions up to axis flattened to the outer dimension of the output and remaining input dimensions flattened into the inner dimension of the output. **Attributes** - **axis** (*int*): Indicate up to which input dimensions (exclusive) should be flattened to the outer dimension of the output. The value for axis must be in the range [-r, r], where r is the rank of the input tensor. Negative value means counting dimensions from the back. When axis = 0, the shape of the output tensor is (1, (d_0 X d_1 ... d_n), where the shape of the input tensor is (d_0, d_1, ... d_n). **Type Constraints** - **T**: Constrain input and output to all tensor types up to IRv13. Allowed types: tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(float4e2m1), tensor(float8e4m3fn), tensor(float8e4m3fnuz), tensor(float8e5m2), tensor(float8e5m2fnuz), tensor(float8e8m0), tensor(int16), tensor(int2), tensor(int32), tensor(int4), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint2), tensor(uint32), tensor(uint4), tensor(uint64), tensor(uint8). Examples -------- **test_cc_flatten_axis0** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = 0 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(1, 120), dtype=float32 [[-30. , -29.5, -29. , ..., 28.5, 29. , 29.5]] **test_cc_flatten_axis1** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = 1 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(2, 60), dtype=float32 [[-30. , -29.5, -29. , ..., -1.5, -1. , -0.5], [ 0. , 0.5, 1. , ..., 28.5, 29. , 29.5]] **test_cc_flatten_axis2** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = 2 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(6, 20), dtype=float32 [[-30. , -29.5, -29. , ..., -21.5, -21. , -20.5], [-20. , -19.5, -19. , ..., -11.5, -11. , -10.5], [-10. , -9.5, -9. , ..., -1.5, -1. , -0.5], [ 0. , 0.5, 1. , ..., 8.5, 9. , 9.5], [ 10. , 10.5, 11. , ..., 18.5, 19. , 19.5], [ 20. , 20.5, 21. , ..., 28.5, 29. , 29.5]] **test_cc_flatten_axis3** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = 3 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(24, 5), dtype=float32 [[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], ..., [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]] **test_cc_flatten_default_axis** .. code-block:: text Node: Flatten(a) -> (b) .. code-block:: text Inputs: a: shape=(5, 4, 3, 2), dtype=float32 [[[[-30. , -29.5], [-29. , -28.5], [-28. , -27.5]], [[-27. , -26.5], [-26. , -25.5], [-25. , -24.5]], [[-24. , -23.5], [-23. , -22.5], [-22. , -21.5]], [[-21. , -20.5], [-20. , -19.5], [-19. , -18.5]]], [[[-18. , -17.5], [-17. , -16.5], [-16. , -15.5]], [[-15. , -14.5], [-14. , -13.5], [-13. , -12.5]], [[-12. , -11.5], [-11. , -10.5], [-10. , -9.5]], [[ -9. , -8.5], [ -8. , -7.5], [ -7. , -6.5]]], [[[ -6. , -5.5], [ -5. , -4.5], [ -4. , -3.5]], [[ -3. , -2.5], [ -2. , -1.5], [ -1. , -0.5]], [[ 0. , 0.5], [ 1. , 1.5], [ 2. , 2.5]], [[ 3. , 3.5], [ 4. , 4.5], [ 5. , 5.5]]], [[[ 6. , 6.5], [ 7. , 7.5], [ 8. , 8.5]], [[ 9. , 9.5], [ 10. , 10.5], [ 11. , 11.5]], [[ 12. , 12.5], [ 13. , 13.5], [ 14. , 14.5]], [[ 15. , 15.5], [ 16. , 16.5], [ 17. , 17.5]]], [[[ 18. , 18.5], [ 19. , 19.5], [ 20. , 20.5]], [[ 21. , 21.5], [ 22. , 22.5], [ 23. , 23.5]], [[ 24. , 24.5], [ 25. , 25.5], [ 26. , 26.5]], [[ 27. , 27.5], [ 28. , 28.5], [ 29. , 29.5]]]] Outputs: b: shape=(5, 24), dtype=float32 [[-30. , -29.5, -29. , ..., -19.5, -19. , -18.5], [-18. , -17.5, -17. , ..., -7.5, -7. , -6.5], [ -6. , -5.5, -5. , ..., 4.5, 5. , 5.5], [ 6. , 6.5, 7. , ..., 16.5, 17. , 17.5], [ 18. , 18.5, 19. , ..., 28.5, 29. , 29.5]] **test_cc_flatten_negative_axis1** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = -1 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(24, 5), dtype=float32 [[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], ..., [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]] **test_cc_flatten_negative_axis2** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = -2 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(6, 20), dtype=float32 [[-30. , -29.5, -29. , ..., -21.5, -21. , -20.5], [-20. , -19.5, -19. , ..., -11.5, -11. , -10.5], [-10. , -9.5, -9. , ..., -1.5, -1. , -0.5], [ 0. , 0.5, 1. , ..., 8.5, 9. , 9.5], [ 10. , 10.5, 11. , ..., 18.5, 19. , 19.5], [ 20. , 20.5, 21. , ..., 28.5, 29. , 29.5]] **test_cc_flatten_negative_axis3** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = -3 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(2, 60), dtype=float32 [[-30. , -29.5, -29. , ..., -1.5, -1. , -0.5], [ 0. , 0.5, 1. , ..., 28.5, 29. , 29.5]] **test_cc_flatten_negative_axis4** .. code-block:: text Node: Flatten(a) -> (b) Attributes: axis = -4 .. code-block:: text Inputs: a: shape=(2, 3, 4, 5), dtype=float32 [[[[-30. , -29.5, -29. , -28.5, -28. ], [-27.5, -27. , -26.5, -26. , -25.5], [-25. , -24.5, -24. , -23.5, -23. ], [-22.5, -22. , -21.5, -21. , -20.5]], [[-20. , -19.5, -19. , -18.5, -18. ], [-17.5, -17. , -16.5, -16. , -15.5], [-15. , -14.5, -14. , -13.5, -13. ], [-12.5, -12. , -11.5, -11. , -10.5]], [[-10. , -9.5, -9. , -8.5, -8. ], [ -7.5, -7. , -6.5, -6. , -5.5], [ -5. , -4.5, -4. , -3.5, -3. ], [ -2.5, -2. , -1.5, -1. , -0.5]]], [[[ 0. , 0.5, 1. , 1.5, 2. ], [ 2.5, 3. , 3.5, 4. , 4.5], [ 5. , 5.5, 6. , 6.5, 7. ], [ 7.5, 8. , 8.5, 9. , 9.5]], [[ 10. , 10.5, 11. , 11.5, 12. ], [ 12.5, 13. , 13.5, 14. , 14.5], [ 15. , 15.5, 16. , 16.5, 17. ], [ 17.5, 18. , 18.5, 19. , 19.5]], [[ 20. , 20.5, 21. , 21.5, 22. ], [ 22.5, 23. , 23.5, 24. , 24.5], [ 25. , 25.5, 26. , 26.5, 27. ], [ 27.5, 28. , 28.5, 29. , 29.5]]]] Outputs: b: shape=(1, 120), dtype=float32 [[-30. , -29.5, -29. , ..., 28.5, 29. , 29.5]] Differences with previous version (24) -------------------------------------- **SchemaDiff**: ``Flatten`` (domain ``'ai.onnx'``) * old version: 24 * new version: 25 * breaking: no **Type constraints:** * changed 'T': added types: ['tensor(int2)', 'tensor(uint2)'] Version History --------------- - :doc:`Version 24 ` - :doc:`Version 23 ` - :doc:`Version 21 ` - :doc:`Version 13 ` - :doc:`Version 11 ` - :doc:`Version 9 ` - :doc:`Version 1 `