PyTorch与TensorFlow:如何选择

本文对比了PyTorch和TensorFlow这两个深度学习框架,讨论了它们的特点、适用场景以及如何选择。PyTorch以其动态计算图和Python的紧密集成受到青睐,而TensorFlow则以其成熟稳定和广泛的应用见长。Fast.ai库为PyTorch提供了简化训练的高级API。同时,TensorFlow 2.0的急切执行模式提升了易用性。在选择框架时,应考虑项目需求、已有技能和学习曲线。
摘要由CSDN通过智能技术生成

并非所有的回归或分类问题都需要通过深度学习来解决。 因此, 机器学习并不需要解决每个回归或分类问题。 毕竟,许多数据集都可以通过分析或简单的统计程序进行建模。

另一方面,在某些情况下,深度学习或深度转移学习可以帮助您训练比创建任何其他方法都更准确的模型。 对于这些情况,PyTorch和TensorFlow可能会非常有效,尤其是如果已经有与框架模型库中所需模型相似的训练模型。

[理解机器学习的意义: 人工智能,机器学习和深度学习:您需要知道的一切 | 机器学习的解释 | 机器学习算法进行了解释 | 深度学习解释了 | 通过InfoWorld大数据和分析报告时事通讯深入了解分析和大数据。 ]

火炬

PyTorch建立在较旧的Torch和Caffe2框架上。 您可能会从名称中猜到,PyTorch使用Python作为其脚本语言,并使用经过改进的Torch C / CUDA后端。 Caffe2的生产功能已合并到PyTorch项目中。

PyTorch被誉为“具有强大GPU加速功能的Python中的张量和动态神经网络”。 这意味着什么?

张量是一种数学构造,在物理学和工程学中大量使用。 秩为2的张量是一种特殊的矩阵。 取一个带有张量的向量的内积会产生另一个具有新大小和新方向的向量。 TensorFlow的名字来自于张量(具有突触权重)在其网络模型中的流动方式。 NumPy也使用张量,但将它们ndarray

GPU加速是大多数现代深度神经网络框架的要求。 动态神经网络可以在迭代之间变化,例如允许PyTorch模型在训练过程中添加和删除隐藏层,以提高其准确性和通用性。 PyTorch会在每个迭代步骤动态地重新创建图形。 相反,TensorFlow默认情况下会创建一个数据流图,优化图代码的性能,然后训练模型。

在TensorFlow中,急切的执行模式是一个相当新的选项,但这是PyTorch运行的唯一方式:API调用在调用时执行,而不是添加到图形中以供稍后运行。 看来它的计算效率会降低,但是PyTorch就是按照这种方式工作的,并且在训练或预测速度上也不是懈怠。

PyTorch集成了加速库(例如Intel MKLNvidia cuDNNNCCL)以最大化速度。 其核心CPU和GPU Tensor和神经网络后端-TH(Torch),THC(Torch CUDA),THNN(Torch CUDA神经网络)和THCUNN(Torch CUDA神经网络)-被编写为具有C99 API的独立库。 同时,PyTorch不是绑定到整体C ++框架中的Python。 目的是将其与Python深度集成,并允许使用其他Python库。

Fast.ai和Fastai库

Fast.ai是一家小型公司,它通过面向程序员,软件库,前沿研究和社区的免费课程,使深度学习更易于使用,并吸引了来自各个背景的更多人员。

基于PyTorch的fastai库使用现代最佳实践简化了快速而准确的神经网络的训练。 它基于对Fast.ai进行的深度学习最佳实践的研究,其中包括对视觉,文本,表格和协作(协作过滤)模型的“开箱即用”支持。

为了第一近似,fastai库是PyTorch为Keras是TensorFlow。 一个重大区别是PyTorch不正式支持fastai。

TensorFlow

在所有可用的优秀机器学习和深度学习框架中 ,TensorFlow是最成熟的,在研究论文中被引用最多(甚至不包括Google员工的引用),并且在生产中使用方面的故事也最好。 它可能不是最容易学习的框架,但是随着TensorFlow 2的到来, TensorFlow的威胁程度比2016年要低得多。TensorFlow是许多Google服务的基础。

TensorFlow 2.0站点将该项目描述为“端到端开源机器学习平台”。 Google称为“平台”,是指由工具,库和社区资源组成的综合生态系统,可让研究人员在机器学习中“推动最先进的技术”,并使开发人员轻松构建和部署基于AI的应用程序。

TensorFlow 2.0有四个主要部分:

  • TensorFlow核心,一个用于开发和训练机器学习模型的开源库;
  • TensorFlow.js,一个JavaScript库,用于在Web浏览器和Node.js中训练和部署模型;
  • TensorFlow Lite,一个轻量级的库,用于在移动和嵌入式设备上部署模型; 和
  • TensorFlow Extended是一个端到端平台,用于在大型生产环境中准备数据,训练,验证和部署模型。

TensorFlow 2.0注重简单性和易用性,并在任何平台上进行了更新,如渴望执行,直观的高级API和灵活的模型构建。 急切的执行意味着TensorFlow代码在定义时就运行,而不是将节点和边添加到要在以后的会话中运行的图形中,这是TensorFlow的原始模式。

有效TensorFlow 2.0指南是使用高级tf.keras API,而不是旧的低级API。 这将大大减少您需要编写的代码量。 您可以每层使用一行代码来构建Keras神经网络,如果利用循环结构,则可以更少。

TensorFlow.js是一个库,用于在JavaScript中开发和训练机器学习模型并将其部署在浏览器或Node.js中。 在TensorFlow.js ml5.js之上还构建了一个高级库,该库隐藏了张量和优化器的复杂性。

在浏览器中 ,TensorFlow.js支持移动设备以及桌面设备。 如果您的浏览器支持WebGL着色器API,则TensorFlow.js可以使用它们并利用GPU。 与CPU后端相比,这可以使速度提高100倍。 TensorFlow.js演示程序在具有GPU的计算机上的浏览器中以惊人的速度快速运行。

TensorFlow Lite是用于设备上推理的开源深度学习框架。 目前,它为iOS,ARM64和Raspberry Pi构建模型。 TensorFlow Lite的两个主要组件是解释器和转换器。 解释器在许多不同的硬件类型上运行经过特殊优化的模型。 转换器将TensorFlow模型转换为供解释器使用的有效形式,并且可以引入优化以改善二进制大小和性能。

TensorFlow ExtendedTFX )是用于部署生产机器学习管道的端到端平台。 训练模型后,应该考虑一下。 管道包括数据验证功能工程建模模型评估服务推断以及管理在线,本机移动和JavaScript目标的部署。

阅读我对TensorFlow 2.0的评论

凯拉斯

Keras是用于构建神经网络模型的高级前端规范和实现。 Keras随附了对三个后端深度学习框架的支持:TensorFlow,CNTK和Theano。 亚马逊目前正在为Keras开发MXNet后端。 也可以将PlaidML(一个独立项目)用作Keras的后端,以利用对所有GPU的PlaidML的OpenCL支持。

TensorFlow是Keras的默认后端,也是许多使用案例的推荐后端,其中包括通过CUDA和cuDNN在Nvidia硬件上进行GPU加速,以及在Google Cloud中进行Tensor处理单元(TPU)加速。 TensorFlow还包含一个内部tf.keras类,与外部Keras安装分开,这是TensorFlow首选的高级前端,如上所述。

Keras具有一个高级环境,可以减少在其顺序模型中的一行代码中向神经网络添加一层,并且每个函数都需要调用一个函数来编译和训练模型。 Keras可以根据需要使用其Model或功能性API在较低级别上工作。

Keras允许您通过子类keras.Model进一步降低到Python编码级别,但是在可能的情况下更喜欢功能性API。 它还具有一个Scikit学习API,因此您可以使用Scikit学习网格搜索在Keras模型中执行超参数优化

阅读我对Keras的评论

深度学习与迁移学习

PyTorch和TensorFlow都支持深度学习和转移学习。 转移学习有时也称为自定义机器学习,它从预先训练的神经网络模型开始,并为数据定制最终层。

从头开始训练深度神经网络非常耗时,并且需要大量标记数据。 转移学习需要更少的时间,并且需要更少的新标记示例,但是只有在存在预训练模型的情况下,转移学习才有用。 幸运的是,所有主要的深度学习框架都提供了某种模型动物园。

用于图像分类的卷积神经网络(又名ConvNet或CNN)是转移学习效用的主要示例。 PyTorch和TensorFlow都提供了有关如何使用转移学习来训练卷积神经网络的教程。 TensorFlow转移学习教程演示了如何使用转移学习进行特征提取和微调。 PyTorch转移学习教程演示了相同的两种方法。

如果您想了解有关卷积神经网络转移学习的更多信息,则可能需要阅读有关该主题Stanford CS231笔记,并遵循参考文献。 这些注释的关键语录:

实际上,很少有人会从头开始训练整个卷积网络(使用随机初始化),因为拥有足够大小的数据集相对很少。 取而代之的是,通常在非常大的数据集(例如ImageNet,其中包含120万个具有1,000个类别的图像)上对ConvNet进行预训练,然后将ConvNet用作所需任务的初始化或固定特征提取器。

如何选择深度学习框架

在PC和Mac的早期,人们经常问我要买哪一种。 真正的答案是这是一个错误的问题(或“取决于情况”),但我通常通过询问一些后续问题来帮助人们找到自己的答案,首先是“您想对计算机做什么? ” 和“您有不能没有的应用程序吗?”

同样,“我应该使用哪种深度学习框架?” 这不是一个正确的问题。 后续问题可帮助找出比“取决于情况”更好的答案,首先是“您想用模型完成什么?”。 并继续深入研究可用于培训的数据类型。

如果您不熟悉深度学习,建议您先阅读TensorFlow 2 中的KerasPyTorch中的fastai的教程 。 在每种方法中都有很多要学习的内容,而无需深入研究TensorFlow和PyTorch的较低级API,并且您会对这两种方法有所了解。 您可能还会意识到这两个框架实际上有多么相似,以及它们在多大程度上依赖于相同的概念和技术。

在许多用例中,选择哪种框架都无关紧要:您会发现基本上每个框架都可以使用相同的模型。 对于某些特定的用例,您可能会发现一个比另一个更好的-至少在当前的形式上。 您可能还会发现,无论是由于框架中的某些基本功能还是由于教程的质量,使您比另一种更容易学习。

From: https://www.infoworld.com/article/3433857/pytorch-vs-tensorflow-how-to-choose.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值