be contracted in place of the last d of "a" and the first d of b.
   The sizes in these dimensions must match, but "tensordot()" will
   deal with broadcasted dimensions.
Examples:
  >>> a = torch.arange(60.).reshape(3, 4, 5)
  >>> b = torch.arange(24.).reshape(4, 3, 2)
  >>> torch.tensordot(a, b, dims=([1, 0], [0, 1]))
  tensor([[4400., 4730.],
          [4532., 4874.],
          [4664., 5018.],
          [4796., 5162.],
          [4928., 5306.]])

  >>> a = torch.randn(3, 4, 5, device='cuda')
  >>> b = torch.randn(4, 5, 6, device='cuda')
  >>> c = torch.tensordot(a, b, dims=2).cpu()
  tensor([[ 8.3504, -2.5436,  6.2922,  2.7556, -1.0732,  3.2741],
          [ 3.3161,  0.0704,  5.0187, -0.4079, -4.3126,  4.8744],
          [ 0.8223,  3.9445,  3.2168, -0.2400,  3.4117,  1.7780]])

  >>> a = torch.randn(3, 5, 4, 6)
  >>> b = torch.randn(6, 4, 5, 3)
  >>> torch.tensordot(a, b, dims=([2, 1, 3], [1, 2, 0]))
