参考来源:
博客园:Pytorch 中 Tensor 的类型转换
CSDN:Pytorch 变量类型转换
Pytorch文档:https://pytorch.org/docs/stable/tensors.html#torch.Tensor.to

Pytorch 的数据类型为各式各样的 Tensor,Tensor 可以理解为高维矩阵。与 Numpy 中的 Array 类似。Pytorch 中的 tensor 又包括 CPU 上的数据类型和 GPU 上的数据类型,一般 GPU 上的 Tensor 是 CPU 上的 Tensor 加 cuda() 函数得到。通过使用 Type 函数可以查看变量类型。一般系统默认是 torch.FloatTensor 类型。例如 data = torch.Tensor(2,3) 是一个 23 的张量,类型为 FloatTensor;`*data.cuda()` 就转换为 GPU 的张量类型,torch.cuda.FloatTensor 类型。

Pytorch 中的 Tensor 常用的类型转换函数(inplace操作):

1. 数据类型转换

在 Tensor 后加 **.long()****.int()****.float()****.double()** 等即可,也可以用 **.to()** 函数进行转换,所有的 Tensor 类型可参考 https://pytorch.org/docs/stable/tensors.html
还可以使用 **type()** 函数,data 为 Tensor 数据类型,**data.type()** 为给出 data 的类型,如果使用data.type(torch.FloatTensor) 则强制转换为 torch.FloatTensor 类型张量。
当你不知道要转换为什么类型时,但需要求 a1、a2 两个张量的乘积,可以使用 **a1.type_as(a2)** 将 a1 转换为 a2 同类型。

2. 数据存储位置转换(CPU 或 GPU 张量之间的转换)

CPU 张量 ——> GPU 张量,使用 **data.cuda()**
GPU 张量 ——> CPU 张量,使用 **data.cpu()**

3. 与 numpy 数据类型转换

Tensor ——> Numpy 使用 **data.numpy()**,data 为 Tensor 变量
Numpy ——> Tensor 使用 **torch.from_numpy(data)**,data 为 numpy 变量

3. 与 Python 数据类型转换

Tensor ——> 单个 Python 数据,使用 **data.item()**,data 为 Tensor 变量且只能为包含单个数据
Tensor ——> Python list,使用 **data.tolist()**,data 为 Tensor 变量,返回 shape 相同的可嵌套的 list。

(5)剥离出一个 tensor 参与计算,但不参与求导
Tensor 后加 **.detach()**

官方解释为:

Returns a new Tensor, detached from the current graph. The result will never require gradient. Returned Tensor shares the same storage with the original one. In-place modifications on either of them will be seen, and may trigger errors in correctness checks.
(以前这个功能用过.data(),但现在不推荐使用了)