TensorFlow可以支持尖峰神经元吗?

时间:2017-01-16 15:34:33

标签: tensorflow neural-network

我环顾四周寻找教程/文章/例子/ ......在TensorFlow中使用尖峰神经元(例如SRM / Spike响应模型类型),但我找不到任何东西。

是否可以在TensorFlow中模拟这些模型?
TensorFlow可以模拟明显依赖于时间的模型吗? 是否有可以添加此功能的插件/扩展/数据文件?
是否支持GPU?

3 个答案:

答案 0 :(得分:5)

我也对这个问题很感兴趣,并且完全按照Pietro的说法完成了。即采用简化的Hodgkin-Huxley模型的matlab实现并将其转换为Tensorflow。 看看https://github.com/jotia1/spiking-net-tensorflow

https://joshuaarnold.com.au/simulating-spiking-nets-in-tensorflow/关于博客文章,我对整个过程有一些看法。 断开链接

有兴趣听取您的想法。

答案 1 :(得分:2)

是张量流可以实现尖峰神经元模型。它是一个通用的计算框架。

是否有可用的实施方案:我不这么认为,但我有一位对此项目感兴趣的朋友。

许多/大多数张量流操作都支持GPU。您必须检查文档以查看哪些文档不受支持。

答案 2 :(得分:1)

正如Steven所指出的那样,Tensorflow是一个计算框架,因此可以实现任何算法。

Tensorflow与其他计算框架(例如Matlab或numpy / scipy)之间的主要区别在于它依赖于计算图:您不直接执行操作,而是构建一个操作图,然后在会话中进行评估。 / p>

我也对掺加神经元和Tensorflow感兴趣,并发现了这个问题。作为joti,我在Tensorflow(link to my blog post)中实施了相同的Matlab练习

例如,假设您提供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(在这种情况下,占位符将是突触输入)。