Добавление нового типа синапса

На текущий момент Kaspersky Neuromorphic Platform поддерживает наборы свойств и типизацию проекций по моделям синапсов DeltaSynapse, AdditiveSTDPDeltaSynapse и SynapticResourceSTDPDeltaSynapse. Если требуется, вы можете добавить новый тип синапса.

Вы можете использовать эту инструкцию при работе с исходным кодом платформы.

Чтобы добавить новый тип синапса:

  1. Из рабочей директории, в которую был распакован архив с исходный кодом платформы, перейдите в директорию synapse-traits-library/include/knp/synapse-traits/ и создайте заголовочный файл для нового типа синапса.
  2. В созданном заголовочном файле определите структуру типа синапса и его шаблонные свойства (например, default_values, synapse_parameters).

    Пример определения дельта-синапса:

    synapse-traits-library/include/knp/synapse-traits/delta.h

    #include "type_traits.h"

    namespace knp::synapse_traits

    {

    struct DeltaSynapse;

    template <>

    struct default_values<DeltaSynapse>

    {

    // Указание значения веса синапса по умолчанию.

    constexpr static float weight_ = 0.0F;

    // Указание значения задержки синапса по умолчанию.

    constexpr static uint32_t delay_ = 1;

    // Указание типа синапса по умолчанию.

    constexpr static OutputType output_type_ = OutputType::EXCITATORY;

    };

    template <>

    struct synapse_parameters<DeltaSynapse>

    {

    // Указание атрибутов синапса.

    synapse_parameters() : weight_(0.0F), delay_(1), output_type_(knp::synapse_traits::OutputType::EXCITATORY) {}

    synapse_parameters(float weight, uint32_t delay, knp::synapse_traits::OutputType type)

    : weight_(weight), delay_(delay), output_type_(type)

    // Вес синапса.

    float weight_;

    // Задержка синапса.

    std::size_t delay_;

    // Тип синапса на выходе.

    knp::synapse_traits::OutputType output_type_;

    };

    } // namespace knp::synapse_traits

  3. Добавьте созданный тип синапса в список синапсов, определенных в заголовочном файле synapse-traits-library/include/knp/synapse-traits/all_traits.h.

    Пример добавления дельта-синапса в список синапсов:

    synapse-traits-library/include/knp/synapse-traits/all_traits.h

    #include "delta.h"

    namespace knp::synapse_traits

    {

    // Список типов синапсов, разделенных запятыми.

    #define ALL_SYNAPSES DeltaSynapse

    // ...

    } // namespace knp::neuron_traits

  4. Реализуйте в нужных бэкендах перегруженный метод запуска.

    Например, для бэкенда CPU реализуйте перегруженный метод запуска расчета проекций.

В начало