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

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

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

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

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

    Пример определения BLIFAT-нейрона:

    neuron-trait-library/include/knp/neuron-traits/blifat.h

    #include "type_traits.h"

    namespace knp::neuron_traits

    {

    struct BLIFATNeuron;

    template <>

    struct default_values<BLIFATNeuron>

    {

    // Указание количества шагов нейронной сети с шага последнего спайка по умолчанию.

    constexpr static std::size_t n_time_steps_since_last_firing_ = std::numeric_limits<std::size_t>::infinity();

    // Указание значения по умолчанию, к которому стремится мембранный потенциал для

    // тормозных синапсов, основанных на проводимости.

    constexpr static double reverse_inhibitory_potential = -0.3;

    // Указание значения по умолчанию, к которому стремится мембранный потенциал для

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

    constexpr static double min_potential = -1.0e9;

    // ...

    };

    template <>

    struct neuron_parameters<BLIFATNeuron>

    {

    // Указание количества шагов нейронной сети с шага последнего спайка.

    std::size_t n_time_steps_since_last_firing_ = default_values<BLIFATNeuron>::n_time_steps_since_last_firing_;

    // Указание порогового значения мембранного потенциала нейрона.

    double activation_threshold_ = default_values<BLIFATNeuron>::activation_threshold_;

    // Указание динамического порогового значения мембранного потенциала, после достижения

    // которого нейрон генерирует спайк.

    double dynamic_threshold_ = default_values<BLIFATNeuron>::dynamic_threshold_;

    // ...

    };

    } // namespace knp::neuron_traits

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

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

    neuron-trait-library/include/knp/neuron-traits/all_traits.h

    #include "blifat.h"

    namespace knp::neuron_traits

    {

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

    #define ALL_NEURONS BLIFATNeuron

    // ...

    } // namespace knp::neuron_traits

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

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

В начало