我环顾四周寻找教程/文章/例子/ ......在TensorFlow中使用尖峰神经元(例如SRM / Spike响应模型类型),但我找不到任何东西。
是否可以在TensorFlow中模拟这些模型?
TensorFlow可以模拟明显依赖于时间的模型吗?
是否有可以添加此功能的插件/扩展/数据文件?
是否支持GPU?
答案 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(在这种情况下,占位符将是突触输入)。