当前位置: 首页 > 科技观察

为什么TensorFlow可以做机器学习开发?_0

时间:2023-03-12 16:15:55 科技观察

机器学习是一门复杂的学科,但由于Google的TensorFlow等机器学习框架简化了获取数据、训练模型、提供预测和改进未来结果的过程,因此实施机器学习远没有过去那么令人生畏.TensorFlow由GoogleBrain团队创建,最初于2015年向公众发布,是一个用于数值计算和大规模机器学习的开源库。TensorFlow将大量机器学习和深度学习模型和算法(也称为神经网络)联系在一起,并通过常见的编程隐喻使它们变得有用。它提供了一个方便的前端API,用于使用Python或JavaScript构建应用程序,同时在高性能C++中执行它们。TensorFlow与PyTorch和ApacheMXNet等框架竞争,可以训练和运行深度神经网络,用于手写数字分类、图像识别、词嵌入、递归神经网络、用于机器翻译的序列到序列模型、自然语言处理和PDE基于(偏微分方程)的模拟。最重要的是,TensorFlow支持大规模生产预测,使用相同的模型进行训练。TensorFlow还有一个广泛的预训练模型库,您可以在自己的项目中使用这些模型。您还可以使用TensorFlowModelGarden中的代码作为训练您自己的模型的最佳实践示例。TensorFlow的工作原理TensorFlow允许开发人员创建数据流图——描述数据如何通过图形或一系列处理节点移动的结构。图中的每个节点代表一个数学运算,节点之间的每个连接或边是一个多维数据数组或张量。TensorFlow应用程序可以在最方便的目标上运行:本地机器、云中的集群、iOS和Android设备、CPU或GPU。如果你使用谷歌自己的云,你可以在谷歌定制的TensorFlowProcessingUnit(TPU)芯片上运行TensorFlow进一步加速。然而,由TensorFlow创建的结果模型可以部署在大多数用于提供预测的设备上。TensorFlow2.0于2019年10月发布,根据用户反馈对框架进行了多项改进,使其更易于使用(例如,通过使用相对简单的KerasAPI进行模型训练)和更高的性能。得益于新的API,分布式训练更易于运行,并且对TensorFlowLite的支持使得在更广泛的平台上部署模型成为可能。然而,为早期版本的TensorFlow编写的代码必须重写——有时只是轻微的重写,有时是显着的重写——以最大限度地利用新的TensorFlow2.0功能。经过训练的模型可用于使用REST或gRPCAPI通过Docker容器将预测作为服务提供。对于更高级的服务场景,您可以使用Kubernetes将TensorFlow与Python结合。TensorFlow通过Python语言为程序员提供了所有这些能力。Python易于学习和使用,它提供了方便的方法来表达如何将高级抽象耦合在一起。TensorFlow在Python3.7到3.10版本上受支持,虽然它可以在早期版本的Python上运行,但不能保证这样做。TensorFlow中的节点和张量是Python对象,TensorFlow应用程序本身就是Python应用程序。然而,实际的数学运算并不是在Python中执行的。通过TensorFlow提供的转换库被编写为高性能C++二进制文件。Python只是指导各个部分之间的流程,并提供高级编程抽象将它们连接在一起。TensorFlow中的高级工作(创建节点和层并将它们链接在一起)使用Keras库。KerasAPI表面上很简单;不到10行代码就可以定义一个三层基础模型,同样的训练代码只需要几行代码。但是如果你想“揭开面纱”并做更细粒度的工作,比如编写你自己的训练循环,你可以。将TensorFlow与JavaScript结合使用Python是使用TensorFlow和机器学习的最流行语言。但JavaScript现在也是TensorFlow的一流语言,JavaScript的一大优势是它可以在任何有网络浏览器的地方运行。TensorFlow.js(称为JavaScriptTensorFlow库)使用WebGLAPI来加速系统中可用的任何GPU的计算。它也可以使用WebAssembly后端执行,如果您只在CPU上运行,它比常规的JavaScript后端更快,但如果可能,最好使用GPU。预建模型让您可以启动并运行简单的项目,让您了解事情是如何运作的。TensorFlowLite训练的TensorFlow模型也可以部署在边缘计算或iOS或Android等移动设备上。TensorFlowLite工具集允许您在模型大小和准确性之间进行权衡,从而优化TensorFlow模型以在此类设备上良好运行。较小的模型(即12MB与25MB,甚至100+MB)的准确度较低,但准确度的损失通常很小,并且被模型的速度和能效所抵消。为什么使用TensorFlowTensorFlow为机器学习开发提供的最大好处是抽象。开发人员可以专注于整体应用程序逻辑,而不是处理实现算法的细节,或者找出将一个函数的输出连接到另一个函数的输入的正确方法。TensorFlow会处理幕后的细节。TensorFlow为需要调试和了解TensorFlow应用程序的开发人员提供了额外的便利。每个图形操作都可以单独且透明地进行评估和修改,而不是将整个图形构建为单个不透明对象并立即对其进行评估。这种所谓的“EagerExecutionMode”在旧版本的TensorFlow中作为一个选项可用,现在已成为标准。TensorBoard可视化套件让您可以通过基于Web的交互式仪表板检查和分析图形的执行情况。Tensorboard.dev服务(由Google托管)可让您托管和共享使用TensorFlow编写的机器学习实验。它可以免费存储多达100M标量、1GB张量数据和1GB二进制对象数据。(请注意,托管在Tensorboard.dev中的任何数据都是公开的,因此请勿将其用于敏感项目。)TensorFlow还受益于Google主要商业组织的支持。谷歌推动了该项目的快速发展,并创造了许多使TensorFlow更易于部署和使用的重要产品。前面提到的用于加速谷歌云性能的TPU芯片只是一个例子。使用TensorFlow进行确定性模型训练TensorFlow实现的一些细节使得某些训练作业难以获得完全确定性的模型训练结果。有时,在一个系统上训练的模型看起来与在另一个系统上训练的模型略有不同,即使它们被输入完全相同的数据。造成这种差异的原因很棘手——一个与随机数的播种方式和位置有关;另一个与使用GPU时的一些不确定行为有关。TensorFlow的2.0分支有一个选项,可以通过几行代码在整个工作流程中启用确定性。但是,此功能会以性能为代价,并且只能在调试工作流时使用。TensorFlow与PyTorch、CNTK竞争,而MXNetTensorFlow与许多其他机器学习框架竞争。PyTorch、CNTK和MXNet是满足许多相同需求的三个主要框架。让我们快速了解一下它们与TensorFlow相比的突出之处和不足之处:PyTorch是用Python构建的,与TensorFlow有许多其他相似之处:引擎盖下的硬件加速组件,允许开箱即用的设计工作的高度交互开发模型,以及许多有用的组件已经包含在内。对于需要在短时间内启动和运行的项目的快速开发,PyTorch通常是更好的选择,但TensorFlow更适合更大的项目和更复杂的工作流程。CNTK是MicrosoftCognitiveToolkit,它类似于TensorFlow,使用图形结构来描述数据流,但它主要侧重于创建深度学习神经网络。CNTK可以更快地处理许多神经网络作业,并具有更广泛的API(Python、C++、C#、Java)。但目前它不像TensorFlow那样容易学习或部署。它也仅在GNUGPL3.0许可下可用,而TensorFlow在更自由的Apache许可下可用。而且CNTK的开发并不积极。上一个主要版本是在2019年。ApacheMXNet被亚马逊用作AWS上的首要深度学习框架,几乎可以在多个GPU和多台机器上线性扩展。MXNet还支持广泛的语言API——Python、C++、Scala、R、JavaScript、Julia、Perl、Go——尽管其原生API不如TensorFlow易于使用。它还有一个小得多的用户和开发者社区。原标题:TensorFlow是什么?机器学习库解释