function transpose_(x, perm) {
	  var $x = convertToTensor(x, 'x', 'transpose');

	  if (perm == null) {
	    perm = $x.shape.map(function (s, i) {
	      return i;
	    }).reverse();
	  }

	  assert($x.rank === perm.length, function () {
	    return "Error in transpose: rank of input " + $x.rank + " " + ("must match length of perm " + perm + ".");
	  });
	  perm.forEach(function (axis) {
	    assert(axis >= 0 && axis < $x.rank, function () {
	      return "All entries in 'perm' must be between 0 and " + ($x.rank - 1) + (" but got " + perm);
	    });
	  });

	  if ($x.rank <= 1) {
	    return $x.clone();
	  }

	  var inputs = {
	    x: $x
	  };
	  var attrs = {
	    perm: perm
	  };
	  return ENGINE.runKernel(Transpose, inputs, attrs);
	}
Transposes the `tf.Tensor`. Permutes the dimensions according to `perm`.

The returned `tf.Tensor`'s dimension `i` will correspond to the input
dimension `perm[i]`. If `perm` is not given, it is set to `[n-1...0]`,
where `n` is the rank of the input `tf.Tensor`. Hence by default, this
operation performs a regular matrix transpose on 2-D input `tf.Tensor`s.

```js
const a = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);

a.transpose().print();  // or tf.transpose(a)
```

@param x The tensor to transpose.
@param perm The permutation of the dimensions of a.

@doc {heading: 'Operations', subheading: 'Matrices'}