nn.Sequential()实例化模型的三种方法
1.直接进行实例化的问题——每层的模型没有名称,只能通过索引和下标进行访问
import torch.nn as nnmodel = 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])
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
