nn.Sequential和nn.Module区别与选择

nn.Sequential和nn.Module区别与选择一 nn Sequentialto nn Sequential 是一个 Sequential 容器 模块将按照构造函数中传递的顺序添加到模块中 另外 也可以传入一个有序模块 为了更容易理解 官方给出了一些案例 Sequential 使用实例 model nn Sequential nn Conv2d 1 20 5 nn ReLU

一、nn.Sequential

torch.nn.Sequential是一个Sequential容器,模块将按照构造函数中传递的顺序添加到模块中。另外,也可以传入一个有序模块。 为了更容易理解,官方给出了一些案例:

# Sequential使用实例 model = nn.Sequential( nn.Conv2d(1,20,5), nn.ReLU(), nn.Conv2d(20,64,5), nn.ReLU() ) # Sequential with OrderedDict使用实例 model = nn.Sequential(OrderedDict([ ('conv1', nn.Conv2d(1,20,5)), ('relu1', nn.ReLU()), ('conv2', nn.Conv2d(20,64,5)), ('relu2', nn.ReLU()) ])) 

二、nn.Module

下面我们再用 Module 定义这个模型,下面是使用 Module 的模板

 class 网络名字(nn.Module): def __init__(self, 一些定义的参数): super(网络名字, self).__init__() self.layer1 = nn.Linear(num_input, num_hidden) self.layer2 = nn.Sequential(...) ... 定义需要用的网络层 def forward(self, x): # 定义前向传播 x1 = self.layer1(x) x2 = self.layer2(x) x = x1 + x2 ... return x 

注意的是,Module 里面也可以使用 Sequential,同时 Module 非常灵活,具体体现在 forward 中,如何复杂的操作都能直观的在 forward 里面执行

三、对比

为了方便比较,我们先用普通方法搭建一个神经网络。

class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) self.predict = torch.nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.predict(x) return x net1 = Net(1, 10, 1) net2 = torch.nn.Sequential( torch.nn.Linear(1, 10), torch.nn.ReLU(), torch.nn.Linear(10, 1) ) 

打印这两个net

print(net1) """ Net ( (hidden): Linear (1 -> 10) (predict): Linear (10 -> 1) ) """ print(net2) """ Sequential ( (0): Linear (1 -> 10) (1): ReLU () (2): Linear (10 -> 1) ) """ 

解析源码,在torch.nn.Sequential中:

 def forward(self, input): for module in self: input = module(input) return input 

可以看到,torch.nn.Sequential的forward只是简单的顺序传播,操作性有限.

总结

  • 使用torch.nn.Module,我们可以根据自己的需求改变传播过程,如RNN等
  • 如果你需要快速构建或者不需要过多的过程,直接使用torch.nn.Sequential即可。

参考:pytorch官方手册

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225249.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:44
下一篇 2026年3月17日 上午9:45


相关推荐

  • 【数据结构】字典树TrieTree图文详解

    【数据结构】字典树TrieTree图文详解问题引入现在,我给你n个单词,然后进行q次询问,每一次询问一个单词b,问你b是否出现在n个单词中,你会如何去求呢?暴力搜索?但是我们如果这么做的话时间复杂度一下就高上去了。大家都是成熟的ACMer了,不要再惦记着暴力的方法啦,要优雅。你想想,问题的描述像不像查字典的操作?你平时是怎么查字典的?想想看?如果你要在字典中查找单词“Avalon”,你是不是先找到首字母为‘A’的部分,然后再找第二个单词为‘V’的部分······最后,你可能可以找到这个单词,当然,也有可能这本词典并没有这个单词。你想想看,

    2025年9月26日
    6
  • Razor视图引擎

    Razor视图引擎1 ASP NET nbsp MVC3 nbsp 带来了一种新的名为 Razor nbsp 的视图引擎 提供了下列优点 Razor nbsp 的语法简单且清晰 只需要最小化的输入 Razor nbsp 容易学习 语法类似于 nbsp C nbsp 和 nbsp VBVisual nbsp Studio nbsp 对于 nbsp Razor nbsp 提供了智能提示和语法着色 Razor nbsp 视图不需要允许程序或者启动 nbsp Web nbsp 服务器就可以进行测试 2 Razor nbsp 现在提供了一些新的特征 model nbsp

    2026年3月18日
    2
  • 搭建云计算平台(云计算管理平台搭建)

    搭建云计算平台Openstack是一个开源项目。任何公司或个人都可以构建自己的云计算环境,这已经打破了亚马逊等少数公司的垄断,意义重大。简介:如果你是开源社区的CTO或代码贡献者,你一定听说过openstack。Openstack是由网络主机服务提供商Rackspace和NASA联合发起的一个开源项目。其目的是开发一套开源软件标准。任何公司或个人都可以建立自己的云计算环境(IAAs),这打破了亚…

    2022年4月18日
    219
  • 视频监控传输设备_网络视频监控平台

    视频监控传输设备_网络视频监控平台高清视频传输系统传输系统是整个社会治安视频监控网络的数据传送平台,承担着平安城市从接入点中心以之间的视频数据传输重担,是搭建整个监控网络的血脉,因此,治安视频监控网络传输系统将采用全数字化的计算机网络传输系统,从监控点的接入到监控中心的数据汇聚完全采用全数字化通道,整个传输网络结构主干万兆汇聚,千兆到监控点接入,户外接入层交换机选用宽温宽压工业级交换机产品,保证视频数据的无阻塞、无延迟传输以及与原…

    2022年10月4日
    8
  • 易经六十四卦详解与应用_六十四卦推演方法

    易经六十四卦详解与应用_六十四卦推演方法文章目录六十四卦图卦象工具/原料方法/步骤注意事项六十四卦图卦象工具/原料一块钱的硬币 三枚方法/步骤第一,占卜前要把手洗干净,然后心里要虔诚,其他的事情不要胡思乱想,心里就想着自己要占卜问的事情。第二,取出三枚一元的硬币,有一元字体的为正面,花的那面为反面。然后将三枚硬币放在手中,双手合拢摇晃几下,最后开出来。结果的话有四种情况。三个全是正面的记作老阳——x,只有一个正面…

    2022年8月18日
    14
  • dell服务器全系列手册,DELL服务器 RAID配置中文手册.pdf[通俗易懂]

    dell服务器全系列手册,DELL服务器 RAID配置中文手册.pdf[通俗易懂]营销研究DELL服务器RAID配置中文手册文档为自行整理,非官方提供资料,一些概念的翻译可能不够准确,仅供参考。疏漏之处敬请反馈。RAID进行操作很可能会导致数据丢失,请在操作之前务必将重要数据妥善备份,以防万一。名称解释:DiskGroup:磁盘组,这里相当于是阵列,例如配置了一个RAID5,就是一个磁盘组VD(VirtualDisk):虚拟磁盘,虚拟磁盘可以不使用一个阵列的全部容…

    2022年6月18日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号