当前位置: 首页 > 面试题库 >

TensorFlow,为什么选择python语言?

鲍理
2023-03-14
问题内容

我最近开始研究深度学习和其他ML技术,并开始寻找简化构建网络并对其进行培训的框架,然后我发现TensorFlow对该领域缺乏经验,对我来说,速度似乎是一种如果与深度学习一起工作,那么使大型机器学习系统变得更大的重要因素,那么为什么Google选择python来制造TensorFlow?在可以编译且无法解释的语言上进行翻译会更好吗?

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


问题答案:

关于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使得NumPy可以轻松地在Python中进行预处理(也具有高性能),然后再将其馈入TensorFlow进行真正占用大量CPU的工作,这也是一个巨大的优势。

表示执行模型时不使用的模型也有很多复杂性-
形状推断(例如,如果您做matmul(A,B),结果数据的形状是什么?)和自动梯度计算。事实证明,能够用Python表达这些内容真是太好了,尽管从长远来看,我认为它们可能会转移到C
++后端,从而使添加其他语言变得更加容易。

(当然,希望是将来支持其他语言来创建和表达模型。使用其他几种语言来进行推理已经非常简单了-C
++现在可以工作了,Facebook的某人贡献了Go绑定,我们现在对其进行回顾。等)



 类似资料:
  • 本文向大家介绍Nodejs为什么选择javascript为载体语言,包括了Nodejs为什么选择javascript为载体语言的使用技巧和注意事项,需要的朋友参考一下 我们先来看看NodeJS官网上的介绍:   其特点为:   1,它是一个Javascript运行环境   2,依赖于Chrome V8引擎进行代码解释   3,事件驱动   4, 非阻塞I/O   5, 轻量、可伸缩,适于实时数据交

  • 1.1 Python 能做什么? 那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程,他们只是觉得这是一件有趣的事情。 ——Linux 之父 Linus Torvalds 作为一个实用主义的学习者,最关心的问题一定是 “我为什么要选择学 Python,学会之后我可以用来做什么?” 首先,对于初学者来说,比起其他编程语言,Python 更容易上手。 Python 的设计哲学是优雅、明确、

  • 目前正在使用React Native,并尝试使用React Native nfc ios和React national nfc,以便我可以在ios和Android之间进行跨设备通信。我发现他们无法沟通,但我认为这是由于一个更广泛的问题(因为其他现有的应用程序也无法工作)。 如果我在iPhone7上下载NFC阅读器应用程序,在Android上下载NFC写入器应用程序,它们就无法通信。这是为什么呢?

  • 如果你曾经使用过构建工具,你可能会对遇到的问题感到很沮丧,构建工具不是应该自动帮你完成项目的构建吗?你不得不向性能、扩展性等妥协。 比如你在构建一个项目的发布版本时,你要把一个文件拷贝到指定的位置,你在项目的元数据那里添加了版本的描述,如果版本号匹配一个特定的数字时,就把文件从A拷贝到B处。如果你依赖XML来构建,你要实现这个任务就像噩梦一样,你只能通过非标准的机制来添加一些脚本到构建中,结果就是

  • 来源:https://github.com/atom-china/manual 这个世界上有那么多种编辑器,为什么你要花时间学习和使用 Atom 呢? 虽然 Sublime 和 TextMate 之类的编辑器已经非常好用了,但它们仅提供了很有限的拓展性。而在另一个极端,Emacs 和 Vim 提供了灵活的拓展性,但它们并不是很友好,需要使用专用的编程语言来配置和拓展。 我们觉得我们可以做得更好。我

  • 为什么选择 NuxtJS