『Python』PyTorch 文档 01 - torch 模块(持续更新中 15/332)


PyTorch 是一个优化的张量库,用于使用 GPU 和 CPU 进行深度学习。

本文档中描述的功能按发布状态分类:

  • 稳定版Stable): 这些特性将得到长期维护,一般不会出现重大的性能限制或文档空白。 我们还希望保持向后兼容性(尽管可能会发生重大变更,但我们会提前一个版本发布通知)。

  • 测试版Beta): 这些功能之所以被标记为测试版,是因为应用程序接口可能会根据用户反馈进行更改,因为性能需要改进,或者因为尚未完全覆盖所有运营商。 对于 Beta 版功能,我们承诺将该功能一直保持到稳定版。

  • 原版Prototype): 这些功能通常不会作为 PyPI 或 Conda 等二进制发行版的一部分提供,只是有时会在运行时标志后面提供,而且还处于反馈和测试的早期阶段。


社区


开发者笔记

语言绑定:


Python API

torch

torch 包包含多维张量的数据结构,并定义了对这些张量的数学运算。此外,它还为张量和任意类型的高效序列化提供了许多实用工具,并提供了其他有用的实用工具。

它还有一个对应的 CUDA,可以让你在计算能力大于等于 3.0 的英伟达(NVIDIA)GPU 上运行张量计算。

张量 Tensors

torch.is_tensor(obj)

如果 obj 是 PyTorch 张量,则返回 True。

参数:

  • obj(Object) - 要测试的对象

例:

>>> x = torch.tensor([1, 2, 3])
>>> torch.is_tensor(x)
True
torch.torch.is_storage(obj)

如果 obj 是 PyTorch 存储对象,则返回 True。

参数:

  • obj(Object) - 要测试的对象
torch.is_complex(input)

如果 input 的数据类型是复数数据类型,即 torch.complex64torch.complex128 中的一种,则返回 True。

参数:

  • input(Tensor) - 输入张量
torch.is_conj(input)

如果 input 是共轭张量,则返回 True,即其共轭位设置为 True

参数:

  • input(Tensor) - 输入张量
torch.is_floating_point(input)

如果输入的数据类型是浮点数据类型,即 torch.float64torch.float32torch.float16torch.bfloat16 中的一种,则返回 True。

参数:

  • input(Tensor) - 输入张量
torch.is_nonzero(input)

如果 input 是类型转换后不等于零的单元素张量,即不等于 torch.tensor([0.])torch.tensor([0])torch.tensor([False]),则返回 True。 如果 torch.numel() != 1(即使是稀疏张量),则会抛出 RuntimeError 错误。

参数:

  • input(Tensor) - 输入张量

例:

>>> torch.is_nonzero(torch.tensor([0.]))
False
>>> torch.is_nonzero(torch.tensor([1.5]))
True
>>> torch.is_nonzero(torch.tensor([False]))
False
>>> torch.is_nonzero(torch.tensor([3]))
True
>>> torch.is_nonzero(torch.tensor([1, 3, 5]))
Traceback (most recent call last):
...
RuntimeError: bool value of Tensor with more than one value is ambiguous
>>> torch.is_nonzero(torch.tensor([]))
Traceback (most recent call last):
...
RuntimeError: bool value of Tensor with no values is ambiguous
torch.set_default_dtype(d)

设置默认浮点类型为 d。支持浮点类型作为输入。 其他 dtype 会导致 torch 引发异常。

PyTorch 初始化时的默认浮点 dtype 是 torch.float32,set_default_dtype(torch.float64) 的目的是方便类似 NumPy 的类型推断。默认浮点类型用于:

  1. 隐式确定默认复数类型。当默认浮点类型为 float16 时,默认复数类型为 complex32。 对于 float32,默认的复数类型是 complex64。 对于 float64,则是 complex128。 对于 bfloat16,会出现异常,因为 bfloat16 没有相应的复数类型。

  2. 推断使用 Python 浮点数或 Python 复数构造的张量的 d 类型。请参阅下面的示例。

  3. 确定 bool 和整数张量以及 Python 浮点数和 Python 复数之间的类型推广结果。

参数:

  • d(torch.dtype) - 浮点类型。可以是 torch.float32 或 torch.float64

例:

>>> # 浮点运算的初始默认值为 torch.float32
>>> # Python 浮点数被解释为 float32
>>> torch.tensor([1.2, 3]).dtype
torch.float32
>>> # 浮点运算的初始默认值为 torch.complex64
>>> # 复数 Python 被解释为 complex64
>>> torch.tensor([1.2, 3j]).dtype
torch.complex64
>>> torch.set_default_dtype(torch.float64)
>>> # Python 浮点数现在解释为 float64
>>> torch.tensor([1.2, 3]).dtype    # 一个新的浮点张量
torch.float64
>>> # 复数 Python 现在解释为 complex128
>>> torch.tensor([1.2, 3j]).dtype   # 一个新的复合张量
torch.complex128
>>> torch.set_default_dtype(torch.float16)
>>> # Python 浮点数现在解释为 float16
>>> torch.tensor([1.2, 3]).dtype    # 一个新的浮点张量
torch.float16
>>> # 复数 Python 现在解释为 complex128
>>> torch.tensor([1.2, 3j]).dtype   # 一个新的复合张量
torch.complex32
torch.get_default_dtype() -> torch.dtype

获取当前默认浮点类型 torch.dtype。

例:

>>> torch.get_default_dtype()  # 浮点运算的初始默认值为 torch.float32
torch.float32
>>> torch.set_default_dtype(torch.float64)
>>> torch.get_default_dtype()  # 默认值现在改为 torch.float64
torch.float64
torch.set_default_device(device)

设置在 device 上分配的默认 torch.Tensor。这不会影响使用明确的 device 参数调用的工厂函数调用。工厂调用将以传递 device 作为参数的方式执行。

如果只想临时更改默认设备而不是全局设置,请使用 with torch.device(device):

默认设备最初是 cpu。如果将默认的张量设备设置为其他设备(例如 cuda)而没有设备索引,那么即使调用了 torch.cuda.set_device(),张量也将在设备类型的当前设备上分配。

警告:该函数会对 Python 调用 torch API(不仅仅是工厂函数)造成轻微的性能损失。 如果这给您带来了问题,请在 https://github.com/pytorch/pytorch/issues/92701 上发表评论。

注意:这不会影响创建与输入共享同一内存的张量的函数,如:torch.from_numpy()torch.frombuffer()

参数:

  • device(torch.device 或 string) - 要设置为默认设置的设备

例:

>>> torch.get_default_device()
device(type='cpu')
>>> torch.set_default_device('cuda')  # 当前设备为 0
>>> torch.get_default_device()
device(type='cuda', index=0)
>>> torch.set_default_device('cuda')
>>> torch.cuda.set_device('cuda:1')  # 当前设备为 1
>>> torch.get_default_device()
device(type='cuda', index=1)
>>> torch.set_default_device('cuda:1')
>>> torch.get_default_device()
device(type='cuda', index=1)
torch.get_default_device() -> torch.device

获取要在 device 上分配的默认 torch.Tensor

torch.set_default_tensor_type(t)

警告:从 PyTorch 2.1 起,该函数已被弃用,请使用 torch.set_default_dtype()torch.set_default_device() 作为替代。

将默认 torch.Tensor 类型设置为浮点张量类型 t。该类型也将用作 torch.tensor() 中类型推理的默认浮点类型。

默认浮点张量类型最初是 torch.FloatTensor

参数:

  • t(type 或 string) - 浮点张量类型或其名称

例:

>>> torch.tensor([1.2, 3]).dtype    # 浮点运算的初始默认值为 torch.float32
torch.float32
>>> torch.set_default_tensor_type(torch.DoubleTensor)
>>> torch.tensor([1.2, 3]).dtype    # 一个新的浮点张量
torch.float64
torch.numel(input) -> int

返回 input 张量中元素的总数。

参数:

  • input(Tensor) - 输入张量

例:

>>> a = torch.randn(1, 2, 3, 4, 5)
>>> torch.numel(a)
120
>>> a = torch.zeros(4,4)
>>> torch.numel(a)
16
torch.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, profile=None, sci_mode=None)

设置打印选项。无耻地取自 NumPy 的项目。

参数:

  • precision - 浮点输出的精度位数(默认=4)。
  • threshold - 触发汇总而非完全重现的数组元素总数(默认 =1000)。
  • edgeitems - 每个维度开始和结束时汇总的数组项数(默认 =3)。
  • linewidth - 用于插入换行符的每行字符数(默认 =80)。阈值矩阵将忽略此参数。
  • profile - 漂亮打印的合理默认值。可使用上述任何选项覆盖(default, short, full 中的任意一个)。
  • sci_mode - 启用(True)或禁用(False)科学符号。 如果指定的是 None(默认值),则该值由 torch._tensor_str._Formatter 定义。该值由框架自动选择。

例:

>>> # 限制元素的精度
>>> torch.set_printoptions(precision=2)
>>> torch.tensor([1.12345])
tensor([1.12])
>>> # 限制显示元素的数量
>>> torch.set_printoptions(threshold=5)
>>> torch.arange(10)
tensor([0, 1, 2, ..., 7, 8, 9])
>>> # 恢复默认值
>>> torch.set_printoptions(profile='default')
>>> torch.tensor([1.12345])
tensor([1.1235])
>>> torch.arange(10)
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
torch.set_flush_denormal(mode) → bool

禁用 CPU 上的非正态浮点数。

如果系统支持刷新非正态数,并且成功配置了刷新非正态数模式,则返回 True。 支持 SSE3 和 AArch64 架构的 x86 体系结构支持 set_flush_denormal()

参数:

  • mode(bool) - 浮点输出的精度位数(默认=4)。

例:

>>> torch.set_flush_denormal(True)
True
>>> torch.tensor([1e-323], dtype=torch.float64)
tensor([ 0.], dtype=torch.float64)
>>> torch.set_flush_denormal(False)
True
>>> torch.tensor([1e-323], dtype=torch.float64)
tensor(9.88131e-324 *
       [ 1.0000], dtype=torch.float64)

创建操作

注意:随机取样创建操作列在 Random 下,包括: torch.rand() torch.rand_like() torch.randn() torch.randn_like() torch.randint() torch.randint_like() torch.randperm() 您也可以使用 torch.empty()In-place random sampling 方法来创建 torch.Tensor,其值取自更广泛的分布。

torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False) -> torch.Tensor

通过复制 data,构建一个没有 Autograd 历史的张量(也称为 “叶子张量”,参见自格拉德力学)。

警告:在处理张量时,为了便于阅读,我们倾向于使用 torch.Tensor.clone()torch.Tensor.detach()torch.Tensor.requires_grad_()。 如果 t 是一个张量,torch.tensor(t) 相当于 t.clone().detach(),而 torch.tensor(t, requires_grad=True) 相当于 t.clone().detach().requires_grad_(True)

另请参阅:
torch.as_tensor() 保存 autograd 历史记录,并尽可能避免复制。
torch.from_numpy() 创建与 NumPy 数组共享存储空间的张量。

参数:

  • data(array_like) - 张量的初始数据。可以是 list、tuple、NumPy ndarray、标量和其他类型。

关键字:

  • dtype(torch.dtype,可选) - 返回张量的数据类型。 默认:如果是 None,则从 data 中推断数据类型。
  • device(torch.device,可选) - 构造张量的设备。如果为 None 且数据是张量,则使用数据的设备。 如果为 None 但数据不是张量,则在当前设备上构建结果张量。
  • requires_grad(bool,可选) - autograd 是否应记录对返回张量的操作。默认值:False
  • pin_memory(bool,可选) - 如果设置,返回的张量将分配到钉住内存中。仅适用于 CPU 张量。默认:False

例:

>>> torch.tensor([[0.1, 1.2], [2.2, 3.1], [4.9, 5.2]])
tensor([[ 0.1000,  1.2000],
        [ 2.2000,  3.1000],
        [ 4.9000,  5.2000]])

>>> torch.tensor([0, 1])  # 数据类型推断
tensor([ 0,  1])

>>> torch.tensor([[0.11111, 0.222222, 0.3333333]],
...              dtype=torch.float64,
...              device=torch.device('cuda:0'))  # 在 CUDA 设备上创建一个双张量
tensor([[ 0.1111,  0.2222,  0.3333]], dtype=torch.float64, device='cuda:0')

>>> torch.tensor(3.14159)  # 创建零维(标量)张量
tensor(3.1416)

>>> torch.tensor([])  # 创建一个空张量(大小为 (0,))
tensor([])
  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值