赞
踩
Pytorch中的基本数据类型就是的张量(torch.Tensor),张量(torch.Tensor)可以理解为多维矩阵,矩阵中的每一个元素都具有统一的数据类型。根据元素数据类型的不同 Torch 定义了 10 种具有 CPU 和 GPU 变体的张量类型,如下所示:
Pytorch中定义了一个Tensor类来实现张量,Tensor在使用上与numpy的ndarray类似,不同的是,Tensor可以在GPU上运行,但是numpy只能在CPU上运行,当然numpy与Tensor可以进行相互转换,以此使得numpy数据在GPU上运行。Pytorch中的Tensor又包括CPU上的数据类型和GPU上的数据类型,两种数据类型之间也可以进行相互转换。
Pytorch数据类型的检查可以通过三个方式:
1)python内置函数type()
2)Tensor的成员函数Tensor.type()
3)Pytorch提供的工具函数isinstance()
示例代码:
- import torch
-
- a = torch.randn(2, 3) # 2行3列,正态分布~N(0,1)
- print(a)
- print(type(a))
- print(a.type())
- print(isinstance(a, torch.FloatTensor))
运行结果:
- tensor([[-0.6646, 0.3935, 1.2683],
- [-1.8576, 0.2761, 1.4787]])
- <class 'torch.Tensor'>
- torch.FloatTensor
- True
从运行结果来看,python内置的类型检测函数type()只能检查该数据是Tensort类型,具体的基本数据类型无法检测出来,而Tensor的成员函数type()更加直观,可以检测出Tensor数据的基本类型。isinstance()函数主要用于判断某数据是否属于某个数据类型,如果属于返回True,否则返回False。
Tensor类型的变量进行类型转换一般有两种方法:
1)Tensor类型的变量直接调用long(), int(), double(),float(),byte()等函数就能将Tensor进行类型转换;
2)在Tensor成员函数type()中直接传入要转换的数据类型。
当你不知道要转换为什么类型时,但需要求a1,a2两个张量的乘积,可以使用a1.type_as(a2)将a1转换为a2同类型。
示例代码:
- import torch
-
- a = torch.randn(2, 3)
- print(a.type())
-
- # 转换为IntTensort类型
- b = a.int()
-
- # 转换为LongTensor类型
- c = a.type(torch.LongTensor)
-
- print(b.type())
- print(c.type())
-
- # 将a转换为与b相同的类型
- a.type_as(b)
- print(a.type())
运行结果:
- torch.FloatTensor
- torch.IntTensor
- torch.LongTensor
- torch.FloatTensor
Tensor和numpy.ndarray之间还可以相互转换,其方式如下:
1)Numpy转化为Tensor:torch.from_numpy(numpy矩阵)
2)Tensor转化为numpy:Tensor矩阵.numpy()
示例代码:
- import torch
- import numpy as np
- # 定义一个3行2列的全为0的矩阵
- b = torch.randn((3, 2))
- # tensor转化为numpy
- numpy_b = b.numpy()
- print(numpy_b)
- # numpy转化为tensor
- numpy_e = np.array([[1, 2], [3, 4], [5, 6]])
- torch_e = torch.from_numpy(numpy_e)
-
- print(numpy_e)
- print(torch_e)
1) CPU张量 ----> GPU张量, 使用Tensor.cuda()
2) GPU张量 ----> CPU张量 使用Tensor.cpu()
我们可以通过torch.cuda.is_available()函数来判断当前的环境是否支持GPU,如果支持,则返回True。所以,为保险起见,在项目代码中一般采取“先判断,后使用”的策略来保证代码的正常运行,其基本结构如下:
- import torch
- # 定义一个3行2列的全为0的矩阵
- tmp = torch.randn((3, 2))
- # 如果支持GPU,则定义为GPU类型
- if torch.cuda.is_available():
- inputs = tmp.cuda()
- # 否则,定义为一般的Tensor类型
- else:
- inputs = tmp
参考链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。