PyTorch常用接口总结

概述

1. 构造nn.Sequential

# 以dict的方式构造nn.Sequential,指定每一层的name
classifier = nn.Sequential(OrderedDict([
  ('0', nn.Linear(640 * 7 * 7, 4200)),
  ('1', nn.ReLU(True)),
  ]))

# 以list的方式构造nn.Sequential,自动生成每一层的name
layer_list = [nn.Linear(640 * 7 * 7, 4200), nn.ReLU(True)]
classifier = nn.Sequential(*layer_list)# layer的命名规则为'0'->Linear, '1'->ReLU

# 如果classifier是Module的成员变量,那么layer的命名规则为'classifier.0'->Linear, 'classifier.1'->ReLU
self.classifier = nn.Sequential(*layer_list)

2. 以dict的方式访问nn.Sequential中的Module

# The modules are stored as an ordered dictionary in nn.Sequential. You can directly access them with ._modules.

model = nn.Sequential(OrderedDict([
            ("layer_one", nn.Linear(1, 10)), ("layer_two", nn.Linear(10, 3))
        ]))
# 以dict的方式访问nn.Sequential中的Module
model._modules["layer_one"]
model._modules["layer_two"]

# 以list的方式访问nn.Sequential中的Module
modules_list = list(model._modules.values())

# 用index访问
fc = model[0]

3. 访问Module或者Sequential中的可学习参数

module = nn.Linear(1, 10)
module.state_dict()# dict类型,key的形式如: '0.weight', '0.bias'
# 或者
module.parameters() # generator

# key的命名形式有如下特点,如果是成员变量,则会带有成员变量名,具体如下
self.classifier = nn.Sequential(*layer_list) # key: 'classifier.0.weight', 'classifier.0.bias'

4. 访问Model (Module类型) 中的成员Module

# 包括model中的所有Module对象,例如Module对象中的成员Module对象,迭代类型<class 'generator'>
modules = model.modules() 

# 输出model中所有Module对象的name及module
for name, module in model.named_modules():
    print(name, module)

# 只访问儿子module,不访问孙子及之后的module
for name, module in model.named_children():
    print(name, module)

5. 常用网络层容器

nn.Sequential # 按顺序调用包含在其中的Module对象
nn.ModuleList # 访问方式接近python中的list
nn.ModuleDict
nn.ParameterList
nn.ParameterDict
Table of Contents