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.