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