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")