博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【深度学习笔记】用torch.nn.Sequential()搭建神经网络模型
阅读量:2135 次
发布时间:2019-04-30

本文共 2091 字,大约阅读时间需要 6 分钟。

一、第一种方式(可以配合一些条件判断语句动态添加)

  • 模板——torch.nn.Sequential()的一个对象.add_module(name, module)
  • name:某层次的名字;module:需要添加的子模块,如卷积、激活函数等等。
  • 添加子模块到当前模块中。
  • 可以通过 name 属性来访问添加的子模块。
  • 输出后每一层的名字:不是采用默认的命名方式(按序号 0,1,2,3…),而是按照name属性命名!!
import torch.nn as nnmodel = nn.Sequential()model.add_module("conv1", nn.Conv2d(1, 20, 5))model.add_module('relu1', nn.ReLU())model.add_module('conv2', nn.Conv2d(20, 64, 5))model.add_module('relu2', nn.ReLU())# 输出Sequential(  (conv1): Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1))  (relu1): ReLU()  (conv2): Conv2d(20, 64, kernel_size=(5, 5), stride=(1, 1))  (relu2): ReLU())

注意!!!nn.module也有add_module()对象

# 被添加的module可以通过 name 属性来获取。import torch.nn as nnclass Model(nn.Module):    def __init__(self):        super(Model, self).__init__()        self.add_module("conv", nn.Conv2d(10, 20, 4))        # self.conv = nn.Conv2d(10, 20, 4) 和上面这个增加module的方式等价model = Model()print(model.conv) # 通过name属性访问添加的子模块print(model)# 输出:注意子模块的命名方式Conv2d(10, 20, kernel_size=(4, 4), stride=(1, 1))Model(  (conv): Conv2d(10, 20, kernel_size=(4, 4), stride=(1, 1)))

二、第二种方式

  • 模板——nn.Sequential(*module)
  • 输出的每一层的名字:采用默认的命名方式(按序号 0,1,2,3…)
import torch.nn as nnmodel = nn.Sequential(          nn.Conv2d(1,20,5),          nn.ReLU(),          nn.Conv2d(20,64,5),          nn.ReLU()        )print(model)     # 输出:注意命名方式Sequential(  (0): Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1))  (1): ReLU()  (2): Conv2d(20, 64, kernel_size=(5, 5), stride=(1, 1))  (3): ReLU())

三、第三种方式

  • 模板——nn.Sequential(OrderedDict([*(name, module)]))
  • 输出后每一层的名字:不是采用默认的命名方式(按序号 0,1,2,3…),而是按照name属性命名!!
import collectionsimport torch.nn as nnmodel = nn.Sequential(collections.OrderedDict([('conv1', nn.Conv2d(1, 20, 5)), ('relu1', nn.ReLU()),                                               ('conv2', nn.Conv2d(20, 64, 5)),                                               ('relu2', nn.ReLU())                                               ]))print(model)# 输出:注意子模块命名方式Sequential(  (conv1): Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1))  (relu1): ReLU()  (conv2): Conv2d(20, 64, kernel_size=(5, 5), stride=(1, 1))  (relu2): ReLU())

转载地址:http://ybugf.baihongyu.com/

你可能感兴趣的文章
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>
大小端详解
查看>>
source insight使用方法简介
查看>>
<stdarg.h>头文件的使用
查看>>
C++/C 宏定义(define)中# ## 的含义 宏拼接
查看>>
Git安装配置
查看>>
linux中fork()函数详解
查看>>
C语言字符、字符串操作偏僻函数总结
查看>>
Git的Patch功能
查看>>
分析C语言的声明
查看>>
TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
查看>>