Пакет ANN2SNN

26 декабря 2025

ID 273090

Пакет ANN2SNN предназначен для создания нейронных сетей, которые можно преобразовать в импульсные нейронные сети и разместить для их исполнения на нейроморфном процессоре Алтай-2. Пакет ANN2SNN реализован на языке программирования Python.

Для создания нейронных сетей необходимо использовать специальные тернарные слои, в которых учитываются ограничения, характерные для нейроморфного процессора Алтай-2. Тернарные слои, используемые для создания нейронной сети, соответствуют слоям библиотеки Keras, со следующими основными отличиями:

  • Входными и выходными данными каждого из слоев нейронной сети являются бинарные тензоры соответствующей размерности.
  • Все веса слоев нейронной сети находятся в диапазоне {-1,0,1}.
  • Значение смещения в слое нейронной сети находится в диапазоне от -16 384 до 16 383.

При обучении нейронной сети, созданной с помощью тернарных слоев, стоит учитывать следующие особенности:

  • В случае наличия небинаризованных данных для обучения и/или валидации необходимо сначала их привести к бинарному виду. Для это можно использовать алгоритмы кодирования и декодирования или создать нейросетевые обучаемые блоки, кодирующие и декодирующие данные.
  • При обучении моделей бинарной классификации методом градиентного спуска для дифференцируемости функции потерь необходимо указать сигмоидную функцию (англ. sigmoid function) в качестве функции активации выходного слоя. После проведения обучения нужно заменить сигмоидноую активацию выходного слоя на активацию с функцией Хевисайда (англ. Heaviside function).
  • При обучении моделей многоклассовой классификации методом градиентного спуска для дифференцируемости функции потерь необходимо указать многомерную логистическую функцию (англ. softmax function) в качестве функции активации выходного слоя. При размещении такой нейронной сети выходной вектор будет автоматически преобразован к бинарному виду, реализующему индикатор максимальной компоненты значения выходного вектора.

Сериализация и десериализация нейронных сетей проводится стандартными методами, предоставляемыми библиотекой Keras, с указанием параметра custom_objects в виде словаря тернарных слоев и функции активации heaviside.

Во время размещения нейронная сеть проверяется на соответствие ограничениям процессора. Проверка нейронной сети производится относительно параметров конфигурации нейроморфного процессора, указанных в YAML-файле. В результате размещения выдается информация о количестве ядер, необходимых для запуска нейронной сети на нейроморфном процессоре Алтай-2. Нейронная сеть переводится в формат, поддерживаемый процессором для ее дальнейшего запуска на аппаратном процессоре или его программном эмуляторе. Если нейронную сеть невозможно исполнить на нейроморфном процессоре из-за превышения допустимого количества ядер, выдается соответствующая ошибка.

В нейроморфном процессоре Алтай-2 предусмотрена возможность масштабирования за счет увеличения количества СБИС. По вопросам масштабирования вам нужно обратиться к специалистам "Лаборатории Касперского".

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

  • x соответствует необходимому количеству ядер. После расчета количества ядер по формуле округлите результат в большую сторону.
  • i соответствует порядковому номеру слоя нейронной сети.
  • n соответствует количеству слоев нейронной сети.
  • w соответствует первой размерности тензора слоя нейронной сети.
  • h соответствует второй размерности тензора слоя нейронной сети.
  • c соответствует третьей размерности тензора слоя нейронной сети.

    Формула оценки количества ядер

Количество ядер, необходимых для размещения полносвязного слоя TernaryDense, зависит от количества входных нейронов в слое. Если количество входных нейронов не больше 512, то вы можете рассчитать необходимое количество ядер по формуле, представленной ниже, где:

  • x соответствует необходимому количеству ядер. После расчета количества ядер по формуле округлите результат в большую сторону.
  • i соответствует порядковому номеру слоя нейронной сети.
  • n соответствует количеству полносвязных слоев нейронной сети.
  • U соответствует количеству целевых нейронов.

    Формула оценки количества ядер для слоя TernaryDense

Если количество входных нейронов больше 512, то вы можете рассчитать необходимое количество ядер по формуле, представленной ниже, где:

  • x соответствует необходимому количеству ядер. После расчета количества ядер по формуле округлите результат в большую сторону.
  • i соответствует порядковому номеру слоя нейронной сети.
  • n соответствует количеству полносвязных слоев нейронной сети.
  • U соответствует количеству целевых нейронов.
  • N соответствует количеству входных нейронов для слоя.

    Формула оценки количества ядер для слоя TernaryDense

Для нейронных сетей, созданных на базе пакета ANN2SNN, возможны следующие варианты инференса:

  • Инференс за количество тиков, равное количеству слоев в нейронной сети. При этом варианте инференса за тик исполнения нейронной сети вычисляется только один слой нейронной сети, а обработанные данные передаются в последующий слой. Время инференса прямо пропорционально количеству слоев нейронной сети.
  • Инференс за один тик. При этом варианте инференса каждый слой нейронной сети получает данные от предыдущего слоя и обрабатывает их. Время инференса составляет около 1,5 мс.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!