PyTorch 将运算符映射到函数

Posted

技术标签:

【中文标题】PyTorch 将运算符映射到函数【英文标题】:PyTorch mapping operators to functions 【发布时间】:2019-04-21 12:57:03 【问题描述】:

什么是 PyTorch 运算符,它们的功能等价物是什么?

例如,a @ b 是否等同于 a.mm(b)a.matmul(b)

我在寻找一个规范的操作符列表 -> 函数映射。

我很高兴收到 PyTorch 文档链接作为答案 - 我的 googlefu 无法找到它。

【问题讨论】:

尽管它不像文档链接那么清楚,但这里是运算符的实际定义,即+__add__:github.com/pytorch/pytorch/blob/… 不是当前版本,我没有在当前的版本中找到了这么明确的定义,但我想并没有太大的变化)所以你可以检查一下当时叫什么。 @__matmul__ 定义。其余的请查看this python docs site,希望对您有所帮助。 @blue-phoenox 鉴于这两个链接,我如何推断出@ -> matmul 检查并检查:***.com/questions/27385633/… 并检查给定(第一个)链接中的 __matmul__ 函数。 【参考方案1】:

Python 文档表 Mapping Operators to Functions 提供来自以下位置的规范映射:

操作员 -> __function__()

例如:

Matrix Multiplication        a @ b        matmul(a, b)

在页面的其他位置,您会看到 __matmul__ 名称作为 matmul 的替代名称。

PyTorch __functions__ 的定义位于:

torch.Tensor module documentation

python_variable_methods.cpp

您可以在以下位置查找命名函数的文档:

https://pytorch.org/docs/stable/torch.html?#torch.<FUNCTION-NAME>

【讨论】:

那么x.mm(y) 是什么? @CharlieParker .mm() is a non-broadcasting .matmul()【参考方案2】:

这定义了 0.3.1 的张量运算(它也包含其他运算符的定义): https://pytorch.org/docs/0.3.1/_modules/torch/tensor.html

当前 stable 的代码已经重新排列(我猜他们现在在 C 中做的更多),但由于矩阵乘法的行为没有改变,我认为假设这仍然有效是节省的。

__matmul__的定义见:

def __matmul__(self, other):
    if not torch.is_tensor(other):
        return NotImplemented
    return self.matmul(other)

def matmul(self, other):
    r"""Matrix product of two tensors.

    See :func:`torch.matmul`."""
    return torch.matmul(self, other)

运算符@ 与PEP 465 一起引入并映射到__matmul__

请参见此处:What is the '@=' symbol for in Python?

【讨论】:

干杯!仅供参考,我想我找到了canonical answer

以上是关于PyTorch 将运算符映射到函数的主要内容,如果未能解决你的问题,请参考以下文章

[PyTroch系列-6]:PyTorch基础 - 张量Tensor的三角函数运算

ES6 扩展运算符

PyTorch中的matmul函数详解

如何将折叠左侧运算符“:/”转换为scala中的foldLeft函数?

深度学习03:PyTorch的数据类型Tensor

我可以将字符串映射到java中的方法吗?