РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
504 of 769 menu

Класс UninitializedParameter

Класс UninitializedParameter является специальным типом параметра в PyTorch, который создается без начальных значений. Он используется в ситуациях, когда размерность параметра неизвестна на момент создания модели, и должна быть определена позже, например, при первом проходе данных через слой. Это особенно полезно для больших моделей, где полная инициализация всех параметров может быть дорогостоящей.

Основное отличие от стандартного Parameter заключается в том, что UninitializedParameter не содержит данных тензора до тех пор, пока не будет явно инициализирован через метод initialize. Попытка использовать такой параметр в вычислениях до инициализации приведет к ошибке.

Синтаксис

torch.nn.parameter.UninitializedParameter(requires_grad=True)

Конструктор класса принимает один необязательный параметр:

  • requires_grad (bool, по умолчанию True) - указывает, требуется ли вычислять градиенты для этого параметра.

Пример

Создадим неинициализированный параметр:

import torch param = torch.nn.parameter.UninitializedParameter() print(param)

Результат выполнения кода:

UninitializedParameter()

Как видно, параметр создан, но не содержит данных.

Пример

Попытка использовать неинициализированный параметр приведет к ошибке:

import torch param = torch.nn.parameter.UninitializedParameter() try: print(param.shape) except RuntimeError as e: print(e)

Результат выполнения кода:

"Uninitialized parameter does not have data"

Ошибка возникает, поскольку параметр не содержит данных.

Пример

Инициализация параметра с помощью метода initialize:

import torch param = torch.nn.parameter.UninitializedParameter() # Инициализируем параметр тензором размера (3, 4) param.initialize(torch.empty(3, 4)) print(param.shape) print(param.requires_grad)

Результат выполнения кода:

torch.Size([3, 4]) True

После инициализации параметр содержит тензор указанного размера, и его можно использовать в вычислениях.

Пример

Использование UninitializedParameter в пользовательском модуле:

import torch import torch.nn as nn class MyLinear(nn.Module): def __init__(self, in_features=None): super().__init__() # Создаем неинициализированный параметр для весов self.weight = nn.parameter.UninitializedParameter() self.in_features = in_features def initialize(self, in_features, out_features): # Инициализируем параметр, когда известна размерность self.weight.initialize(torch.empty(out_features, in_features)) nn.init.kaiming_uniform_(self.weight) def forward(self, x): if not hasattr(self.weight, 'data'): raise RuntimeError("Weight is not initialized") return x @ self.weight.T model = MyLinear() # Инициализируем модель с размерностями model.initialize(4, 3) x = torch.randn(2, 4) y = model(x) print(y.shape) print(model.weight.shape)

Результат выполнения кода:

torch.Size([2, 3]) torch.Size([3, 4])

В этом примере мы создаем модуль, который хранит веса как неинициализированный параметр. Размерность весов определяется только при вызове метода initialize, что позволяет отложить выделение памяти до момента, когда размерность станет известна.

Смотрите также

  • класс ModuleDict,
    который представляет словарь модулей
  • класс ParameterList,
    который представляет список параметров
  • класс ParameterDict,
    который представляет словарь параметров
  • класс Buffer,
    который используется для хранения тензоров, не являющихся параметрами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить