【问题标题】:Can TensorFlow support spiking neurons?TensorFlow 可以支持脉冲神经元吗?
【发布时间】:2018-07-27 17:19:55
【问题描述】:

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

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

【问题讨论】:

    标签: tensorflow neural-network


    【解决方案1】:

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

    https://joshuaarnold.com.au/simulating-spiking-nets-in-tensorflow/ 的博客文章,其中包含我对整个过程的一些想法。 断开的链接

    有兴趣听听您对此的看法。

    【讨论】:

    • 这似乎不是一个答案。请参考How to Answer
    • 这是一篇关于 TensorFlow 中尖峰网络的文章和示例,它解决了第一个问题,即这是否可行,并给出了示例。
    • @joti 感谢您发布此答案。您是否在监督/非监督学习中使用脉冲神经网络?当前关于 spiking 神经网络的维基百科文章指出:“因此,为了正确使用 SNN 解决现实世界的任务,我们需要开发一种高效的监督学习方法。这是一项艰巨的任务,因为它涉及到,鉴于这些网络,决定了人脑的学习方式”。
    【解决方案2】:

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

    是否有可用的实现:我不这么认为,但我有一个对这个项目感兴趣的朋友。

    GPU 支持许多/大部分 tensorflow 操作。您必须查看文档以了解哪些不受支持。

    【讨论】:

    • 能给个链接吗?
    • 有兴趣的朋友的链接?
    • 不,只是关于您的句子的链接:“是的 tensorflow 可以实现尖峰神经元模型”。
    • 在线任何地方都没有直接链接。只是我与 Nicolas Brunel 的对话以及我自己对计算机科学和神经科学的了解。尖峰神经元模型已在 matlab 中编码,并且 tensorflow 没有缺少 matlab 具有的任何功能,因此可以在 tf.两者之间的主要区别在于语义和底层实现或外部第三方库,但两者都可以编写相同的材料。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 2011-07-24
      • 2019-02-16
      • 2017-06-02
      • 1970-01-01
      • 2017-05-21
      • 2013-08-03
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多