文章目录
- 社区
- 开发者笔记
- Python API
- torch
- 张量 Tensors
- torch.is_tensor(obj)
- torch.torch.is_storage(obj)
- torch.is_complex(input)
- torch.is_conj(input)
- torch.is_floating_point(input)
- torch.is_nonzero(input)
- torch.set_default_dtype(d)
- torch.get_default_dtype() -> torch.dtype
- torch.set_default_device(device)
- torch.get_default_device() -> torch.device
- torch.set_default_tensor_type(t)
- torch.numel(input) -> int
- torch.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, profile=None, sci_mode=None)
- torch.set_flush_denormal(mode) → bool
- 创建操作
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.complex64
和 torch.complex128
中的一种,则返回 True。
参数:
- input(Tensor) - 输入张量
torch.is_conj(input)
如果 input
是共轭张量,则返回 True,即其共轭位设置为 True。
参数:
- input(Tensor) - 输入张量
torch.is_floating_point(input)
如果输入的数据类型是浮点数据类型,即 torch.float64
、torch.float32
、torch.float16
和 torch.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 的类型推断。默认浮点类型用于:
-
隐式确定默认复数类型。当默认浮点类型为 float16 时,默认复数类型为 complex32。 对于 float32,默认的复数类型是 complex64。 对于 float64,则是 complex128。 对于 bfloat16,会出现异常,因为 bfloat16 没有相应的复数类型。
-
推断使用 Python 浮点数或 Python 复数构造的张量的 d 类型。请参阅下面的示例。
-
确定 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([])