Use el método named_modules() o named_children() del modelo para ver el nombre de cada capa en el modelo y el objeto de módulo correspondiente

Puede usar los named_modules()métodos o named_children()métodos del modelo para ver el nombre de cada capa en el modelo y el objeto de bloque correspondiente.

named_modules()El método devuelve todos los objetos de módulo y sus objetos de submódulo contenidos en el modelo y asigna un nombre único a cada objeto de módulo. Este método devuelve un iterador, incluido el nombre del módulo y el objeto del módulo correspondiente. Puede usar este iterador para recorrer todos los módulos del modelo, por ejemplo:

import torch
import torch.nn as nn

# 定义一个简单的模型
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3, padding=1)
        self.relu1 = nn.ReLU()
        self.conv2 = nn.Conv2d(16, 32, 3, padding=1)
        self.relu2 = nn.ReLU()
        self.fc = nn.Linear(32 * 7 * 7, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.relu1(x)
        x = self.conv2(x)
        x = self.relu2(x)
        x = x.view(-1, 32 * 7 * 7)
        x = self.fc(x)
        return x

# 创建模型实例
model = MyModel()

# 遍历模型中的所有模块
for name, module in model.named_modules():
    print(name, module)

El resultado es el siguiente, donde los nombres de los módulos están .separados por:

 MyModel(
  (conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu1): ReLU()
  (conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (relu2): ReLU()
  (fc): Linear(in_features=1568, out_features=10, bias=True)
)
 MyModel.conv1 Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 MyModel.relu1 ReLU()
 MyModel.conv2 Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 MyModel.relu2 ReLU()
 MyModel.fc Linear(in_features=1568, out_features=10, bias=True)

Además, si desea establecer los parámetros de una determinada capa en el modelo, puede usar state_dict()el método para obtener el diccionario de parámetros del modelo y luego usar update()el método o modificar directamente los valores en el diccionario para establecer el parámetros de la capa correspondiente. Por ejemplo:

# 获取模型的参数字典
params = model.state_dict()

# 修改第一层卷积核的值
params['conv1.weight'] = torch.ones_like(params['conv1.weight'])

# 更新模型的参数
model.load_state_dict(params)

En este ejemplo, obtenemos el diccionario de parámetros del modelo, luego modificamos el valor del núcleo de convolución de la primera capa a un tensor de todos los 1 y usamos el método para actualizar los load_state_dict()parámetros modificados al modelo.

Guess you like

Origin blog.csdn.net/qq_22815083/article/details/131242294