diff --git a/docs/Operators.md b/docs/Operators.md
index c7d77831788..fcd2e980515 100644
--- a/docs/Operators.md
+++ b/docs/Operators.md
@@ -6298,6 +6298,52 @@ opset_import {
+#### Examples
+
+
+all_permutations
+
+```python
+shape = (2,3,4)
+data = np.random.random_sample(shape).astype(np.float32)
+permutations = list(itertools.permutations(np.arange(len(shape))))
+
+for i in range(len(permutations)):
+ node = onnx.helper.make_node(
+ 'Transpose',
+ inputs=['data'],
+ outputs=['transposed'],
+ perm=permutations[i]
+ )
+ transposed = np.transpose(data, permutations[i])
+ expect(node, inputs=[data], outputs=[transposed],
+ name='test_transpose_all_permutations_' + str(i))
+```
+
+
+
+
+
+default
+
+```python
+shape = (2, 3, 4)
+data = np.random.random_sample(shape).astype(np.float32)
+
+node = onnx.helper.make_node(
+ 'Transpose',
+ inputs=['data'],
+ outputs=['transposed']
+)
+
+transposed = np.transpose(data)
+expect(node, inputs=[data], outputs=[transposed],
+ name='test_transpose_default')
+```
+
+
+
+
### **Unsqueeze**
Insert single-dimensional entries to the shape of a tensor.
diff --git a/onnx/backend/test/case/node/transpose.py b/onnx/backend/test/case/node/transpose.py
new file mode 100644
index 00000000000..f571db4353d
--- /dev/null
+++ b/onnx/backend/test/case/node/transpose.py
@@ -0,0 +1,46 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+import numpy as np
+import itertools
+
+import onnx
+from ..base import Base
+from . import expect
+
+
+class Transpose(Base):
+
+ @staticmethod
+ def export_default():
+ shape = (2, 3, 4)
+ data = np.random.random_sample(shape).astype(np.float32)
+
+ node = onnx.helper.make_node(
+ 'Transpose',
+ inputs=['data'],
+ outputs=['transposed']
+ )
+
+ transposed = np.transpose(data)
+ expect(node, inputs=[data], outputs=[transposed],
+ name='test_transpose_default')
+
+ @staticmethod
+ def export_all_permutations():
+ shape = (2,3,4)
+ data = np.random.random_sample(shape).astype(np.float32)
+ permutations = list(itertools.permutations(np.arange(len(shape))))
+
+ for i in range(len(permutations)):
+ node = onnx.helper.make_node(
+ 'Transpose',
+ inputs=['data'],
+ outputs=['transposed'],
+ perm=permutations[i]
+ )
+ transposed = np.transpose(data, permutations[i])
+ expect(node, inputs=[data], outputs=[transposed],
+ name='test_transpose_all_permutations_' + str(i))
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_0/input_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_0/input_0.pb
new file mode 100644
index 00000000000..d80707af3f8
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_0/input_0.pb
@@ -0,0 +1 @@
+BdataJ`?¦7?³N?w}?HéØ>QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_0/node.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_0/node.pb
new file mode 100644
index 00000000000..27624339c5b
Binary files /dev/null and b/onnx/backend/test/data/node/test_transpose_all_permutations_0/node.pb differ
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_0/output_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_0/output_0.pb
new file mode 100644
index 00000000000..36a37a6fe8b
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_0/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?¦7?³N?w}?HéØ>QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_1/input_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_1/input_0.pb
new file mode 100644
index 00000000000..d80707af3f8
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_1/input_0.pb
@@ -0,0 +1 @@
+BdataJ`?¦7?³N?w}?HéØ>QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_1/node.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_1/node.pb
new file mode 100644
index 00000000000..2f1758a8c87
Binary files /dev/null and b/onnx/backend/test/data/node/test_transpose_all_permutations_1/node.pb differ
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_1/output_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_1/output_0.pb
new file mode 100644
index 00000000000..6c4bed4b5b9
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_1/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?HéØ>š²v?¦7?QY%?rRÄ>³N?nà>~®J?w}?Ùp²=¹^?ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_2/input_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_2/input_0.pb
new file mode 100644
index 00000000000..d80707af3f8
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_2/input_0.pb
@@ -0,0 +1 @@
+BdataJ`?¦7?³N?w}?HéØ>QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_2/node.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_2/node.pb
new file mode 100644
index 00000000000..d24238b4d91
Binary files /dev/null and b/onnx/backend/test/data/node/test_transpose_all_permutations_2/node.pb differ
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_2/output_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_2/output_0.pb
new file mode 100644
index 00000000000..931c9d04d75
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_2/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?¦7?³N?w}?^k?çól?Z{‘=Ùp²=HéØ>QY%?nà>~®J?¨e?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_3/input_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_3/input_0.pb
new file mode 100644
index 00000000000..d80707af3f8
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_3/input_0.pb
@@ -0,0 +1 @@
+BdataJ`?¦7?³N?w}?HéØ>QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_3/node.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_3/node.pb
new file mode 100644
index 00000000000..fbae86f1ed9
Binary files /dev/null and b/onnx/backend/test/data/node/test_transpose_all_permutations_3/node.pb differ
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_3/output_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_3/output_0.pb
new file mode 100644
index 00000000000..fcc0cd0dc2e
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_3/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?^k?¦7?çól?³N?Z{‘=w}?Ùp²=HéØ>
¡¥H5G?¨•L?~®J?Gì>¨e?ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_4/input_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_4/input_0.pb
new file mode 100644
index 00000000000..d80707af3f8
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_4/input_0.pb
@@ -0,0 +1 @@
+BdataJ`?¦7?³N?w}?HéØ>QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_4/node.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_4/node.pb
new file mode 100644
index 00000000000..6d400e2f59b
Binary files /dev/null and b/onnx/backend/test/data/node/test_transpose_all_permutations_4/node.pb differ
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_4/output_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_4/output_0.pb
new file mode 100644
index 00000000000..c17d014b8d0
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_4/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?HéØ>š²v?^k?
¡¥<»†z?¦7?QY%?rRÄ>çól?“&U?¨•L?³N?nà>~®J?Z{‘=H5G?Gì>w}?QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_5/node.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_5/node.pb
new file mode 100644
index 00000000000..d600f02e5a8
Binary files /dev/null and b/onnx/backend/test/data/node/test_transpose_all_permutations_5/node.pb differ
diff --git a/onnx/backend/test/data/node/test_transpose_all_permutations_5/output_0.pb b/onnx/backend/test/data/node/test_transpose_all_permutations_5/output_0.pb
new file mode 100644
index 00000000000..cb9b3bab2e5
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_all_permutations_5/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?^k?HéØ>
¡¥<š²v?»†z?¦7?çól?QY%?“&U?rRÄ>¨•L?³N?Z{‘=nà>H5G?~®J?Gì>w}?Ùp²=QY%?nà>~®J?¨e?^k?çól?Z{‘=Ùp²=
¡¥<“&U?H5G?¹^?»†z?¨•L?Gì>ÃÐG?
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_default/node.pb b/onnx/backend/test/data/node/test_transpose_default/node.pb
new file mode 100644
index 00000000000..ab406a8d2c1
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_default/node.pb
@@ -0,0 +1,3 @@
+
+data
+transposed" Transpose
\ No newline at end of file
diff --git a/onnx/backend/test/data/node/test_transpose_default/output_0.pb b/onnx/backend/test/data/node/test_transpose_default/output_0.pb
new file mode 100644
index 00000000000..cb9b3bab2e5
--- /dev/null
+++ b/onnx/backend/test/data/node/test_transpose_default/output_0.pb
@@ -0,0 +1,2 @@
+B
+transposedJ`?^k?HéØ>
¡¥<š²v?»†z?¦7?çól?QY%?“&U?rRÄ>¨•L?³N?Z{‘=nà>H5G?~®J?Gì>w}?Ùp²=