【问题标题】:What is the best programming language to implement neural networks?实现神经网络的最佳编程语言是什么?
【发布时间】:2011-09-26 16:10:14
【问题描述】:

我不是在寻找神经网络库,因为我正在创建新类型的网络。为此,我需要一种好的“数据流”语言。

当然,您可以在 C、C++、Java 等语言中执行此操作。但是从头开始处理多线程等将是一场噩梦。

另一方面,像 Oz 或 Erlang 这样的语言似乎更适应,但它们没有很多库,而且更难掌握(玩起来很容易,但创建完整的软件就可以了吗?) .

你有什么建议?

【问题讨论】:

标签: erlang neural-network dataflow oz


【解决方案1】:

为什么要重新发明轮子?试试PyBrain。它是免费且非常全面的:

【讨论】:

  • 谢谢!但我试图避免(出于性能原因)我的旧爱 Ruby,所以我不能用 Python 欺骗她 :)
  • @Luopan :我没有看到您的问题中提到的事实。为什么要以任意标准限制自己?
  • 你也可以试试Peach,Peach 和 PyBrain 都是出于性能考虑而开发的(Peach 是基于 NumPy,用 C 实现的),并且都在科学中成功使用(与大量处理)应用程序。
【解决方案2】:

它本身不是一种语言,但Emergent 非常强大并且可以高度定制(它具有完整的脚本语言)。

它也是开源的,如果您需要为您的新颖架构制作自己的版本,它可以作为指南提供帮助。

【讨论】:

    【解决方案3】:

    我观看了一个关于将 Erlang 用于神经网络的有趣的会议演示。您可能想检查一下:

    From Telecom Networks to Neural Networks; Erlang, as the unintentional Neural Network Programming Language

    我还知道,根据the authors tweet,所提供的系统现在随时都会开源。

    【讨论】:

    • 是的,谢谢,我也看过,很有趣。我可能会选择这个解决方案,Erlang 现在看起来已经很成熟了。我对这个解决方案唯一关心的是网络的完全异步性,你无法控制任何“时间”。
    • 在 Erlang 中,您可以非常轻松地处理时间和同步。在任何其他实用语言中都容易得多。因此,即使基本系统不支持开箱即用,扩展它也可能不是很困难。 Erlang 非常适合通过设计来实现并发软实时系统。除了电信之外,还有其他类别的系统依赖此属性,包括交易、CEP 等。
    • 罗盘,如果这是最适合您的解决方案,请接受此答案
    • 在这样的网络中处理同步很容易。沿着信号(作为消息的一部分),您可以保持消息的“生成”。您还可以维护 'tick' 消息。另一种方法是使用状态机,只消耗一个信号并以某种事件方式处理同步。
    • 查看下面 Gene Sher 的帖子,以获得上面引用的库的直接链接。
    【解决方案4】:

    Erlang 非常适合 NN。

    1. 神经元可以按进程建模(拥有数百万个进程没有问题)
    2. 连接/突触可以由目标神经元的 PID 表示。作为 OTP 中标准初始化过程的一部分,初始化这样的网络非常容易。通信将通过消息传递来实现。
    3. 也许在 ETS/mnesia 中拥有全局地址空间(在数据存储中构建)以对网络结构进行动态重新配置会更好。
    4. 接收块中的模式匹配可以确定神经元接收到什么样的信号并即时修改它。
    5. 监控这样的网络非常容易。

    还要考虑 Erlang NN 会一直处于“活动状态”。您可以随时查询神经元、层、路由器等。 在 C/C++ 中,您只需读取数组/数据结构的当前状态。

    关于性能,我们都知道C/C++比Erlang快几个数量级, 但是NN主题很棘手。

    如果网络只包含非常少的神经元,在非常宽的地址空间中,在规则数组中, 一次又一次地迭代它可能会很昂贵(在 C 中)。 Erlang 中的等效情况将通过对根/根(输入层)神经元的单个查询来解决,这会将查询直接传播到寻址良好的邻居。

    【讨论】:

    • C/C++ 和 Erlang 之间的性能差异非常取决于测试。对于像增加数组中的字段这样的小型测试,C/C++ 肯定比 Erlang 快得多,但对于大型的实际应用程序,差异将非常小,如果有的话。复杂性往往有利于那些旨在处理它的系统,例如 Erlang。
    【解决方案5】:

    如果您有任何 Java 经验,请使用 Scala,它是一种 JVM 语言,它基于与 Erlang 相同的“参与者”概念。但它没有 Erlang 严格,可以轻松使用任何现有的 Java 库。

    然后,当您发现在 Erlang 中工作得更好的计算量大的任务时,您可以使用 Erlang 的 jinterface 库在您的 Scala 代码和分布式 Erlang 节点之间进行通信。

    【讨论】:

      【解决方案6】:

      使用 Java 并不意味着从头开始处理多线程 - 只需使用众多 Java Actor 库之一。

      【讨论】:

        【解决方案7】:

        如果您对数据流编程和多线程感兴趣,那么我建议您使用 National Instruments LabVIEW。在这种情况下,您无需担心多线程,因为它已经存在,并且您也可以使用 OOP,因为现在 OOP 也是 LabVIEW 原生的。 LabVIEW OOP 也是纯粹基于数据流编程范式。

        【讨论】:

          【解决方案8】:

          DXNN1和DXNN2在教科书《Handbook of Neuroevolution Through Erlang》中构建和介绍:http://www.amazon.com/Handbook-Neuroevolution-Through-Erlang-Gene/dp/1461444624/ref=zg_bs_760204_22

          是开源的,可在:https://github.com/CorticalComputer

          【讨论】:

          • 上面帖子中的链接是 alavrik 写的开源库。
          • 可能是作者本人给出答案的加分?
          【解决方案9】:

          Erlang 的另一大优势是与 Drakon 的完全集成

          http://drakon-editor.sourceforge.net/drakon-erlang/intro.html

          【讨论】:

            【解决方案10】:

            这完全取决于您的应用程序。 C++、Python 是一些很好的机器学习编程语言

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-10-02
              • 2020-03-18
              • 2012-01-04
              • 2018-02-05
              • 1970-01-01
              • 2016-12-07
              • 1970-01-01
              相关资源
              最近更新 更多