为什么torch.nn.Sigmoid是类而不是方法?

时间:2019-04-10 21:06:10

标签: python pytorch

我正在尝试了解pytorch的工作原理。通常,在定义神经网络类时,在 init ()构造函数中,人们编写self.sigmoid = nn.Sigmoid(),以便在forward()方法中可以调用sigmoid函数每次都必须重新实例化nn.Sigmoid()。

但是nn.Sigmoid为什么不只是一个方法而不是一个类呢?

此外,我很好奇在torch.nn中将“ nn”称为(包?库?)。

谢谢!

2 个答案:

答案 0 :(得分:2)

Sigmoid可作为模块torch.nn.Sigmoid和函数torch.sigmoid使用。两者是等效的:模块只是函数的包装。

主要由于历史原因而存在该模块:PyTorch基于Lua torch7软件包。在torch7中,所有可区分的神经网络功能均作为模块实现。该模块也可以在torch.nn.Sequential块中用于具有简单前馈结构的网络。

除此之外,与功能形式相比,使用模块形式没有任何优势。

nn中的torch.nn代表“神经网络”。

答案 1 :(得分:1)

我的理解是nn.Sigmoid可以与其他nn层组成,例如:

net = nn.Sequential(
      nn.Linear(3, 4),
      nn.Sigmoid())

如果您不需要此功能,则可以使用torch.sigmoid函数。