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.