You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

扩展nn.Module实现时@运算符的使用方法疑问

关于PyTorch代码中@运算符的说明

首先明确结论:此处的@不是装饰器语法,是Python 3.5+ 新增的矩阵乘法运算符,属于数值计算场景的专用语法支持。

核心原理

  • Python从3.5版本开始通过PEP 465标准新增了@运算符,专门用于表示矩阵乘法操作,对应的类魔法方法为__matmul__()。任意自定义类只要实现了该方法,都可以使用@做自定义运算。
  • PyTorch的Tensor类型已经原生实现了__matmul__方法,内部逻辑就是调用矩阵乘法计算,因此两个Tensor之间用@连接时,会自动执行矩阵乘法。

代码等价验证

你提供的代码中:

input_ @ self.weight

完全等价于以下两种写法:

# 通用高维矩阵乘法API
torch.matmul(input_, self.weight)
# 2维张量专属矩阵乘法API,此处两个张量都是2维,因此也适用
torch.mm(input_, self.weight)

结合你的代码参数验证:input_形状为(100, 5),self.weight形状为(5, 2),矩阵乘法输出形状为(100, 2),叠加广播后的bias后结果符合断言要求。

和装饰器语法的区别

@的两种用法语法位置完全不同,Python解释器不会混淆:

  • 作为装饰器使用时,@必须单独写在函数/类定义的上一行,后面紧跟装饰器对象
  • 作为矩阵乘法运算符使用时,@写在两个运算对象中间,属于二元运算符

内容的提问来源于stack exchange,提问作者user785099

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:24:03