На текущий момент Kaspersky Neuromorphic Platform поддерживает наборы свойств и типизацию популяций по моделям нейронов AltAILIF, BLIFATNeuron и SynapticResourceSTDPBLIFATNeuron. Если требуется, вы можете добавить новый тип нейрона.
Вы можете использовать эту инструкцию при работе с исходным кодом платформы.
Чтобы добавить новый тип нейрона:
neuron-trait-library/include/knp/neuron-traits/ и создайте в ней заголовочный файл для нового типа нейрона. 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
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
Например, для бэкенда CPU реализуйте перегруженный метод запуска расчета популяций.