2020-02-27 nn.sequential与nn.module

nn.Sequential和nn.Module是PyTorch中用于构建模型的两个模块。
参考:https://github.com/L1aoXingyu/code-of-learn-deep-learning-with-pytorch/blob/master/chapter3_NN/nn-sequential-module.ipynb

nn.Sequential 构建序列化模块

# 通过nn.Sequential 搭建含一个隐藏层的深度神经网络
import torch.nn as nn
seqNet = nn.Sequential(
  nn.Linear(2, 4) # 线性层 wx + b
  nn.Tanh() # 激活函数 tanh
  nn.Linear(4, 1)
)
seqNet # 打印网络结构
神经网络结构
# 可以通过索引访问每一层及参数
w0 = seqNet[0].weight
# 通过 parameters 可得到模型的参数
param = seqNet.parameters()

nn.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
  • 注: 1. Module里可以使用Sequential;2. 其灵活性体现在forward中。

构建相同的神经网络模型,代码如下:

class module_net(nn.Module):
    def __init__(self, num_input, num_hidden, num_output):
        super(module_net, self).__init__()
        self.layer1 = nn.Linear(num_input, num_hidden)
        self.layer2 = nn.Tanh()  # 激活函数 tanh
        self.layer3 = nn.Linear(num_hidden, num_output)
        
    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x
moduleNet = module_net(2, 4, 1) # 实例化生成神经网络
moduleNet # 打印网络结构
神经网络结构
# 可以通过名字直接访问每一层并访问具体参数
layer01 = moduleNet.layer1
w0 = layer01.weight
para = moduleNet.parameters()

你可能感兴趣的:(2020-02-27 nn.sequential与nn.module)