一、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
- type函数
指定改变数据类型
# 不会改变原tensor的数据类型
a = torch.tensor([1, 2, 3])
b = a.type(torch.float) # 不改变a的类型
b = a.type(torch.FloatTensor)
- 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() → numpy.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,并保留计算图。
- torch.from_numpy(ndarray) → 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),