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