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的三角函数运算