首页 文章

TensorFlow,为什么python是选择的语言?

提问于
浏览
96

我最近开始研究深度学习和其他ML技术,我开始寻找简化构建网络和训练它的过程的框架,然后我发现TensorFlow,在该领域经验不多,对我来说,似乎速度是一个如果使用深度学习,那么制作大型ML系统的重要因素就更多了,那么为什么谷歌选择python制作TensorFlow?用一种可以编译而不是解释的语言来表达它会不会更好?

使用Python而不是像C这样的语言进行机器学习有什么好处?

4 回答

  • 17

    关于TensorFlow最重要的事情是,在大多数情况下,核心不是用Python编写的:它是用于编程GPU的语言 . 反过来,通过使用Eigen(高性能C和CUDA数值库)和NVidia's cuDNNNVidia GPUs的非常优化的DNN库,用于convolutions等函数),大部分都会发生 .

    TensorFlow的模型是程序员使用“某种语言”(很可能是Python!)来表达模型 . 这个模型,用TensorFlow结构编写,如:

    h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
    h2 = ...
    

    在运行Python时实际上并未执行 . 相反,实际创建的是dataflow graph,它表示采取特定输入,应用特定操作,提供结果作为其他操作的输入,等等 . 此模型由快速C代码执行,并且在大多数情况下,操作之间的数据永远不会复制回Python代码 .

    然后程序员通过拉动节点来“驱动”这个模型的执行 - 通常用Python进行训练,然后用于服务,有时用Python,有时用原始C:

    sess.run(eval_results)
    

    这一个Python(或C函数调用)使用对C的进程内调用或分布式版本的RPC来调用C TensorFlow服务器以告诉它执行,然后复制结果 .

    So, with that said, let's re-phrase the question: Why did TensorFlow choose Python as the first well-supported language for expressing and controlling the training of models?

    答案很简单:对于大量数据科学家和机器学习专家来说,Python可能是最舒适的语言,这很重要,这很自然 . 这也是一个巨大的优势,NumPy可以很容易地在Python中进行预处理 - 同时具有高性能 - 然后将其输入TensorFlow以获得真正的CPU重量级事物 .

    在执行它时会使用's also a bunch of complexity in expressing the model that isn' - 形状推断(例如,如果你做matmul(A,B),结果数据的形状是什么?)和自动gradient计算 . 事实证明,能够用Python表达这些内容真是太好了,不过我认为从长远来看,它们可能会转移到C后端,以便更容易地添加其他语言 .

    (当然,希望是在未来支持其他语言来创建和表达模型 . 使用其他几种语言进行推理已经非常简单了 - C现在有效,来自Facebook的人提供了我们正在审查的Go绑定等)

  • 3

    TF不是用python编写的 . 它是用C语言编写的(并使用高性能的数字librariesCUDA代码),您可以通过查看它们的github来检查它 . 所以the core is written not in python但TF提供了许多其他语言的接口(python, C++, Java, Go

    enter image description here

    如果您来自数据分析世界,您可以将其视为numpy(不是用python编写,而是提供Python的接口),或者如果您是Web开发人员 - 将其视为数据库(PostgreSQL,MySQL,可以从Java,Python,PHP调用)


    由于many reasons,Python前端(人们在TF中编写模型的语言)是最受欢迎的 . 在我看来,主要原因是历史:大多数ML用户已经使用它(另一个流行的选择是R)所以如果你不提供python的接口,你的库很可能注定要默默无闻 .


    但是用python编写并不意味着你的模型是在python中执行的 . 相反,如果你以正确的方式编写模型,那么在评估TF图形时,Python永远不会被执行(tf.py_func()除外,它存在于调试中,应该在实际模型中完全避免,因为它在Python的一面执行) .

    这与例如numpy不同 . 例如,如果你执行 np.linalg.eig(np.matmul(A, np.transpose(A)) (这是 eig(AA') ),操作将以某种快速语言(C或fortran)计算转置,将其返回到python,将其与a一起从python中获取,并计算在一些快速语言中进行乘法并将其返回到python,然后计算特征值并将其返回到python . 因此,像matmul和eig这样昂贵的操作是有效计算的,你仍然会通过将结果移动到python并强制执行而浪费时间 . TF does not do it ,一旦你定义了图形,你的张量不是在python中,而是在C / CUDA /其他东西中 .

  • 171

    Python允许您使用C和C创建扩展模块,与本机代码连接,并且仍然获得Python为您提供的优势 .

    TensorFlow使用Python,是的,但它也包含大量的C++ .

    这允许用于实验的更简单的接口,而Python的人为思维开销较少,并通过编写C中最重要的部分来增加性能 .

  • 0

    您可以在here中查看的最新比率显示TensorFlow C内部需要约50%的代码,而Python需要大约40%的代码 .

    C和Python都是谷歌的官方语言,所以难怪为什么会这样 . 如果我必须提供C和Python存在的快速回归...

    C在计算代数中,Python用于其他一切,包括测试 . 知道今天的测试无处不在,难怪为什么Python代码对TF有很大贡献 .

相关问题