Метод named_parameters
Метод named_parameters возвращает генератор кортежей
(имя, параметр) для всех параметров модели и её подслоёв.
Параметры возвращаются в порядке их регистрации в модели.
Метод не принимает аргументов и используется для итерации
по параметрам с их именами, что удобно при отладке,
сохранении или применении различных операций к конкретным
параметрам.
Синтаксис
model.named_parameters()
Пример
Давайте создадим простую модель и выведем имена и значения всех её параметров:
import torch
import torch.nn as nn
class SimpleModel(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(5, 3)
self.fc2 = nn.Linear(3, 2)
model = SimpleModel()
for name, param in model.named_parameters():
print(name, param.shape)
Результат выполнения кода:
fc1.weight torch.Size([3, 5])
fc1.bias torch.Size([3])
fc2.weight torch.Size([2, 3])
fc2.bias torch.Size([2])
Пример
Давайте используем метод для применения различных операций к параметрам в зависимости от их имени:
import torch
import torch.nn as nn
class CustomModel(nn.Module):
def __init__(self):
super().__init__()
self.conv = nn.Conv2d(3, 16, 3)
self.bn = nn.BatchNorm2d(16)
model = CustomModel()
for name, param in model.named_parameters():
if 'weight' in name:
torch.nn.init.xavier_uniform_(param)
elif 'bias' in name:
param.data.fill_(0.0)
print(f"{name}: {param.data[0, 0] if param.dim() > 1 else param.data[0]}")
Результат выполнения кода:
conv.weight: 0.31347754645347595
conv.bias: 0.0
bn.weight: 0.0
bn.bias: 0.0
Пример
Давайте используем метод для заморозки определённых параметров во время обучения:
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.embedding = nn.Embedding(100, 10)
self.fc = nn.Linear(10, 5)
model = Net()
for name, param in model.named_parameters():
if 'embedding' in name:
param.requires_grad = False
print(f"Frozen: {name}")
else:
print(f"Trainable: {name}")
Результат выполнения кода:
Frozen: embedding.weight
Trainable: fc.weight
Trainable: fc.bias
Смотрите также
-
метод
parameters,
который возвращает только параметры без имён -
метод
state_dict,
который возвращает словарь всех параметров и буферов -
метод
named_buffers,
который возвращает именованные буферы модели -
метод
apply,
который применяет функцию ко всем подслоям модели