python与pytorch的数据类型、数据精度与转换

torch.dtype

torch.dtype是表示torch.Tensor的数据类型的对象。PyTorch有八种不同的数据类型:
python与pytorch的数据类型、数据精度与转换_第1张图片
使用方法:
(1)定义一个tensor

torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False) → Tensor

例子:

torch.tensor([[0.11111, 0.222222, 0.3333333]],
                 dtype=torch.float64,
                 device=torch.device('cuda:0'))
>>> x = torch.Tensor([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
>>> print x.type()
torch.FloatTensor    #默认是float32

(2)定义一个全0矩阵
注意默认的都是FloatTensor

torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

例子:

>>> torch.zeros(2, 3)   #默认的数据是float32
tensor([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]])
torch.zeros((2, 3) ,dtype=torch.double, device=device)  #定义为double数据

数据类型转换

(1)直接在变量后加’.float()’ 等

InputI = InputI.float() 

其他格式的为long(), int(),double(), byte()

(2)将a转换为与b相同的类型
很多运算需要多个变量之间有相同的数据类型,用此方法最合适

a.type_as(b)
print(a.type())

(3)在Tensor成员函数type()中直接传入要转换的数据类型

c = a.type(torch.LongTensor)

numpy与tensor转换

Numpy转化为Tensor:torch.from_numpy(numpy矩阵)
Tensor转化为numpy:Tensor矩阵.numpy()

tensor的device——GPU与CPU转换

CPU张量 ----> GPU张量, 使用Tensor.cuda()
GPU张量 ----> CPU张量 使用Tensor.cpu()
GPU张量 ----> CPUnumpy 使用Tensor.cpu().numpy(),需要断开梯度传输时,使用Tensor.cpu().detach().numpy()
我们可以通过torch.cuda.is_available()函数来判断当前的环境是否支持GPU,如果支持,则返回True。所以,为保险起见,在项目代码中一般采取“先判断,后使用”的策略来保证代码的正常运行,其基本结构如下:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"  #制定在哪一个GUP上运行该程序,编号为0,1,2,3等
device = torch.device("cuda:0" if (torch.cuda.is_available() ) else "cpu")
a = a.to(device)
#采用 torch.cuda.set_device(gpu_id)制定GPU,优点是可以直接指定gpu_id

gpu_id = [0, 1, 2]
torch.cuda.set_device(id)

查看device的状态时:

print(data.device)

输出结果为cpu或cuda:0

你可能感兴趣的:(python与pytorch的数据类型、数据精度与转换)