参考 从 relu 的多种实现来看 torch.nn 与 torch.nn.functional 的区别与联系 - 云+社区 - 腾讯云
relu多种实现之间的关系:
relu 函数在 pytorch 中总共有 3 次出现:
torch.nn.ReLU()torch.nn.functional.relu_()torch.nn.functional.relu_()torch.relu()torch.relu_()
而这3种不同的实现其实是有固定的包装关系,由上至下是由表及里的过程。其中最后一个实际上并不被 pytorch 的官方文档包含,同时也找不到对应的 python 代码,只是在 __init__.pyi 中存在,因为他们来自于通过C++编写的THNN库。
下面通过分析源码来进行具体分析:
1、torch.nn.ReLU()
torch.nn 中的类代表的是神经网络层,这里我们看到作为类出现的 ReLU() 实际上只是调用了 torch.nn.functional 中的 relu relu_ 实现。
class ReLU(Module):
r"""Applies the rectified linear unit function element-wise:
:math:`\text{ReLU}(x)= \max(0, x)`
Args:
inplace: can optionally do the operation in-place. Default: ``False``
Shape:
- Input: :math:`(N, *)` where `*` means, any number of additional
dimensions
- Output: :math:`(N, *)`, same shape as the input
.. image:: scripts/activation_images/ReLU.png
Examples::
>>> m = nn.ReLU()
>>> input

本文探讨了PyTorch中ReLU函数的三种实现方式,分别是torch.nn.ReLU()、torch.nn.functional.relu(),以及隐藏在C++库THNN中的实现。通过源码分析,揭示了torch.nn与torch.nn.functional之间的包装与引用关系,它们在灵活性和易用性之间取得平衡。torch.nn提供模型层的管理,而torch.nn.functional则包含更多基础函数,允许用户自定义模型组件。
最低0.47元/天 解锁文章
366

被折叠的 条评论
为什么被折叠?



