GNU Octave因其简单性和编译速度被用于编写数值算法(例如机器学习问题),但我想知道我是否也可以使用它来更快地编码神经网络。
GNU Octave 是编写神经网络的理想场所吗
不。
轻松快速地实现神经网络的关键是具有自动微分功能。这是允许使用 Python 库(如Pytorch或Tensorflow(和Keras))的程序仅实现神经网络的前向传递并自动计算后向传递的关键特性。
Octave 没有自动微分功能。虽然 Matlab 的深度学习工具箱似乎包含自动微分,但我认为 Octave 不包含它。即使是这样,深度学习社区也主要关注 Python 生态系统,相比之下,其他环境如 R 或 Matlab 几乎没有受到关注。
据我所知,GNU Octave 是 Matlab 的开源替代品。尽管您可以将 Octave 用于机器学习(nnet 包),但我怀疑您是否可以将其用于神经网络的“更快编码”。
以下是我对为什么会这样的想法:
当您说“快速”时,有两种解释,快速编写代码和编写快速代码。
- 快速编写代码:击败任何 python 库似乎都是一项艰巨的任务,尤其是 keras。我不得不承认,我从未使用过 Octave(但我有使用 Matlab 的经验),但我怀疑你是否可以比使用 keras 或 pytorch 更快地编写一个简单的网络模型 + 训练/评估循环。
- 编写快速代码:当涉及大量数值计算或立即在 C++ 中实现功能时,大多数库都会退回到快速 C++ 例程(BLAS / LAPACK)。我认为 Octave 也是如此。您可能知道 GPU 是当今解决大型问题的方法,因为它们在深度学习方面比 CPU 快得多,我不确定您是否可以将 GPU 与 Octave 一起使用。如果没有,这肯定是一个巨大的劣势。
最后,您必须决定快速对您意味着什么以及您希望实现什么。以下是当前深度学习库的快速概览。这是最近的一篇论文,它在 CPU 和 GPU 的速度方面对 TensorFlow、Caffe、Torch 和 Theano 进行了基准测试。不幸的是,我没有在 python (TF,Torch, ...) 和 Octave (nnet) / Matlab (Deep Learning Toolbox) 之间找到任何比较。
不。
深度学习社区绝大多数都使用 Python 作为一种语言。PyTorch(由 Facebook 维护)和 Tensorflow(由 Google 维护)是主要的两个框架。由于这两个框架最终都绑定在 C++ 代码之上,因此很难超越它们为您提供的性能。
R 有一些神经网络包,Java 和 Julia 也有,我相信其他语言也有。但是根本没有合理的证据表明为什么你不应该使用 Python 进行深度学习。
我只能看到两个不使用 Python 进行深度学习的正当理由:
- 您别无选择,必须使用另一种语言
- 您可以使用您选择的语言从头开始编写数值稳定、硬件加速的深度学习框架。
此外,您实际上不再需要“编码”神经网络。框架为您完成繁重的工作。他们已经优化了几乎所有你想要创建你想要的神经网络的实现。