pytorch数据类型及类型转换等

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

  • 0.pytoch中的数据类型
Data typedtypeCPU tensorGPU tensor
32-bit floating pointtorch.float32 or torch.floattorch.FloatTensortorch.cuda.FloatTensor
64-bit floating pointtorch.float64 or torch.doubletorch.DoubleTensortorch.cuda.DoubleTensor
16-bit floating pointtorch.float16 or torch.halftorch.HalfTensortorch.cuda.HalfTensor
8-bit integer (unsigned)torch.uint8torch.ByteTensortorch.cuda.ByteTensor
8-bit integer (signed)torch.int8torch.CharTensortorch.cuda.CharTensor
16-bit integer (signed)torch.int16 or torch.shorttorch.ShortTensortorch.cuda.ShortTensor
32-bit integer (signed)torch.int32 or torch.inttorch.IntTensortorch.cuda.IntTensor
64-bit integer (signed)torch.int64 or torch.longtorch.LongTensortorch.cuda.LongTensor
Booleantorch.booltorch.BoolTensortorch.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),
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值