nn.module中容器可以存储一段网络结构,方便重复使用。
容器一般有三种构建方法
- nn.Sequetail :按顺序包装多个网络层
- nn.Modulelist: 像python中list一样包装多个网络层,可以像列表一样迭代
- nn.Muduledict: 像python中dict一样包装多个网络层,给每个网络层加上名称
# sequetail
class lenet_sequetail(nn.module):
def __init__(self, classes):
super(lenet_sequetail, self).__init__()
self.features = nn.Sequetail(
nn.Conv2d(3, 6, 5),
nn.Relu(),
nn.MaxPool2d(kernel_size = 2, stride = 2),
nn.Conv2d(6, 16, 5),
nn.Relu(),
nn.MaxPool2d(kernel_size = 2, stride = 2),
)
self.classifier = nn.Sequetail(
nn.Linear(16*5*5, 120),
nn.Relu(),
nn.linear(120, 84),
nn.Rule()
nn.Linear(84, classes),)
def forward(self, x):
x = self.feature(x)
x = x.view(x.size()[0], -1)
x = x.classifier(x)
return x
..................
Sequetail使用的时候forward是用for循环实现的。
list主要的三种方法
- append(): 在后面添加网络层
- extand () : 拼接网络层
- insert () : 指定位置插入网络层