torch.dtype是表示torch.Tensor的数据类型的对象。PyTorch有八种不同的数据类型:
使用方法:
(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:torch.from_numpy(numpy矩阵)
Tensor转化为numpy:Tensor矩阵.numpy()
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