监视神经元及突触信息#
作者: Shawn
本文主要是讲解如何使用 neurai.monitor.MonitorBS
完成记录神经元的脉冲和电压,以及突触权重。
监视变量配置#
使用 neurai.monitor.MonitorConf
配置记录的神经元及突触信息。记录神经元簇名称为 ExpLIF_0 的脉冲和电压:
from neurai.monitor import MonitorConf
monitors=[MonitorConf("ExpLIF_0", "spike"), MonitorConf("ExpLIF_0", "v", slices=slice(0, 1))]
其中 slices 参数可以设置切片信息,记录前几个神经元。
当连接使用 STDP 连接时,记录权重可以这样写:
from neurai.monitor import MonitorConf
monitors=[MonitorConf("STDPNearest_0", "weight")]
记录权重也同样支持切片功能,可以记录前几条突触。
设置监视方法#
监视方法目前支持二种:内存、写文件,写法如下:
from neurai.monitor import MemoryRecorder, FileRecorder
recorder=MemoryRecorder()
recorder=FileRecorder("./",over_write=True)
创建脑仿真监视对象#
在配置好监视变量以及监视方法后,可以构造一个脑仿真监视对象 neurai.monitor.MonitorBS
:
from neurai.monitor import MonitorBS
monitorbs = MonitorBS(
monitors=[MonitorConf("ExpLIF_0", "spike"),
MonitorConf("ExpLIF_1", "spike"),
MonitorConf("STDPNearest_0", "weight")],
recorder=MemoryRecorder())
具体监视示例#
以下是使用 neurai.monitor.MonitorBS
监视脑仿真变量的具体示例:
import sys
import os
from neurai.config import set_platform, set_simulate_status
set_platform(platform='cpu')
from neurai import nn
from neurai.monitor import MonitorBS, MonitorConf, MemoryRecorder
from neurai.util import visualization
import jax.numpy as jnp
from neurai.initializer import NormalIniter, UniformIniter
class TwoNeurons(nn.SNet):
def setup(self):
self.lif0 = nn.ExpLIF(I_e=400., v_init=UniformIniter(-80, -50))
self.lif1 = nn.ExpLIF(size=1, v_init=NormalIniter(-70.0, 1))
weight = 20.0
delay = 10
self.syn1 = nn.StaticSynapse(
pre=self.lif0, post=self.lif1, weight=weight, delay_step=delay, conn=nn.FixedTotalNum(1))
self.syn2 = nn.StaticSynapse(pre=self.lif1, post=self.lif0, weight=weight, delay_step=delay)
class TwoNeuronNet(nn.Module):
def setup(self):
self.network = nn.SNetLayer(TwoNeurons)
def __call__(self, input=None, t=0, monitor=None):
_, mon = self.network(input=input, t=t, monitor=monitor)
return mon
net = TwoNeuronNet()
params = net.init()
monitorbs = MonitorBS(
monitors=[MonitorConf("ExpLIF_0", "spike"),
MonitorConf("ExpLIF_0", "v", slices=slice(0, 1))],
recorder=MemoryRecorder())
mon = net.run(params, t=100.0, monitor=monitorbs)