首页人工智能Pytorch【深度学习(PyTorch...

【深度学习(PyTorch篇)】5.Tensor的数据类型


本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1XuxKa9_G00NznvSK0cr5qw?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/PyTorch





01

Tensor的数据类型:


Tensor的数据类型(也称为dtype)指定了张量中元素的底层存储类型。每种数据类型都有其特定的存储大小和表示范围。
以下是一些常见的Tensor数据类型及其特点:
  • torch.float32 / torch.float: 32位浮点数,张量的默认数据类型。这是深度学习中最常用的数据类型,因为它提供了足够的精度来表示大多数网络参数和激活值。
  • torch.float64 / torch.double: 64位双精度浮点数。这种类型提供了更高的精度,但也需要更多的存储空间,它通常用于需要更高数值稳定性的科学计算。
  • torch.float16 / torch.half: 16位半精度浮点数。这种类型在标准CPU中并不存在,而是由现代GPU提供的。该类型在需要减少内存使用或加快计算速度时很有用,但可能会有精度损失。
  • torch.int8: 8位有符号整数。
  • torch.uint8: 8位无符号整数(0到255)。常用于图像处理中表示像素值。
  • torch.int16 / torch.short: 16位有符号整数。整数张量常用于索引或表示不能是浮点数的数据。
  • torch.int32 / torch.int: 32位有符号整数。
  • torch.int64 / torch.long: 64位有符号整数。当整数范围超过32位时,可以使用此类型。
  • torch.bool: 布尔类型,用于存储True或False值。

完整的数据类型介绍可以查看官方文档:

https://pytorch.org/docs/stable/tensors.html#data-types
Tensor的默认数据类型为FloatTensor,即32位浮点数,可以通过torch.set_default_tensor_type()修改默认的数据类型:
>>> tensor = torch.rand(2,3)
>>> tensor
tensor([[0.45010.0196, 0.0087],
        [0.62530.15200.5375]])
>>> tensor.dtype
torch.float32

# 将默认数据类型设置为float64
>>> torch.set_default_tensor_type('torch.DoubleTensor')
>>> tensor_new = torch.rand(2,3)
>>> tensor_new
tensor([[0.49220.31900.8848],
        [0.46110.03000.3920]])
>>> tensor_new.dtype
torch.float64

02

指定和更改Tensor的数据类型:


PyTorch中,可以在创建Tensor时指定其数据类型,也可以在创建后更改其数据类型
  • 创建时指定数据类型:
当使用torch.tensor()或相关函数(如torch.rand(), torch.ones()等)创建Tensor时,可以通过dtype参数指定数据类型,如需查看Tensor的数据类型可以访问其dtype属性来获取
# 创建一个float32类型的Tensor
>>> float_tensor = torch.tensor([1.02.03.0], dtype=torch.float32)
>>> float_tensor.dtype
torch.float32

# 创建一个int64类型的Tensor
>>> int64_tensor = torch.tensor([123], dtype=torch.int64)
>>> int64_tensor.dtype
torch.int64

也可以通过type()方法获取,或者使用isinstance()方法进行数据类型检验。

# 使用.type()方法可以返回一个str
>>> float_tensor.type()
'torch.FloatTensor'

# 使用isinstance()方法进行数据类型检验
>>> isinstance(int64_tensor , torch.LongTensor)
True
  • 更改现有Tensor的数据类型:
如果已经有一个Tensor并希望更改其数据类型,可以使用相应的转换方法进行转换:
# 将float32转换为float64类型
>>> double_tensor = float_tensor.double()
>>> double_tensor.dtype
torch.float64

# 将int64转换为int16类型
>>> int16_tensor = int64_tensor.short()
>>> int16_tensor.dtype
torch.int16
也可以使用更方便的to()方法,该方法在底层会检查转换是否是必要的,如果必要,则执行转换,另外to()法还可以接收其他参数(后续在张量的设备属性中会介绍)。
# 将float32转换为float16类型
>>> half_tensor = float_tensor.to(torch.half)
>>> half_tensor.dtype
torch.float16
type()方法也可以完成操作,不过推荐使用to()方法:
# 将int64转换为int32类型
>>> int32_tensor = int64_tensor.type(torch.int)
>>> int32_tensor.dtype
torch.int32
需要注意的是,在操作中输入多种数据类型时,输入会自动向较大类型转换。
例如,将浮点数Tensor转换为整数Tensor时,任何小数部分都将被截断。同样地,在将更大范围的整数转换为较小范围的整数时,可能会发生溢出。因此,在更改数据类型时,请确保您了解可能发生的数值变化。
>>> tensor_1 = torch.rand(5 , dtype=torch.float64)
>>> tensor_1
tensor([0.67390.83140.56750.24970.8152])

>>> tensor_2 = tensor_1.to(dtype=torch.int16)
>>> tensor_2
tensor([00000], dtype=torch.int16)

>>> tensor_3 = tensor_1 + tensor_2
>>> tensor_3
tensor([0.67390.83140.56750.24970.8152])
>>> tensor_3.dtype
torch.float64
总之,Tensor的数据类型在PyTorch中非常重要,因为它不仅影响存储效率,还影响计算精度和性能。正确选择和管理数据类型是高效使用PyTorch的关键部分。

更多内容可以前往官网查看

https://pytorch.org/


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments