【pytorch】relu的实现逻辑

笔者最近在尝试实现AlexNet的底层算子,基于pytorch的框架,本文主要记录一下pytorch中是如何实现relu算子的。

首先最外层是位于torch\nn\modules\activation.py,主要代码如下:

py 复制代码
    __constants__ = ["inplace"]
    inplace: bool

    def __init__(self, inplace: bool = False):
        super().__init__()
        self.inplace = inplace

    def forward(self, input: Tensor) -> Tensor:
        return F.relu(input, inplace=self.inplace)

    def extra_repr(self) -> str:
        inplace_str = "inplace=True" if self.inplace else ""
        return inplace_str

调用的是位于torch\nn\functional.py的如下代码:

py 复制代码
def relu(input: Tensor, inplace: bool = False) -> Tensor:  # noqa: D400,D402
    r"""relu(input, inplace=False) -> Tensor

    Applies the rectified linear unit function element-wise. See
    :class:`~torch.nn.ReLU` for more details.
    """
    if has_torch_function_unary(input):
        return handle_torch_function(relu, (input,), input, inplace=inplace)
    if inplace:
        result = torch.relu_(input)
    else:
        result = torch.relu(input)
    return result

然后调用的是aten\src\ATen\native\Activation.cpp的如下代码:

复制代码
Tensor relu(const Tensor & self) {
  TORCH_CHECK(self.scalar_type() != at::kBool, "Boolean inputs not supported for relu");
  return at::clamp_min(self, 0);
}

可以看到,主要就是一个大小的比较。

pytorch调试工具

先说问题,只能看到python的处理逻辑,不能看到底层的C++的处理逻辑。

如何使用,参考的是这篇文章。注意,pdb虽然是python内置的包,但是仍然需要通过import pdb导入才能使用。

还有一个问题就是,pytorch是如何通过python代码调用C++代码的,留到下一篇博文更新。

相关推荐
可观测性用观测云6 分钟前
观测云 MCP Server 接入和使用最佳实践
人工智能
掘金一周12 分钟前
大部分人都错了!这才是chrome插件多脚本通信的正确姿势 | 掘金一周 11.27
前端·人工智能·后端
xier_ran33 分钟前
深度学习:生成对抗网络(GAN)详解
人工智能·深度学习·机器学习·gan
ModestCoder_42 分钟前
ROS Bag与导航数据集技术指南
开发语言·人工智能·自然语言处理·机器人·具身智能
海边夕阳20061 小时前
【每天一个AI小知识】:什么是循环神经网络?
人工智能·经验分享·rnn·深度学习·神经网络·机器学习
2501_918126911 小时前
如何用ai做开发
人工智能
f***a3461 小时前
开源模型应用落地-工具使用篇-Spring AI-高阶用法(九)
人工智能·spring·开源
用户5191495848451 小时前
BBDown:高效便捷的哔哩哔哩视频下载工具
人工智能·aigc
CV实验室1 小时前
CV论文速递:覆盖视频生成与理解、3D视觉与运动迁移、多模态与跨模态智能、专用场景视觉技术等方向 (11.17-11.21)
人工智能·计算机视觉·3d·论文·音视频·视频生成
●VON1 小时前
AI不能做什么?澄清常见误解
人工智能