PyTorch torch.nn.Sequential 用法

PyTorch torch.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())
        ]))

1、使用 普通方法 搭建一个神经网络。Net继承了一个torch中的神经网络结构,然后进行了修改。

import torch

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)

2、使用 torch.nn.Sequential 搭建一个神经网络。

net2 = torch.nn.Sequential(
    torch.nn.Linear(1, 10),
    torch.nn.ReLU(),
    torch.nn.Linear(10, 1)
)

3、打印2个神经网络的数据。

print(net1)

print(net2)
Net(
  (hidden): Linear(in_features=1, out_features=10, bias=True)
  (predict): Linear(in_features=10, out_features=1, bias=True)
)
Sequential(
  (0): Linear(in_features=1, out_features=10, bias=True)
  (1): ReLU()
  (2): Linear(in_features=10, out_features=1, bias=True)
)

使用 torch.nn.Sequential 会自动加入激励函数。

但是在 net1 中,激励函数 实际上是在 forward() 功能中才被调用的。

4、测试。

import torch
import torch.nn as nn
 
model = torch.nn.Sequential(
    torch.nn.Linear(20, 10),
    torch.nn.ReLU(),
    torch.nn.Linear(10, 2)
)

input_z = torch.ones(20)
print(input_z)
output_z = model(input_z)
print(output_z)
tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1.])
tensor([-0.5854,  0.4513], grad_fn=<AddBackward0>)

发表回复

您的电子邮箱地址不会被公开。