互联网资讯 / 人工智能 · 2023年12月10日 0

2021年PyTorch与TensorFlow最新版本对比分析

自从深度学习重新获得关注以来,众多机器学习框架不断涌现,成为研究者和行业专业人士的热门选择。从早期的学术框架如 CaFFe 和 Theano,到如今拥有强大工业支持的 PyTorch 和 TensorFlow,研究者们在面临众多选择时常常感到困惑。

PyTorch、TensorFlow最新版本对比,2021年了你选谁?
机器学习框架。

TensorFlow 和 PyTorch 是当前最受欢迎的两个机器学习库。TensorFlow 由谷歌团队于 2015 年推出,而 PyTorch 则是 Facebook 的团队在 2017 年开源的。

为了更好地利用不同机器学习框架的优势,许多从业者对它们进行了比较,以帮助自己选择最合适的框架。

本文将从两个方面对这两个库(PyTorch 1.8 和 TensorFlow 2.5)进行比较:

最新版本中的功能更新;选择哪个框架及其原因。

TensorFlow 2.x 与 PyTorch 1.8 比较

TensorFlow 2.x

TensorFlow 2.x 相较于 1.x 版本有了诸多改进,其中最显著的是 TensorFlow.js 的发布。随着网络应用的普及,越来越多的需求促使开发者希望在浏览器中部署模型。使用 TensorFlow.js,开发者可以在浏览器中运行现有的 Python 模型,重新训练模型,甚至使用 JavaScript 完全构建和训练模型,无需 Python 环境。

另一个重要的更新是 TensorFlow Lite,这是一个轻量级库,专为移动和嵌入式设备的模型部署而设计。这是因为移动和网络应用是最主要的应用领域。通过 TensorFlow Lite,用户可以轻松将现有模型转换为“压缩的 flat buffer”,并将其加载到移动设备或其他嵌入式设备中。主要的优化过程是将 32 位浮点数转换为 8 位,这样可以降低内存使用,更适合嵌入式设备。

此外,TensorFlow Extended(TFX)也已发布,它是一个用于部署生产级机器学习工作流的端到端平台。TFX 在机器学习的三个关键领域(网络应用、移动应用和生产管理)表现出色。虽然机器学习生产流程仍需大量研究和开发,但 TFX 可以解决经典的软件生产挑战,如可扩展性、可维护性和模块化。同时,它也有助于应对机器学习特有的问题,如持续在线学习、数据验证和数据管理等。

PyTorch 1.8

与 TensorFlow Lite 类似,PyTorch 对其现有的 PyTorch Mobile 进行了改进。该框架支持量化、跟踪、优化和保存适用于 Android 和 iOS 的模型。此外,PyTorch Lite Interpreter 的原型也已发布,旨在减少移动设备上二进制运行时的大小。此外,PyTorch 还通过更具体的错误处理和管道并行性增强了对分布式训练的支持。PyTorch Profiler 工具则用于分析应用程序和模型的执行时间、执行流程和内存消耗等。

尽管 PyTorch Lightning 并不是 PyTorch 1.8 的一部分,但它的发布值得一提。PyTorch Lightning 的出现使得编码神经网络更加简便,它可以被看作是 PyTorch 的 Keras,因为它在一定程度上简化了模型实现的过程。这与 Keras 显著改进了 TensorFlow 的情况相似,都是为了让开发者能够更快、更轻松地实现模型。

如何选择?

总体而言,这两个库都非常出色,在性能和功能上相差无几。通常情况下,它们在编码风格上有所不同。

PyTorch、TensorFlow最新版本对比,2021年了你选谁?
PyTorch 以其面向对象编程(OOP)风格而著称。例如,在创建自定义模型或数据集时,开发者通常会创建一个新类,继承自默认的 PyTorch 类,然后进行相应的代码调试。尽管 OOP 为代码提供了一定的结构,但这也可能导致代码变得比较冗长。

相对而言,使用 TensorFlow 时,开发者通常会用到 Keras。在进行 Kaggle 比赛(如监督学习中的图像分类、目标检测、图像分割、自然语言处理等任务)时,Keras 的代码实现往往比 PyTorch 更为简洁。对于初学者或中级用户来说,这样的选择十分合适,因为不需要花费过多时间去理解和解构代码。

在某些情况下,特定的机器学习领域可能需要特定的模型。例如,在进行目标检测比赛时,若想实现 DETR(Facebook 的 Data-Efficient Transformer),会发现大部分资源都是用 PyTorch 编写的,因此在这种情况下,使用 PyTorch 会更加便利。同时,PyTorch 的代码实现虽然较长,但它们涵盖了许多底层细节。这既是优点也是缺点。对于初学者来说,学习底层细节有助于理解,然后再去使用更高层次的 API(如 Keras)。然而,这也可能导致在细节和较长代码段中迷失。因此,如果项目的时间限制较紧,选择 Keras 可能是更明智的选择。