Source code for norse.torch.functional.lif_mc
from typing import Tuple
import torch
from norse.torch.functional.lif import (
LIFState,
LIFFeedForwardState,
LIFParameters,
lif_step,
lif_feed_forward_step,
)
def lif_mc_step(
input_tensor: torch.Tensor,
state: LIFState,
input_weights: torch.Tensor,
recurrent_weights: torch.Tensor,
g_coupling: torch.Tensor,
p: LIFParameters = LIFParameters(),
dt: float = 0.001,
) -> Tuple[torch.Tensor, LIFState]:
"""Computes a single euler-integration step of a LIF multi-compartment
neuron-model.
Parameters:
input_tensor (torch.Tensor): the input spikes at the current time step
s (LIFState): current state of the neuron
input_weights (torch.Tensor): synaptic weights for incoming spikes
recurrent_weights (torch.Tensor): synaptic weights for recurrent spikes
g_coupling (torch.Tensor): conductances between the neuron compartments
p (LIFParameters): neuron parameters
dt (float): Integration timestep to use
"""
z, s = lif_step(
input_tensor,
state,
input_weights,
recurrent_weights,
p,
dt,
)
v_new = s.v + dt * torch.nn.functional.linear(s.v, g_coupling)
return z, LIFState(s.z, v_new, s.i)
[docs]
def lif_mc_feed_forward_step(
input_tensor: torch.Tensor,
state: LIFFeedForwardState,
g_coupling: torch.Tensor,
p: LIFParameters = LIFParameters(),
dt: float = 0.001,
) -> Tuple[torch.Tensor, LIFFeedForwardState]:
"""Computes a single euler-integration feed forward step of a LIF
multi-compartment neuron-model.
Parameters:
input_tensor (torch.Tensor): the (weighted) input spikes at the
current time step
s (LIFFeedForwardState): current state of the neuron
g_coupling (torch.Tensor): conductances between the neuron compartments
p (LIFParameters): neuron parameters
dt (float): Integration timestep to use
"""
v_new = state.v + dt * torch.nn.functional.linear(state.v, g_coupling)
return lif_feed_forward_step(
input_tensor, LIFFeedForwardState(v_new, state.i), p, dt
)