当前位置:   article > 正文

Pytorch Tensor以及Tensor的基本数据类型_tensor type

tensor type

类型定义

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()

示例代码:

  1. import torch
  2. a = torch.randn(2, 3) # 2行3列,正态分布~N(0,1)
  3. print(a)
  4. print(type(a))
  5. print(a.type())
  6. print(isinstance(a, torch.FloatTensor))

运行结果:

  1. tensor([[-0.6646, 0.3935, 1.2683],
  2. [-1.8576, 0.2761, 1.4787]])
  3. <class 'torch.Tensor'>
  4. torch.FloatTensor
  5. 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同类型。

示例代码:

  1. import torch
  2. a = torch.randn(2, 3)
  3. print(a.type())
  4. # 转换为IntTensort类型
  5. b = a.int()
  6. # 转换为LongTensor类型
  7. c = a.type(torch.LongTensor)
  8. print(b.type())
  9. print(c.type())
  10. # 将a转换为与b相同的类型
  11. a.type_as(b)
  12. print(a.type())

运行结果:

  1. torch.FloatTensor
  2. torch.IntTensor
  3. torch.LongTensor
  4. torch.FloatTensor

Tensor与Numpy ndarray之间的转换

Tensor和numpy.ndarray之间还可以相互转换,其方式如下:

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

2)Tensor转化为numpy:Tensor矩阵.numpy()

示例代码:

  1. import torch
  2. import numpy as np
  3. # 定义一个3行2列的全为0的矩阵
  4. b = torch.randn((3, 2))
  5. # tensor转化为numpy
  6. numpy_b = b.numpy()
  7. print(numpy_b)
  8. # numpy转化为tensor
  9. numpy_e = np.array([[1, 2], [3, 4], [5, 6]])
  10. torch_e = torch.from_numpy(numpy_e)
  11. print(numpy_e)
  12. print(torch_e)

CPU或GPU张量之间的转

1) CPU张量 ---->  GPU张量, 使用Tensor.cuda()

2) GPU张量 ----> CPU张量 使用Tensor.cpu()

我们可以通过torch.cuda.is_available()函数来判断当前的环境是否支持GPU,如果支持,则返回True。所以,为保险起见,在项目代码中一般采取“先判断,后使用”的策略来保证代码的正常运行,其基本结构如下:

  1. import torch
  2. # 定义一个3行2列的全为0的矩阵
  3. tmp = torch.randn((3, 2))
  4. # 如果支持GPU,则定义为GPU类型
  5. if torch.cuda.is_available():
  6. inputs = tmp.cuda()
  7. # 否则,定义为一般的Tensor类型
  8. else:
  9. inputs = tmp

参考链接:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/272471?site
推荐阅读
相关标签
  

闽ICP备14008679号