![](/img/trans.png)
[英]Is it possible to return `nn.Module` rather than `nn.Sequential` in the `_make_layer` of ResNet code?
[英]What is difference between nn.Module and nn.Sequential
我只是作为初学者学习使用 PyTorch。 如果有人熟悉 PyTorch,你能告诉我nn.Module
和nn.Sequential
之间的区别吗?
我的问题是
使用nn.Module
代替nn.Sequential
有什么好处?
哪个经常用于构建模型?
我们应该如何选择nn.Module
或nn.Sequential
?
TLDR;<\/strong> 回答你的问题<\/strong>
使用
nn.Module<\/code>代替
nn.Sequential<\/code>什么
nn.Sequential<\/code> ?
<\/li><\/ol><\/blockquote>
虽然
nn.Module<\/code>是实现 PyTorch 模型的基类,但
nn.Sequential<\/code>是一种在现有
nn.Module<\/code>内部或外部定义顺序神经网络结构的快速方法。
哪个经常用于构建模型?<\/li><\/ol><\/blockquote>两者都被广泛使用。
我们应该如何选择
nn.Module<\/code>或
nn.Sequential<\/code> ?
<\/li><\/ol><\/blockquote>
所有的神经网络都是用
nn.Module<\/code>实现的。
如果按顺序使用层(
self.layer3(self.layer2(self.layer1(x)))<\/code> ,您可以利用
nn.Sequential<\/code>不必定义模型的
forward<\/code>函数。
我应该首先提到
nn.Module<\/code><\/a>是
nn.Module<\/code><\/a>中所有神经网络模块的基类。
因此
nn.Sequential<\/code><\/a>实际上是
nn.Sequential<\/code><\/a>的直接子类,您可以
在这一行<\/a>中
nn.Module<\/code>查找。
这就是您所需要的,因为 PyTorch 将使用Autograd<\/a>处理反向传递。 这是一个模块的示例:
在创建新的神经网络时,您通常会创建一个新类并从
nn.Module<\/code>继承,并定义两个方法:
__init__<\/code>
nn.Module<\/code>
__init__<\/code> (初始化程序,您定义层)和
forward<\/code> (模块的推理代码,其中你使用你的图层)。
如果您定义的模型是顺序的,即<\/em>层在输入上被顺序调用,一个接一个。然后,您可以简单地使用
nn.Sequential<\/code> 。
正如我之前解释的,
nn.Sequential<\/code>是一种特殊的
nn.Module<\/code> ,
nn.Module<\/code>为这种特别广泛的神经网络类型而设计。
这里的等价物是:
或者更简单的说法是:
nn.Sequential<\/code>的目标是快速实现顺序模块,这样您就不需要编写前向定义,因为这些层是在输出上按顺序调用的,所以它是隐式知道的。
但是,在更复杂的模块中,您可能需要使用多个顺序子模块。
例如,以 CNN 分类器为例,您可以为 CNN 部分定义一个
nn.Sequential<\/code> ,然后为模型的全连接分类器部分定义另一个
nn.Sequential<\/code> 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.