我们正在开发一个使用神经网络的 Java 项目。我们想在我们的数据集上测试不同的网络结构。现在我们评估哪个 Java 神经网络在性能方面是最好的。我们正在评估 Encog、Neuroph 和 DL4J。你能告诉我们一些好的资源或你自己的经验吗?谢谢
3 回答
Deeplearning4j 创建者在这里:
Encog 由 Jeff Heaton 在 90 年代初编写,长期以来一直是标准的 Java DL 框架。我不相信 Encog 处理分布式计算,与 GPU、Hadoop、Spark 或 Kafka 一起工作,或者考虑到自 2006 年以来 DL 中的许多算法进步。(杰夫,如果我错了,请纠正我!)
Deeplearning4j 做了所有这些事情。它适用于使用 Spark 作为访问层的分布式 CPU 或 GPU。它已通过 CDH5 和 HDP 认证......它包括 LSTM (RNN)、深度卷积网络、RBM、DBN 和 word2vec 以及其他神经网络的实现。它是目前最流行的 JVM 深度学习工具,也是全球排名前 5 的深度学习库之一。
Deeplearning4j 由数值计算库 ND4J 或 Java 的 n 维数组提供支持。基本上,我们将 Numpy 移植到了 JVM。这使得 DL4J 具有可扩展性,您将在不久的将来看到我们添加其他算法,例如强化学习。反过来,ND4J 在 libND4J 上运行,这是一个使计算速度更快的 C++ 库。我们还构建了向量化库 Canova,它接收任何类型的数据并将其转换为神经网络可以理解的向量。我们正在尝试解决 NN 上游的一些 ETL 问题。
Neuroph 有很强的可视化,但我无法判断他们框架的其余部分,所以我会让他们自己说话!
https://github.com/deeplearning4j
在 Gitter 上 Deeplearning4j 的用户支持频道有近 2000 名开发人员。如果您有任何问题,请加入我们:
我在 Java 世界中只对 Deeplearning4j 和 Encog 有一些经验,我认为这很大程度上取决于你的目标是什么。Deeplearning4j 无疑是 2 中最复杂的框架;它有很棒的工具,它与 GPU 一起工作,它支持 LSTM 和卷积神经网络之类的东西,它已经为分布式训练设置好了,等等。但它虽然复杂和酷,但它也可能有点像 PITA。当主页希望您使用特定的 IDE 并指向依赖项目的冗长安装指南时,您知道这不会很简单。但是如果你需要它是值得的。
也就是说,在某些情况下,Encog 仍有很多话要说。它很容易与几乎任何 java 项目集成;它只是一个包含和关闭的 .jar 文件。它非常快并且非常有效地使用您的 CPU 内核,它有一个非常好且易于理解的 API。如果您需要一个 java 库来有效地实现前馈 NN,或者如果您想了解更多有关使用机器学习的一般知识,那么我对 Encog 的推荐再多也不为过。当您遇到 Encog 的限制时,请尝试 Deeplearning4j 或超越 Java 并尝试类似 Tensorflow(它也有一些 Java 支持)。
我可以告诉你我的经历。
早在 2015 年,我就在寻找一个好的深度学习 Java 框架。经过初步研究,我遇到了 Encog。我很快意识到它缺少现代神经网络的许多组件,也就是说,它已经过时了,而且我什至在设置它时也遇到了很多麻烦(它不是很灵活)。顺便说一句,它确实允许在 CPU 上进行并行计算。
所以我决定编写我自己的框架,我仍然使用它并且运行良好。然后我遇到了 deeplearning4j,我可以告诉你它非常完整并且计算速度非常快。我想说,如果你想看看 15 年前的哪些神经网络框架使用 Encog,否则没有理由使用它,即使用 deeplearning4j,或者尝试一些 python DL 框架。