1.直接进行实例化的问题——每层的模型没有名称,只能通过索引和下标进行访问
import torch.nn as nn
model = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1),
nn.BatchNorm2d(16),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2)
)
print(model)
print(model[0])
'''运行结果为
Sequential(
(0): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
'''
2.给每层增加一个名称——OrderedDict有序字典
这种添加方式,虽然加入了名称,但是仍然只支持下标索引访问
model[0] 是正确的
model["conv1"] 是错误的
model = nn.Sequential(
OrderedDict([("conv1", nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)),
("bn1", nn.BatchNorm2d(16)),
("relu1", nn.ReLU(inplace=True)),
("maxpool", nn.MaxPool2d(2, 2))])
)
print(model)
print(model[0])
"""
Sequential(
(conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(bn1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu1): ReLU(inplace=True)
(maxpool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
"""
3.逐层添加
model=nn.Sequential()
model.add_module("conv1",nn. Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
model.add_module("bn1",nn.BatchNorm2d(16))
model.add_module("relu1",nn.ReLU(inplace=True))
model.add_module("maxpool",nn.MaxPool2d(2, 2))
print(model)
print(model[0])