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>)