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(self, node, func, *args):

Функционал

Производит рекурсивный проход по всем наследным узлам.

Параметры

Параметр Возможные типы Описание По умолчанию
node Node Объект класса-наследника Node. -
func Callable Функция, выполняющая требуемую операцию при проходе. -
args list Лист позиционных аргументов для функции func. -

Пояснения

-

traverseBackward

@staticmethod
def traverseBackward(self):

Функционал

Производит рекурсивный проход по всем родительским узлам.

Параметры

Параметр Возможные типы Описание По умолчанию
node Node Объект класса-наследника Node. -
func Callable Функция, выполняющая требуемую операцию при проходе. -
args list Лист позиционных аргументов для функции func. -

Пояснения

func - например, Node.updateGrad.