Python和Verilog神经形态计算导图

79 篇文章 5 订阅
1 篇文章 0 订阅

🎯要点

  1. CPU和GPU模拟脉冲神经元计算
  2. 脉冲神经元预测和回归模型
  3. 拉皮克神经元模型和突触电导神经元模型
  4. 大规模高速和自定义硬件尖峰神经元模拟系统
  5. 动态自定义CUDA核神经元模型
  6. 卷积神经网络脉冲神经元模型
  7. 脉冲神经元处理器硬件设计
  8. 稀疏神经元加速器
    在这里插入图片描述

Python神经元霍奇金-赫胥黎动力学模拟

首先,构建一个由体细胞和树突组成的两室神经元。之后,我们将在其上安装一些仪器来模拟和监测其动态。细胞按定义由两部分组成:胞体和树,我们定义一个 BAS 神经元类。在 Python 中定义任何类的基本样板如下所示:

class BAS:
    def __init__(self):

特别是在我们的例子中,每次我们说有一个 BAS 细胞时,我们应该创建体细胞和树突部分:

class BAS:
    def __init__(self):
        self.soma = h.Section(name="soma", cell=self)
        self.dend = h.Section(name="dend", cell=self)

任何描述细胞属性的变量都必须作为自身属性存储。这就是我们写 self.soma 而不是 soma 的原因。另一方面,临时变量不需要以 self 为前缀,并且会在初始化函数结束时停止存在。您还会注意到,我们为部分引入了一个新的关键字参数,即单元格属性。这将始终设置为 self(即当前单元格),以允许每个部分知道它属于哪个单元格。

我们可以通过以下方式检查拓扑:

h.topology()

让我们创建第一个细胞:

my_cell = BAS()

让我们设置两个部分的长度和宽度。我们将使胞体的长度和直径为 12.6157 微米,树突的长度为 200 微米,直径为 1 微米。

class BAS:
    def __init__(self, gid):
        self._gid = gid
        self.soma = h.Section(name="soma", cell=self)
        self.dend = h.Section(name="dend", cell=self)
        self.dend.connect(self.soma)
        self.soma.L = self.soma.diam = 12.6157 * µm
        self.dend.L = 200 * µm
        self.dend.diam = 1 * µm

    def __repr__(self):
        return "BAS[{}]".format(self._gid)


my_cell = BAS(0)

如果您想知道为什么选择这个数字作为体体长度和直径:这是因为它使表面积(不包括端面)约为 500 μm2:

请注意,长度和直径相等的圆柱体的表面积
π d ℓ = π d 2 = 4 π ( d 2 ) 2 = 4 π r 2 \pi d \ell=\pi d^2=4 \pi\left(\frac{d}{2}\right)^2=4 \pi r^2 πd=πd2=4π(2d)2=4πr2
与相同直径的球体的表面积相同。

也就是说,如果我们只对电生理建模感兴趣,我们可以用长度和直径相同的圆柱形体细胞代替直径相同的球形体细胞,就像我们在这里所做的那样。

现在是时候看看细胞是什么样子了:

import matplotlib.pyplot as plt

h.PlotShape(False).plot(plt)

我们的细胞需要膜中的生物物理机制。我们首先设置轴向电阻和膜电容。

class BAS:
    def __init__(self, gid):
        self._gid = gid
        self.soma = h.Section(name="soma", cell=self)
        self.dend = h.Section(name="dend", cell=self)
        self.dend.connect(self.soma)
        self.all = self.soma.wholetree()  # <-- NEW
        self.soma.L = self.soma.diam = 12.6157 * µm
        self.dend.L = 200 * µm
        self.dend.diam = 1 * µm
        for sec in self.all:  # <-- NEW
            sec.Ra = 100  
            sec.cm = 1  

    def __repr__(self):
        return "BAS[{}]".format(self._gid)


my_cell = BAS(0)

我们添加了一个新变量 self.all,它是细胞中所有部分的列表。wholetree 方法返回它所连接的所有部分的列表 - 即相应的神经元。这将帮助我们迭代它们 - 在本例中 - 指定轴向阻力和膜电容,但也可以用于任何其他生物物理学。

让我们将 __init__ 分成几个函数:

class BAS:
    def __init__(self, gid):
        self._gid = gid
        self._setup_morphology()
        self._setup_biophysics()

    def _setup_morphology(self):
        self.soma = h.Section(name="soma", cell=self)
        self.dend = h.Section(name="dend", cell=self)
        self.all = [self.soma, self.dend]
        self.dend.connect(self.soma)
        self.soma.L = self.soma.diam = 12.6157 * µm
        self.dend.L = 200 * µm
        self.dend.diam = 1

    def _setup_biophysics(self):
        for sec in self.all:
            sec.Ra = 100  
            sec.cm = 1  

    def __repr__(self):
        return "BAS[{}]".format(self._gid)


my_cell = BAS(0)

我们将霍奇金-赫胥黎动力学放入体细胞中并指定一些参数:

class BAS:
    def __init__(self, gid):
        self._gid = gid
        self._setup_morphology()
        self._setup_biophysics()

    def _setup_morphology(self):
        self.soma = h.Section(name="soma", cell=self)
        self.dend = h.Section(name="dend", cell=self)
        self.dend.connect(self.soma)
        self.all = self.soma.wholetree()
        self.soma.L = self.soma.diam = 12.6157 * µm
        self.dend.L = 200 * µm
        self.dend.diam = 1 * µm

    def _setup_biophysics(self):
        for sec in self.all:
            sec.Ra = 100  
            sec.cm = 1  
        self.soma.insert("hh")  
        for seg in self.soma:  
            seg.hh.gnabar = (
                0.12  
            )
            seg.hh.gkbar = (
                0.036  
            )
            seg.hh.gl = 0.0003  
            seg.hh.el = (
                -54.3 * mV
            )  

    def __repr__(self):
        return "BAS[{}]".format(self._gid)


my_cell = BAS(0)

最后,让我们在树突中插入无源(泄漏)电流:

class BAS:
    def __init__(self, gid):
        self._gid = gid
        self._setup_morphology()
        self._setup_biophysics()

    def _setup_morphology(self):
        self.soma = h.Section(name="soma", cell=self)
        self.dend = h.Section(name="dend", cell=self)
        self.dend.connect(self.soma)
        self.all = self.soma.wholetree()
        self.soma.L = self.soma.diam = 12.6157 * µm
        self.dend.L = 200 * µm
        self.dend.diam = 1 * µm

    def _setup_biophysics(self):
        for sec in self.all:
            sec.Ra = 100  
            sec.cm = 1  
        self.soma.insert("hh")
        for seg in self.soma:
            seg.hh.gnabar = 0.12  
            seg.hh.gkbar = 0.036  
            seg.hh.gl = 0.0003  
            seg.hh.el = -54.3 * mV  
     
        self.dend.insert("pas")  
        for seg in self.dend:  
            seg.pas.g = 0.001  
            seg.pas.e = -65 * mV  

    def __repr__(self):
        return "BAS[{}]".format(self._gid)


my_cell = BAS(0)

我们将在模拟开始后 5 毫秒开始向树突的远端 (1) 注入电流脉冲,持续时间为 1 毫秒,幅度为 0.1 nA。首先,我们定义并定位当前的钳位对象。

👉更新:亚图跨际

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值