【发布时间】:2017-06-04 20:10:59
【问题描述】:
我正在尝试实现 Izhikevich 模型的尖峰神经元。这类神经元的公式很简单:
v[n+1] = 0.04*v[n]^2 + 5*v[n] + 140 - u[n] + I
u[n+1] = a*(b*v[n] - u[n])
其中 v 是膜电位,u 是恢复变量。
如果 v 超过 30,则重置为 c 并且 u 重置为 u + d .
鉴于这样一个简单的等式,我预计不会有任何问题。但是,虽然图表应该看起来像 ,但我得到的只是:
我完全不知道自己做错了什么,因为几乎没有什么可做的。我一直在寻找其他实现,但我正在寻找的代码总是隐藏在某个 dll 中。但是我很确定我所做的正是作者 (2) 的 Matlab 代码正在做的事情。这是我的完整 R 代码:
v = -70
u = 0
a = 0.02
b = 0.2
c = -65
d = 6
history <- c()
for (i in 1:100) {
if (v >= 30) {
v = c
u = u + d
}
v = 0.04*v^2 + 5*v + 140 - u + 0
u=a*(b*v-u);
history <- c(history, v)
}
plot(history, type = "l")
对于曾经实施过 Izhikevich 模型的任何人,我错过了什么?
有用的链接: (1)http://www.opensourcebrain.org/projects/izhikevichmodel/wiki (2)http://www.izhikevich.org/publications/spikes.pdf
回答
原来我读错了公式。显然 v' 表示新 v = v + 0.04*v^2 + 5*v + 140 - u + I。我的老师会写成 v' = 0.04 *v^2 + 6*v + 140 - u + I。非常感谢您帮助我指出这一点。
【问题讨论】:
-
我见过这个方程一次...不是 v' 而不是 v[n+1] 吗?所以方程可能看起来像 v + 0.04*v^2 + 5*v + 140 - u 。我尝试实现这个模型,但我遇到了问题,因为微分方程的系数与神经元输入的相互作用很差,所以只有很少的尖峰。然后我应用了泄漏集成和火灾模型。
-
同一事物的不同表示法。 v' 和 v[n+1] 都表示“v 的新值”,v 和 v[n] 都表示“v 的旧值”。
-
没有。 v[n+1] 表示 v 的新值。 v' 表示 v 值的变化。您将 v 替换为方程式结果,但您需要将方程式结果添加到 v。
-
我认为@viceriel 是对的。如果您查看原始论文中的实现,作者似乎首先将长度为 1000 的向量
v初始化为 -65,然后在循环v=v+0.5*(0.04*v.^2+5*v+140-u+I)内初始化。 -
我发现了两个问题。方程的错误转录(与u相同)和神经元膜上的电压受外部输入(I)刺激,你是0。
标签: r neural-network biological-neural-network