实现神经网络的最佳编程语言是什么?

19

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

当然,你可以用C、C++、Java等语言来实现,但从头开始处理多线程等问题会很麻烦。

另一方面,像Oz或Erlang这样的语言似乎更适合,但它们没有很多库,并且难以掌握(玩弄它们很容易,但创建完整的软件就不一定了)。

你有什么建议吗?


这个链接可能会有帮助。http://www.trapexit.org/Erlang_and_Neural_Networks - Prashant Sharma
10个回答

15

好的,谢谢。我也看到了,非常有趣。我可能会选择这种解决方案,Erlang现在似乎非常成熟。我唯一担心的是网络的完全异步性,您无法控制任何“时间”。 - Blacksad
在Erlang中,您可以非常轻松地处理时间和同步。比任何其他实用语言都要容易得多。因此,即使基本系统不支持开箱即用,扩展它也可能不是很困难。Erlang通过设计非常适合进行并发软实时系统。除电信外,还有其他依赖于此属性的系统类别,包括交易、CEP等。 - alavrik
1
罗盘,如果这是最佳解决方案,请接受此答案。 - Muzaaya Joshua
在这样的网络中处理同步非常容易。你可以将 '代' 作为消息的一部分,并保持消息的 '生成'。你也可以维护 '滴答' 消息。另一种方法是使用状态机只消耗一条信号并以某种事件方式处理同步。 - user425720
请查看Gene Sher在下面的帖子,以获取上述库的直接链接。 - Charlie

10

Erlang非常适合神经网络。

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

此外,请注意Erlang NN将始终处于“活动”状态。您随时可以查询神经元、层、路由器等。 在C/C++中,您只需读取数组/数据结构的当前状态。

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

如果网络只包含极少量的神经元,在非常宽泛的地址空间中,通过反复迭代可能会很昂贵(在C中)。 Erlang中等效的情况将通过单个查询根/根(输入层)神经元来解决,这些神经元将直接传播查询到良好的地址附近。


2
C/C++和Erlang之间的性能差异非常依赖测试。对于像递增数组字段这样的小型测试,C/C++肯定比Erlang快得多,但对于大型实际应用程序而言,如果有任何差异,也将非常小。复杂性倾向于那些设计来处理它的系统,比如Erlang。 - rvirding

6

上面帖子中的链接是alavrik提到的开源库。 - Charlie
1
额外加分,如果可能的话,作者本人回答问题? - Chiffa

3
如果您对数据流编程和多线程感兴趣,我建议使用国家仪器的LabVIEW。在这种情况下,您不需要担心多线程,因为它已经存在,您还可以使用OOP,因为现在OOP也是LabVIEW的本机支持。LabVIEW OOP也纯粹基于数据流编程范例。

2
如果您有Java经验,那么可以使用Scala,它是一种基于与Erlang相同的“actors”概念的JVM语言。但是,它比Erlang宽松,并且可以轻松使用任何现有的Java库。
然后,当您发现一个在Erlang中运行更好的计算密集型任务时,您可以使用Erlang的jinterface库在您的Scala代码和分布式Erlang节点之间进行通信。

1

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


0

0

谢谢!但是出于性能原因,我正在尝试避免使用我曾经钟爱的 Ruby,所以我不能用 Python 背叛她 :) - Blacksad
@Luopan:我在你的问题中没有看到这个事实。为什么要限制自己使用任意的标准呢? - Mitch Wheat
2
你也可以尝试使用Peach,Peach和PyBrain都注重性能(Peach基于C实现的NumPy),并且两者在科学(需要大量处理)应用中都被成功使用过。 - renatopp

0

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

它还是开源的,这对于您需要为自己的新颖架构制作自己的版本可能会很有帮助。


-1

这完全取决于你的应用。C++和Python是一些适合机器学习的好编程语言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接