【发布时间】:2018-07-27 17:19:55
【问题描述】:
我四处寻找教程/文章/示例/...以在 TensorFlow 中使用尖峰神经元(例如 SRM/尖峰响应模型类型),但我找不到任何东西。
是否可以在 TensorFlow 中模拟这些模型?
TensorFlow 可以模拟显式依赖时间的模型吗?
是否有任何插件/扩展/数据文件可以添加此功能?
是否支持 GPU?
【问题讨论】:
我四处寻找教程/文章/示例/...以在 TensorFlow 中使用尖峰神经元(例如 SRM/尖峰响应模型类型),但我找不到任何东西。
是否可以在 TensorFlow 中模拟这些模型?
TensorFlow 可以模拟显式依赖时间的模型吗?
是否有任何插件/扩展/数据文件可以添加此功能?
是否支持 GPU?
【问题讨论】:
我也对这个问题感兴趣,并且完全按照 Pietro 所说的做了。即采用简化的 Hodgkin-Huxley 模型的 matlab 实现并将其转换为 Tensorflow。 看看https://github.com/jotia1/spiking-net-tensorflow
https://joshuaarnold.com.au/simulating-spiking-nets-in-tensorflow/ 的博客文章,其中包含我对整个过程的一些想法。 断开的链接
有兴趣听听您对此的看法。
【讨论】:
是的,tensorflow 可以实现尖峰神经元模型。它是一个通用计算框架。
是否有可用的实现:我不这么认为,但我有一个对这个项目感兴趣的朋友。
GPU 支持许多/大部分 tensorflow 操作。您必须查看文档以了解哪些不受支持。
【讨论】:
正如 Steven 所指出的,Tensorflow 是一个计算框架,因此可以实现任何算法。
Tensorflow 与其他计算框架(如 Matlab 或 numpy/scipy)之间的主要区别在于它依赖于计算图:您不直接执行操作,而是构建一个操作图,然后在会话中进行评估。
我也对 Spiking 神经元和 Tensorflow 感兴趣,并发现了这个问题。作为 joti,我在 Tensorflow 中实现了相同的 Matlab 练习 (link to my blog post)
假设您提供 u、v 和 i,以下是定义膜和恢复因子增量的两个操作:
n = 10
SPIKING_THRESHOLD = 35.0
v = tf.placeholder(tf.float32, shape=[n])
u = tf.placeholder(tf.float32, shape=[n])
i = tf.placeholder(tf.float32)
# Evaluate which neurons have reached the spiking threshold
has_fired_op = tf.greater_equal(v, tf.constant(SPIKING_THRESHOLD, shape=v.shape))
# Evaluate membrane potential increment for the considered time interval
# dv = 0 if the neuron fired, dv = 0.04v*v + 5v + 140 + I -u otherwise
dv_op = tf.where(has_fired_op,
tf.zeros(v.shape),
tf.subtract(tf.add_n([tf.multiply(tf.square(v), 0.04),
tf.multiply(v, 5.0),
tf.constant(140.0, shape=v.shape),
i]),
self.u))
# Evaluate membrane recovery decrement for the considered time interval
# du = 0 if the neuron fired, du = a*(b*v -u) otherwise
du_op = tf.where(has_fired_op,
tf.zeros([v.shape]),
tf.multiply(A, tf.subtract(tf.multiply(B, v), u)))
然后你这样评价它们:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
feed = {u: np.full((n), -13.0), v: np.full((n), -65.0), i : 7.0}
dv, du = sess.run([dv_op, du_op], feed_dict=feed)
请注意,这只是说明 Tensorflow 工作原理的示例,而不是脉冲神经元的实际模拟:通常您还想根据突触输入评估 u 和 v(在这种情况下,占位符将是突触输入)。
【讨论】: