一、pytorch数据类型及类型转换

  • 0.pytoch中的数据类型
Data type dtype CPU tensor GPU tensor
32-bit floating point torch.float32 or torch.float torch.FloatTensor torch.cuda.FloatTensor
64-bit floating point torch.float64 or torch.double torch.DoubleTensor torch.cuda.DoubleTensor
16-bit floating point torch.float16 or torch.half torch.HalfTensor torch.cuda.HalfTensor
8-bit integer (unsigned) torch.uint8 torch.ByteTensor torch.cuda.ByteTensor
8-bit integer (signed) torch.int8 torch.CharTensor torch.cuda.CharTensor
16-bit integer (signed) torch.int16 or torch.short torch.ShortTensor torch.cuda.ShortTensor
32-bit integer (signed) torch.int32 or torch.int torch.IntTensor torch.cuda.IntTensor
64-bit integer (signed) torch.int64 or torch.long torch.LongTensor torch.cuda.LongTensor
Boolean torch.bool torch.BoolTensor torch.cuda.BoolTensor

dtype查看数据类型

a = torch.tensor([1, 2, 3])
a.dtype # torch.int64
a.type # <built-in method type of Tensor object at 0x000002063E71C728>
  • 1.直接转换
# 不会改变原tensor的数据类型
a = torch.tensor([1, 2, 3])
b = a.long() # torch.int 64
b = a.half() # torch.float 16
b = a.int() # torch.int32
b = a.double() # torch.float64
b = a.float() # torch.float32
b = a.char() # torch.int8
b = a.byte() # torch.unint8
b = a.short() # torch.int16
  1. type函数
    指定改变数据类型
# 不会改变原tensor的数据类型
a = torch.tensor([1, 2, 3])
b = a.type(torch.float) # 不改变a的类型
b = a.type(torch.FloatTensor)
  1. type_as函数
    可以把tensor类型变为另一个tensor的类型
# 不会改变原tensor的数据类型
a = torch.LongTensor([1, 2, 3])
b = torch.DoubleTensor([1, 2, 3])
c = a.type_as(b)  # 不改变a的类型

二、torch.tensor 和 torch.Tensor的区别

  • 相同:
    都可以创建tensor
  • 不同:
    torch.Tensor是一个类,默认为torch.FloatTensor;
    torch.tensor是函数,可以输入 list, tuple, NumPy ndarray, scalar等创建一个新的tensor,默认类型和输入有关
torch.tensor(data, dtype=None, device=None, requires_grad=False)
  • example
import torch
a = torch.tensor([1, 2])
b = torch.tensor([1., 2.])
c = torch.Tensor([1, 2])
print(a.dtype) # torch.int64
print(b.dtype) # torch.float32
print(c.dtype) # torch.float32

三、pytorch和numpy相互转换

  • tensor转numpy
    • numpy() → numpy.ndarray
      tensor和ndarray共享内存
  • numpy转tensor
    • torch.from_numpy(ndarray) → Tensor
      tensor和ndarray共享内存
    • torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False) → Tensor
      创建新tensor,不共享内存
    • torch.as_tensor(data, dtype=None, device=None) → Tensor
      输入有相同dtype和设备号的Tensor,或者相同dtype的cpu上的ndarray会共享内存;
      输入是具有require_grad = True的Tensor,则将返回新的Tensor,并保留计算图。

四、np.dot、torch.dot、torch.mm()、torch.matmul()和torch.bmm()

  • 相同:np.dot和torch.dot一维时候等价;
  • 不同:多维时,np.dot为对应元素乘,torch.mm是矩阵乘可以处理二维矩阵、torch.matmul可以处理多维tensor,torch.bmm两个三维张量相乘(第一个维度是batch size),
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐