我最近开始研究深度学习和其他机器学习技术,我开始寻找可以简化构建网络和训练过程的框架,然后我发现了 TensorFlow,在该领域几乎没有经验,对我来说,似乎速度是一个如果与深度学习一起工作,那么制作大型 ML 系统的一个重要因素,那么为什么谷歌选择 Python 来制作 TensorFlow?把它放在一种可以编译而不是解释的语言上不是更好吗?
与 C++ 之类的语言相比,使用 Python 进行机器学习有哪些优势?
关于 TensorFlow,最重要的一点是,在大多数情况下, 核心不是用 Python 编写的 :它是用高度优化的 C 和 CUDA(Nvidia 的 GPU 编程语言)组合而成的。反过来,通过使用Eigen(一个高性能 C 和 CUDA 数值库)和NVidia 的 cuDNN (一个非常优化的NVidia GPU的 DNN 库,用于卷积等功能),其中大部分发生了。
TensorFlow 的模型是程序员使用“某种语言”(很可能是 Python!)来表达模型。该模型以 TensorFlow 结构编写,例如:
h1 = tf.nn.relu(tf.matmul(l1, W1) + b1) h2 = ...
在 Python 运行时实际上并没有执行。相反,实际创建的是一个数据流图,它表示接受特定输入、应用特定操作、将结果作为输入提供给其他操作,等等。 该模型由快速 C++ 代码执行,并且在大多数情况下,操作之间的数据永远不会复制回 Python 代码 。
然后,程序员通过拉动节点来“驱动”这个模型的执行——用于训练,通常在 Python 中,为了服务,有时在 Python 中,有时在原始 C++ 中:
sess.run(eval_results)
这个 Python(或 C 函数调用)使用对 C 的进程内调用或分布式版本的RPC调用 C++ TensorFlow 服务器以告诉它执行,然后复制回结果。
所以,话虽如此,让我们重新提出这个问题:为什么 TensorFlow 选择 Python 作为第一个支持良好的语言来表达和控制模型的训练?
答案很简单:对于大量数据科学家和机器学习专家来说,Python 可能 是 最舒适的语言,它也很容易集成和控制 C++ 后端,同时也是通用的,在内部和外部都广泛使用谷歌和开源。鉴于使用 TensorFlow 的基本模型,Python 的性能并不那么重要,它是天作之合。NumPy还可以轻松地在 Python 中进行预处理(同样具有高性能),这也是一个巨大的优势,然后再将其输入 TensorFlow 以处理真正需要大量 CPU 的东西。
表达模型时也有很多复杂性,但在执行时不使用它——形状推断(例如,如果你做 matmul(A, B),结果数据的形状是什么?)和自动梯度计算。事实证明,能够用 Python 表达这些内容很好,尽管我认为从长远来看,它们可能会转移到 C++ 后端,以便更容易地添加其他语言。
(当然,希望是在未来支持其他语言来创建和表达模型。使用其他几种语言运行推理已经非常简单——C++ 现在可以工作了,Facebook 的某个人贡献了Go绑定,我们现在正在审查, ETC。)