根据您的经验,哪种是实现人工神经网络原型最有效的方法?这是很多炒作 (免费,但我没有使用它)或Matlab(非免费),另一种可能的选择是使用C++/Java/C#等语言。这个问题主要针对那些试图测试某些神经网络架构或学习算法的人。

如果您选择使用与上述三种不同的编程语言,您能否告诉我它们的名称以及有关您选择的一些解释(除了:这是我所知道的唯一/最常用的语言)。

谢谢。

有帮助吗?

解决方案

由于神经网络是由科学家们使用了很多,而不是由程序员那么多,选择指定的科学家和提供良好的库神经网络编程语言。

Python是一个合理的选择,因为它被广泛地被科学家使用。两个分布开始与是

http://www.pythonxy.com/

http://code.enthought.com/

这些Python发行包括大量的附加不在标准Python库,但其是用于编程的类型是非常有用的,科学家做模块。搜索Python包指数与几个神经网络数据包,可能是确定的,如果你只是学习神经网络上来。

http://pypi.python.org/pypi?:action=搜索和术语=神经&提交=搜索

不过,如果你正在做的与神经网络的认真工作,你会想是这样的快速神经网络库。这种带有Python绑定,这样就可以做你的编程在Python中,使用各种各样的Python模块的图形,可视化,数据处理等。但是,你的神经网络将运行使用optmised编译代码从FANN库。两全其美的。

在换句话说,对于运行实际的神经网络代码,你需要C,而不是Java。由于C库不与Java集成了好了,选择不与C库顺利集成的语言。 Python做这一点,也比较比Java更高效,因为有解释你的算法所需的代码少了很多线。有些人已经发现了10倍的生产力对Java增加。

您提到R,也许是因为它,你将需要使用统计功能,或者您有可用的人谁可以写R代码里面。再次,选择相对于Python的R不是一个非此即彼的决定。您可以同时使用。

在RPY库允许Python程序访问R库和代码。使用此你会写你的主要程序在Python和治疗R作为一种工具来提供库,以同样的方式,你使用它是用C编写的FANN库。

http://rpy.sourceforge.net/

有被称为RSPython另一个模块,该模块以两种方式工作,所以是R程序可以访问Python编写的库。如果你有一个专家[R程序员帮助您这将是有益的。

http://www.omegahat.org/RSPython/

而这还不是全部。您可以利用Python来简化Java编程。如果你有一个Java神经网络引擎,你仍然可以写大多采用运行在Java虚拟机,并允许你使用任何Java类和库在代码中的Jython版本的在Python程序。而且你还可以使用快速FANN库以及因为它们为Java程序提供绑定。

这是我推荐的Python为您的工作,主要的原因是,它由一个可怕的很多科学家这就是为什么有两个可用的科学导向的分布。第二个原因是,Python是很容易让新手程序员上手,并在探索神经网络,你可能会用更简单的模拟开始,工作到更复杂的更多数据处理和分析结果。 Python将允许你建立你自己的代码库,并成为一个专家Python程序员,这样就可以集中更多的注意力集中于神经网络的问题。如果反弹,有位Java的,还有一点点C ++和位R,那么你就可以花更少的时间在神经网络。这一战略可能有利于someoNE谁愿意编程生涯,但不是一个人谁想要取得一些显著的结果与神经网络。

即使你的神经网络的工作延伸到专门的硬件,所谓的神经形态芯片,你仍然可以利用Python作为本文来自NIH表明:

http://www.ncbi.nlm.nih.gov/pmc /物品/ PMC2701676 /

其他提示

我尝试使用较高抽象级别的语言(matlab、java)和较低抽象级别的语言(C)。两者都使用工具箱和库并自己编码。总体反应?两者都不是完美的工具。请记住:

  • 原型可能还不够:通常,您需要在大样本上运行网络,或者在样本子集上运行几次(在不断发展的神经网络的情况下)以获得不错的结果。如果您必须运行网络一百万次,即使是很小的性能提升也可能会带来巨大的帮助并节省时间(即)MATLAB 上的 C);

  • 另一方面,如果您需要轻松编码,您可能需要使用许多预打包库(javaNN 等)之一;

  • 你使用什么类型的神经网络?连续时间循环神经网络(CTRNN)?反向传播?你如何训练他们?您如何验证他们的结果?准确性重要吗?(IE。您是否在小型设备上运行它们,例如内存有限的机器人控制板,如 Arduino?)

如果你有空闲时间,我建议

  1. 使用高级语言甚至伪代码首先学习概念;
  2. 一旦您熟悉了所有复杂的事情,特别是在使用不断发展的神经网络时,请选择他们已经熟悉的语言
  3. 那么您可能想开始研究如何优化速度、内存占用等。

希望这可以帮助。

我已经使用Matlab的神经网络工具箱到一定程度,并享受其作为原型工具,由于其图形界面,以允许设置了网络,实验用的训练尺寸VS测试输入数据,并且它的后培训测试全部建成。它只是似乎不错,自然上手...

我还试验了 JOONE (面向神经引擎Java对象)。 它是建立相当不错,而且当时我是有点业余的,仍然没有问题得到各种网络建立和运行,以测试。 它是Java,所以它可能不会有,如果你训练大型复杂系统,你可能想的性能,但它的API是非常平易近人。

我还看到与洪水在C ++中做了一些工作。它有一堆的设置与网络,适合于解决一系列的问题类。这是值得检查。

我也强烈建议蟒。对于原型,蟒蛇是一个伟大的选择:它更容易和更快的编程中,有一个巨大的可用库的数量,并广泛应用于科学界。

此外,如果使用的是蟒,还可以采取优良 PyBrain 包神经网络,强化学习,无监督学习,和其他机器学习任务,这将有助于您快速建立一个原型。

这取决于您的当前设置。当我用他们早在大学个工作日内,我不得不使用C ++ + MPI +数值食谱。这样做是因为我不得不加载大Beowulf集群上的份额。

如果您的计算需求并不大,什么会做。预包装的库可在所有平台上(R,Python的(numpy的,SciPy的),C / C ++(数值配方)等)。如果你在其中任何一个舒适的编程,它不应该是一个大问题。

如果我现在为原型东西,我可能会与Python(只是因为我觉得它更原型更容易)去

的Scilab 是一个开源替代Matlab的。

您可以利用神经网络的实验 ANN工具箱的Scilab

关注的理论和实验。你选择你的样品鉴别特征?什么是你的训练和测试集的状态。对于每个试验,研究了混淆矩阵。你有一个想法,为什么一个样品被错误分类?它似乎合乎逻辑吗?如果不是,该产品采用不使用将帮助?

实施随之而来的,用你熟悉的语言。如Java或C#托管语言很可能是不易出错:至少你就不太可能搞砸了,因为指针或内存分配错误的事情。优化来自最后的(一些体面剖析一如既往之后)。

“Encog是一种先进的神经网络和机器学习框架。Encog包含类来创建各种各样的网络,以及支持类正常化和处理数据,这些神经网络。Encog训练使用多线程弹性传播。Encog可以还利用一个GPU,以进一步加速处理时间。一个基于GUI的工作台也被提供,以帮助模式和训练神经网络。2008年以来Encog一直在积极开发。“

Encog是可用于Java,C#.NET和Silverlight。

http://www.heatonresearch.com/encog

在我在学校里,我们使用MATLAB,然后我用java我的论文NN类。

我建议java或MATLAB。 Matlab的,因为它可能已经有很多,你可能需要的东西。和Java,因为它是快速实现的东西可能在开源项目中丢失。而且besided因为除了实现神经网络可能需要一些方法来可视化。而对于我个人认为,Java或MATLAB是很容易的。

我喜欢洪水。它是免费的,全面的,用C ++编写。

在Matlab的实现是复杂的和完整的。我发现它是足够用于评估不同类型的网络。它使用外部接口也很可编程的。

然而,由于该算法的实现不是开源的,所以有时比较困难,当你需要一个特定的代码块移动到Matlab的外部的应用中,如我的手编码不同的神经网络类型的实施方式中产生了不同的结果

我已经开始使用C ++编写NN实现,我发现我根本不知道有足够的了解参与开始数学。什么结束了hapenning是,它太硬,重构当我调整了计算模型的代码。

最后我给到MATLAB,因为它肯定是一个更好的伴侣,学习网络是如何工作的神经。我是能够使使用一些击键对算法的巨大变化,太绘制结果。

也许我的经验会更好,如果我用了一个已建成的矩阵计算框架。考虑到是如何你3D应该有一些真正的优化库在那里为大多数语言。哎呀,你还不如利用的Direct3D或OpenGL对于这一点,但我相信有一些更适合神经网络在那里。

我想我不能提供有关你应该做的很多信息。不过,我可以告诉你不应该做的 - 而这尝试自己写矩阵操作代码

您可能想给 Weka的的看看。它对于像数据可视化一些内置的工具,它已经很多年了,现在(的一些截图)。

在我与神经网络工作关键是让训练集权与其说是如何在网络本身代码actualised视图。我会选择基于的问题,您尝试使用网络来解决类的语言。对于网络本身C ++,C#,Python和Java都是可行的。

您在需要图像处理的问题方面使用呢?在这种情况下,你可能想要的东西,很容易地接通图像处理库OpenCV的一样。或者是有一些涉及音频处理?

您可能需要轻松地可视化训练组,从而多么容易会变成这样与所选择的语言?您可以直接或使用某种形式的包装OpenGL或DirectX库工作?支持DirectX选用的是C ++和C#。将更高的抽象水平使用WPF工作说呢?

我用C#,因为我很熟悉它,可以利用大量的数据处理在.NET和使用WPF技术的任何可视化需要。

您也可能想给嫩江的一个尝试 - 它是免费的,的使用方便和非常轻巧。它还优于LIBSVM在外面的现成对比的许多流行的回归 - 和分类,数据集。

通常,当我修改这些类型的算法时,我发现使用开源 威卡工具包 是原型和发现一大堆不同学习算法(不仅仅是人工神经网络)的好方法。如今,它们似乎具有来自许多不同语言的绑定,因此如果您想在代码级别与 Weka 交互,您不应该依赖 Java。

一旦我发现并理解了一些很酷的东西/做了相当好的分类工作,我就用 C 或 C++ 编写了算法,部分是为了好玩,部分是为了获得处理更大数据集所需的必要速度增益。

使用C ++,如果你的神经网络是很简单的不使用怪异的框架存在。

也许5年前我没有使用强化学习推箱子的求解。当时我们决定去与Java和使用由意大利大学开发了一些代理框架。

在这里首先糟糕的决定是使用这个框架。它基本上已经在这里和那里的错误造成我们浪费调试框架的代码大量的时间。

在我们到了那里的一切是稳定的点,训练神经网络只是死的慢。我们把它放在一个相当强大的机器运行过夜,但仍然是解决极少数的难题。基本上Java对象分配和垃圾回收是相当严重破坏了系统的整体性能。我们调整了位应用程序创建的对象池,而不是分配他们所有的时间,但程序的性能还是幅度比用C ++语言实现直接使用套接字类似的分配订单较少。

希望这有助于!

好吧,如果你喜欢的原型快那么Python或MATLAB似乎是最好的。有很多可用的神经网络库。一些库被设计以这样一种方式,他们给你调整范围,但像Theano库是非常快的功能,在内部的C(我猜最快直到日期)汇编的最小量和它给你的内部全部功能调整。 Theano是典型的先使用,但功能非常强大。而后来,如果你想从神经到深层神经移动则没有太大的差别。专业Kagglers也倾向于使用这个库。这个库也有GPU的支持。我已经使用了所有的图书馆,我发现theano是最有用和最强大的。一些深学习像来自Caffe艺术框架的其他国家都在开发theano。

希望这有助于。

我实现Java和C / C ++几个神经网络原型。当性能问题,用C使用/ C ++。

我的一个实施方案的基本的多层感知器(未矢量)做了百万训练迭代(与2输入端,4个隐藏和1个输出节点的设置)在小于一分钟。我在Java中几乎是相同的实施需要时间的巨量做到这一点。 也可以使用一个线性代数库等的本征以创建矢量化版本,以提高处理速度。

假设你将你的使用任何类型的图像处理(脸部识别,OCR等)的,例如,28x28像素的图像。您将有784个输入单元和至少尽可能多的隐藏单元。这需要时间的大量训练所以这有利于节省宝贵的几分钟,几小时或几天。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top