pytorch数据类型及类型转换等

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

文章目录

      • 一、pytorch数据类型及类型转换
      • 二、torch.tensor 和 torch.Tensor的区别
      • 三、pytorch和numpy相互转换
      • 四、np.dot、torch.dot、torch.mm()和torch.matmul()

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

  • 相同:np.dot和torch.dot一维时候等价;
  • 不同:多维时,np.dot为对应元素乘,torch.mm和torch.matmul()才是矩阵乘

你可能感兴趣的:(pytorch,pytorch数据类型,tensor,pytorch和numpy转换,Tensor,np.dot)