Node¶
Info
Данный модуль предназначен, в первую очередь, для разработчиков, которые хотят глубже понять устройство библиотеки, а также тех, кто собирается реализовывать свои модули.
Описание¶
Обёртка вокруг стандартного модуля библиотеки, превращающая его в ноду (узел) графа сети. Таким образом становится возможным написание сети графовым способом.
Инициализация¶
def __init__(self, mod, parents=None, name=None):
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
mod | Module | Объект класса-наследника Module, определяющий функционал узла | - |
parents | Union[None, Node, tuple, list] | Родительские ноды | None |
name | str | Имя контейнера | None |
Пояснения
parents
- под родительскими нодами подразумеваются те узлы графа, выходные данные которых являются входными для текущего узла. Возможные варианты передачи аругмента:
- None - родительские ноды отсутствуют;
- Node - переданная нода является единственным предком;
- tuple - кортеж вида (Node, idxs), где idxs - одиночный индекс или лист индексов конкретных выходов ноды Node, то есть если после обработки узел возвращает несколько тензоров данных, указав индексы, мы можем определять, какие именно из них пойдут дальше в обработку;
- list - лист, являющийся комбинацией объектов двух предыдущих типов
Методы¶
addBackwards
¶
def addBackwards(self, nodes):
Метод предназначен для :
- сохранения в текущем узле информации о его предках;
- сохранения в предках информации об их наследниках.
Для каждого объекта класса Node присутствуют атрибуты fwds
и bwds
, которые содержат информацию о последующих и предшествующих узлах соответственно. Метод addBackwards
обновляет атрибут bwds
для текущей ноды и fwds
для её предков.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
nodes | Union[None, Node, tuple, List[tuple]] | Родительские ноды | None |
Пояснения
nodes
- см. Инициализация
addForward
¶
def addForward(self, nodes):
Обновляет значение атрибута fwds
.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
nodes | Union[None, Node, tuple, List[tuple]] | Родительские ноды | None |
Пояснения
nodes
- см. Инициализация
forward
¶
def forward(self, data):
Проходит по ветке графа, для которой текущая нода является родительской, выполняя закреплённые за узлами графа операции над переданным тензором.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
data | tensor | Тензор данных | None |
Пояснения
data
- тензор данных имеет минимум два измерения (например, полносвязные слои), где на первом месте находится номер элемента в батче.
name
¶
@property
def name(self):
Функционал
Возвращает имя ноды.
updateData
¶
def updateData(self, data):
Применяет закреплённую за узлом операцию над переданным тензором.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
data | tensor | Тензор данных | None |
Пояснения
data
- см. forward
dataShapeFrom
¶
def dataShapeFrom(self, inshapes, shapes, onmodule):
Функционал
Вычисляет шейп данных после их обработки графом вплоть до текущей ноды. Метод работает только как вспомогательный для шейп-методов графа.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
inshapes | dict | Словарь шейпов входных нод графа | - |
shapes | dict | Словарь шейпов всех нод графа | - |
onmodule | Callable | Дополнительная функция | - |
Пояснения
shapes
- по сути явялется контейнером, в котором хранится информация обо всех вычисленных шейпах; в самом начале вычислений пуст, а в конце содержит информацию о шейпах всех пройденных нод;
onmmodule
- дополнительная функция, которая будет применяться при вычислениях шейпов; как правило, это функция оптимизации ноды под её выходной шейп.
backward
¶
def backward(self, grad=None, updParamGrads=True, updGrad=True, scale=1.0, momentum=0.0):
Функционал
Проходит по ветке графа, для которой текущая нода является последним наследником, в обратном направлении, осуществляя алгоритм обратного распространения ошибки - вычисление градиентов на параметры узлов и на их входные данные.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
grad | tensor | Тензор градиента целевой функции | None |
updParamGrads | bool | Флаг, регулирующий вычисление градиента на параметры узла | True |
updGrad | bool | Флаг, регулирующий вычисление градиента на входные данные узла | True |
scale | float | Масштаб: определяет, как сильно масштабировать градиент | 1.0 |
momentum | float | Момент, коэффициент сохранения: определяет, сколько градиента нужно сохранить в этой итерации | 0.0 |
Пояснения
-
updateGrad
¶
def updateGrad(self, grad, updParamGrads, updGrad, scale, momentum):
Функционал
Вычисляет градиенты на параметры и на входные данные узла.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
grad | tensor | Тензор градиента | - |
updParamGrads | bool | Флаг, регулирующий вычисление градиента на параметры узла | True |
updGrad | bool | Флаг, регулирующий вычисление градиента на входные данные узла | True |
scale | float | Масштаб: определяет, как сильно масштабировать градиент | 1.0 |
momentum | float | Момент, коэффициент сохранения: определяет, сколько градиента нужно сохранить в этой итерации | 0.0 |
Пояснения
-
buildOutGrad
¶
def buildOutGrad(self, grad):
Функционал
Занимается преподготовкой списка тензоров градиента с нод-наследников. Если наследников нет, то возвращает переданный тензор градиента.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
grad | tensor | Тензор градиента | - |
Пояснения
-
routeInGrad
¶
def routeInGrad(self, grad):
Функционал
Занимается преподготовкой словаря тензоров градиента/шейпов градиента для нод-предков. Если предков нет, то возвращает переданный тензор градиента/шейп градиента.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
grad | tensor | Тензор градиента | - |
Пояснения
-
gradShapeFrom
¶
def gradShapeFrom(self, outshapes, shapes):
Функционал
Вычисляет шейп градиента на текущей ноде.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
outshapes | tuple | Шейп градиента от целевой функции | - |
shapes | dict | Словарь шейпов градиентов ото всех узлов | - |
Пояснения
shapes
- является своего рода контейнером, который пополняется шейпами при проходе по графу.
buildOutGradShape
¶
def buildOutGradShape(self, outshapes, shapes):
Функционал
Занимается преподготовкой списка шейпов градиента с нод-наследников. Если наследников нет, то возвращает выходной шейп узла.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
outshapes | tuple | Шейп градиента от целевой функции | - |
shapes | dict | Словарь шейпов градиентов от всех узлов | - |
Пояснения
-
reset
¶
def reset(self):
Функционал
Обнуляет внутреннее состояние узла: входные данные, вычисленные признаки, градиенты, а также опускает флаги прохода fwdVisited
и bwdVisited
.
Параметры
-
Пояснения
-
clearTraverse
¶
def clearTraverse(self):
Функционал
Опускает флаги прохода fwdVisited
и bwdVisited
.
Параметры
-
Пояснения
-
__str__
¶
def __str__(self):
Функционал
Подготавливает удобочитаемое имя узла для вывода на экран.
Параметры
-
Пояснения
-
traverseForward
¶
@staticmethod
def traverseForward(node, func, *args):
Функционал
Производит рекурсивный проход по всем наследным узлам.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
node | Node | Объект класса-наследника Node | - |
func | Callable | Функция, выполняющая требуемую операцию при проходе | - |
args | list | Лист позиционных аргументов для функции func |
- |
Пояснения
-
traverseBackward
¶
@staticmethod
def traverseBackward(node, func, *args):
Функционал
Производит рекурсивный проход по всем родительским узлам.
Параметры
Параметр | Возможные типы | Описание | По умолчанию |
---|---|---|---|
node | Node | Объект класса-наследника Node | - |
func | Callable | Функция, выполняющая требуемую операцию при проходе | - |
args | list | Лист позиционных аргументов для функции func |
- |
Пояснения
func
- например, Node.updateGrad
.