Skip to content

Module

Warning

Документация к модулю находится в разработке.

Info

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

Описание

Этот модуль – родительский для всех остальных модулей.

Инициализация

def __init__(self, name=None):

Параметры

Параметр Возможные типы Описание По умолчанию
name str Имя слоя None

Пояснения

name - имя слоя, которое используется при сохранении весов НС в файл.

Методы

registerBlueprint

def registerBlueprint(self, args, exclude=None):
Функционал

Изначально в методе init() определялся как словарь, представляющий текущую локальную таблицу символов, т.е. содержащую все определенные и используемые в методе переменные.

Метод registerBlueprint переопределяет атрибут класса self.blueprint в соответствии со входными аргументами. По сути, он записывает входной словарь args в словарь self.blueprint в соответствии со значениями ключа key.

Параметры

Параметр Возможные типы Описание По умолчанию
args dict Словарь аргументов -
exclude set - None

Пояснения

-

getBlueprint

def getBlueprint(self):
Функционал

-

Параметры

-

Пояснения

-

setVar

def setVar(self, name, var):
Функционал

Добавляет объекту Module атрибут name со значением var.data и присваивает значение весовой переменной.

Параметры

Параметр Возможные типы Описание По умолчанию
name str Имя переменной -
var tensor Значение переменной -

Пояснения

-

getVar

def getVar(self, name):
Функционал

Возвращает объект переменной с именем name.

Параметры

Параметр Возможные типы Описание По умолчанию
name str Имя переменной -

Пояснения

-

getVarTable

def getVarTable(self, vartable=None, name=None, root=True):
Функционал

Возвращает таблицу переменных модуля и их имен.

Параметры

Параметр Возможные типы Описание По умолчанию
vartable Union[dict, None] Если не None, значения переменных будут помещаться в словарь, переданный в этом параметре None
name str Имя переменной None
root bool - True

Пояснения

-

setAttr

def setAttr(self, name, attr):
Функционал

Устанавливает значение атрибута класса.

Параметры

Параметр Возможные типы Описание По умолчанию
name str Имя атрибута класса -
attr - Устанавливаемое значение атрибута класса -

Пояснения

-

hasAttr

def  hasAttr(self, name):
Функционал

Проверяет наличие атрибута с именем name и возвращает все такие имена.

Параметры

Параметр Возможные типы Описание По умолчанию
name str Имя атрибута класса -

Пояснения

-

node

def node(self, *nodes):
Функционал

Из PuzzleLib.Containers.Node импортирует Node и возвращает экземпляр класса Node, с переданными параметрами.

Параметры

Параметр Возможные типы Описание По умолчанию
*nodes tuple - -

Пояснения

-

__call__

def __call__(self, data=None):
Функционал

Позволяет настраивать функционал, выполняемый при вызове объекта класса.

Параметры

Параметр Возможные типы Описание По умолчанию
data tensor - -

Пояснения

-

backward

def backward(self, grad, updParamGrads=True, updGrad=True, scale=1.0, momentum=0.0):
Функционал

Обнуляет текущее значение градиента. Если значение updGrad истинно, обновляет значение градиента согласно входному параметру grad.

Если значение updParamGrads истинно и идет обучение, то обновляет еще и параметры градиента, согласно входным значениям momentum и scale.

Перед обновлениями происходит проверка (если параметры конфига позволяют): соответвует ли shape входящего параметра grad текущему shape градиента.

Параметры

Параметр Возможные типы Описание По умолчанию
grad - - -
updParamGrads bool Обновлять ли параметры градиента True
updGrad bool Обновлять ли градиент True
scale float Масштаб 1.0
momentum float Момент 0.0

Пояснения

-

updateData

def updateData(self, data):
Функционал

Выполняет главную задачу слоя: операцию над данными.

Параметры

Параметр Возможные типы Описание По умолчанию
data tensor Тензор входных данных -

Пояснения

-

updateGrad

def updateGrad(self, grad):
Функционал

Вызывается при бэкпропе, вычисляет градиент на данные.

Параметры

Параметр Возможные типы Описание По умолчанию
grad tensor Тензор градиента, пришедший от слоя, следующего за данным -

Пояснения

-

zeroGradParams

def zeroGradParams(self):
Функционал

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

Параметры

-

Пояснения

-

accGradParams

def accGradParams(self, grad, scale=1.0, momentum=0.0):
Функционал

Вызывается при бэкпропе, вычисляет градиент на параметры слоя – матрицу весов W и вектор смещения b.

Параметры

Параметр Возможные типы Описание По умолчанию
grad tensor Тензор градиента, пришедший от слоя, следующего за данным -
scale float Масштаб: определяет, как сильно масштабировать градиент 1.0
momentum float Момент: определяет, сколько градиента нужно сохранить в этой итерации 0.0

Пояснения

-

updateParams

def updateParams(self, learnRate):
Функционал

Обновлеяет значения переменных через объект Blas при текущем значении скорости обучения.

Параметры

Параметр Возможные типы Описание По умолчанию
learnRate float Скорость обучения -

Пояснения

-

optimizeForShape

def optimizeForShape(self, shape, memlimit=None):
Функционал

Выполняет оптимизацию модуля под конкретную форму входного тензора.

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размерность входного тензора -
memlimit int Лимит выделяемой памяти None

Пояснения

-

save

def save(self, hdf=None, varlinks=None, name=None, compress="gzip", assumeUniqueNames=False, withBlueprint=False, isRoot=True):
Функционал

Сохраняет веса модуля в hdf-файл. Если withBlueprint=True, то делает дамп блюпринта в джейсон, и все записывается в виде hdf датасета.

Параметры

Параметр Возможные типы Описание По умолчанию
hdf Union[str,file] Путь к файлу или файловый hdf-объект None
varlinks dict Словарь ссылок на сохраняемые параметры None
name str Имя модуля None
compress str Метод сжатия "gzip"
assumeUniqueNames bool Уникальны ли имена модуля False
withBlueprint bool Если истинно, то из блюпринта создается hdf-dataset False
isRoot bool - True

Пояснения

hdf - путь к файлу или файловый hdf-объект. Если None, то создается возвращаемый буффером memory image file;

varlinks - словарь ссылок на сохраняемые параметры, из которых создается группа для сохранения.

load

def load(self, hdf, initvars=None, name=None, assumeUniqueNames=False, isRoot=True):
Функционал

Загружает веса модуля из hdf-файла.

Параметры

Параметр Возможные типы Описание По умолчанию
hdf Union[str, file] Путь к файлу или файловый hdf-объект -
initvars dict Словарь инициализируемых параметров None
name str Имя модуля None
assumeUniqueNames bool Уникальны ли имена False
isRoot bool - True

Пояснения

-

trainMode

def trainMode(self):
Функционал

Включает режим обучения и выполняет сброс промежуточных состояний слоя.

Параметры

-

Пояснения

-

evalMode

def evalMode(self):
Функционал

Включает режим вычисления и выполняет сброс промежуточных состояний слоя. В данном режиме, например, отключается исключение нейронов.

Параметры

-

Пояснения

-

calcMode

def calcMode(self, T):
Функционал

Устанавливает значение поля calctype равным Т.

Параметры

Параметр Возможные типы Описание По умолчанию
T float32 - -

Пояснения

-

reset

def reset(self):

Функционал

Сброс промежуточных состояний слоя: тензора данных и градиента.

Параметры

-

Пояснения

-

checkDataShape

def checkDataShape(self, shape):
Функционал

Проверяет, что shape – это правильный размер входных данных.

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размер входных данных -

Пояснения

-

dataShapeFrom

def dataShapeFrom(self, shape):
Функционал

Метод может быть содержательно переопределен в классах-наследниках: для этого он должен подсчитывать, каков будет размер выходных данных, если на вход в этот слой подать данные размера shape.

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размер входных данных -

Пояснения

-

checkDataType

def checkDataType(self, dtype):
Функционал

Проверяет корректность типа данных. В случае неудачи поднимает исключение ValueError. По умолчанию вызывает метод genericCheckDataType.

Параметры

Параметр Возможные типы Описание По умолчанию
dtype dtype Тип данных или список типов данных -

Пояснения

-

checkGradShape

def checkGradShape(self, shape):

Функционал

Проверяет, что shape – это правильный размер градиента, который в этот слой может быть передан при бэкпропе.

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размер градиента -

Пояснения

-

gradShapeFrom

def gradShapeFrom(self, shape):
Функционал

Метод может быть содержательно переопределен в классах-наследниках: для этого он должен подсчитывать, каков будет размер градиента на параметры слоя, если при бэкпропе в данный слой придёт вектор градиента размера shape.

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размер вектора градиента -

Пояснения

-

checkGradType

def checkGradType(self, dtype):
Функционал

Вызывает метод genericCheckDataType со значением dtype.

Параметры

Параметр Возможные типы Описание По умолчанию
dtype dtype Тип данных или список типов данных -

Пояснения

-

genericCheckDataType

def genericCheckDataType(self, dtype):
Функционал

Проверяет, соответствует ли тип, передаваемый входным параметром, значению self.calctype. В случае несоответствия выбрасывает ошибку.

При этом в методе проверяется, существует ли входной параметр в формате кортежа или списка. Если да, то проходится итеративно по всем их элементам, и рекурсивно вызывает себя же.

Параметры

Параметр Возможные типы Описание По умолчанию
dtype dtype Тип данных или список типов данных -

Пояснения

-

__ str __

def __str__(self):
Функционал

Оператор преобразования в строковый тип.

Параметры

-

Пояснения

-

numOfParams

def numOfParams(self):
Функционал

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

Параметры

-

Пояснения

-

paramSize

def paramSize(self, unit=None):
Функционал

Вычисляет размер, занимаемый переменными слоя (модуля).

Параметры

Параметр Возможные типы Описание По умолчанию
unit str Единица измерения объема памяти None

Пояснения

-

Возвращаемое значение

Размер float в установленных единицах измерения.


convertUnit

@staticmethod
def convertUnit(val, unit):
Функционал

-

Параметры

Параметр Возможные типы Описание По умолчанию
val float Значение переменной -
unit str Единица измерения памяти -

Пояснения

repeat

@staticmethod
def repeat(val, ntimes):
Функционал

Если val типа int, то делает его повторяющимся кортежем размера ntimes. Иначе - просто возвращает кортеж val.

Параметры

Параметр Возможные типы Описание По умолчанию
val int, tuple Значение переменной -
ntimes int Размер кортежа -

Пояснения

-

ensureHdf

@staticmethod
def ensureHdf(file, mode):
Функционал

В зависимости от формата входных данных проводит инициализацию объекта h5py.File(), и возвращает его.

Параметры

Параметр Возможные типы Описание По умолчанию
file Union[str, bytes] Файл hdf5 для проверки типа -
mode str Режим чтения файла -

Пояснения

-

acquireShapesFrom

@staticmethod
def acquireShapesFrom(cls, data):

Функционал

Возвращает кортеж с размерностью данных. Если входная data - список или кортеж, то метод итеративно рекурсивно применяется к каждому ее элементу.

Параметры

Параметр Возможные типы Описание По умолчанию
cls object Экземпляр класса, к которому применяется метод -
data Union[tuple, list, element] Данные -

Пояснения

-

acquireDtypesFrom

@staticmethod
def acquireDtypesFrom(cls, data):
Функционал

Возвращает тип данных или список типов данных. Если входная data - список или кортеж, то метод итеративно рекурсивно применяется к каждому ее элементу.

Параметры

Параметр Возможные типы Описание По умолчанию
cls object Экземпляр класса, к которому применяется метод -
data Union[tuple, list, element] Данные -

Пояснения

-

calcNeuronsNumber

@classmethod
def calcNeuronsNumber(cls, shape, transpose=False):

Функционал

Производит подсчёт входных и выходных нейронов слоя.

Параметры

Параметр Возможные типы Описание По умолчанию
shape tuple Размерность тензора слоя -
transpose bool Если True, то метод будет работать с шейпом транспонированного тензора (входы и выходы меняются местами) -

Пояснения

-

createTensorWithScheme

@staticmethod
def createTensorWithScheme(scheme, shape, wscale, factorShape=None, factorTranspose=False, dtype=np.float32):
Функционал

Создает тензор размера shape по заданной схеме с указанными параметрами.

Параметры

Параметр Возможные типы Описание По умолчанию
scheme Union[tuple, str] Схема инициализации -
shape tuple Размерность тензора -
wscale float Масштаб весов \alpha -
factorShape float По какому шейпу считать количество входных и выходных нейронов -
factorTranspose float Является ли матрица весов транспонированной -
dtype dtype Тип данных np.float32

Пояснения

scheme может передаваться как в виде строковой переменной с названием типа инициализации, так и в виде кортежа, где первый элемент - тип инициализации, а второй элемент - тип фактора - указывает, какая зависимость между количеством входных n_{in} и выходных n_{out} нейронов слоя и значениями параметров слоя.

Реализованные схемы инициализации:

  • "xavier" - то же, что и "xavier_normal";
  • "xavier_uniform" - значения параметров будут равномерно распределены в интервале [-c, c], где c = \sqrt{3/factor};
  • "xavier_normal" - значения параметров будут взяты из нормального распределения со среднеквадратическим отклонением \sqrt{3/factor};
  • "he" - значения параметров будут взяты из нормального распределения со среднеквадратическим отклонением \alpha \cdot \sqrt{2/factor};
  • "gaussian" - значения параметров будут взяты из нормального распределения со среднеквадратическим отклонением \alpha;
  • "uniform" - значения параметров будут равномерно распределены в интервале [-\alpha, \alpha];
  • "none" - тензор параметров не будет инициализирован.

Тип фактора может принимать следующие значения:

  • "avg" - factor будет равен \frac{n_{in} + n_{out}}{2};
  • "in" - factor будет равен n_{in} (используется по умолчанию);
  • "out" - factor будет равен n_{out}.

Пример scheme: ("xavier_normal", "avg")