PyTorch 与 TensorFlow:机器学习框架之战

alt

深度学习框架是简化人工神经网络 (ANN) 开发的重要工具,并且其发展非常迅速。其中,TensorFlow 和 PyTorch 脱颖而出,各自在不同的机器学习领域占有一席之地。但如何为特定项目确定理想的工具呢?本综合指南[1]旨在阐明它们的优点和缺点。

起源

  • TensorFlow:诞生于 Google Brain 团队的大脑,TensorFlow 从专有工具转变为开源。作为一个端到端平台,它提供从基本算术运算到神经网络部署的一切。其适应性体现在与CPU、GPU、TPU、移动设备等平台的兼容性上。值得注意的是,谷歌、Uber 和微软等行业巨头已将 TensorFlow 集成到他们的运营中。

  • PyTorch:PyTorch 于 2016 年推出,通过将用户友好性与高性能相结合而引起了共鸣。其 Pythonic 设计方法和动态计算图使其成为研究社区的首选。主要用 C++ 开发,其效率非常显着,并且在 Tesla Autopilot 和 Uber 的 Pyro 等平台中的采用进一步证明了其功能。

优势

TensorFlow

  • 丰富的生态系统:其全面的库和工具使 TensorFlow 成为机器学习任务的整体解决方案。
  • 多功能性:它的兼容性扩展到多种语言,包括 C++、JavaScript 和 Python。
  • TensorBoard:一种直观的工具,提供可视化功能,可简化神经网络检查和调试。

PyTorch

  • 以用户为中心:其以 Python 为中心的特性确保了与 Python 代码的无缝集成,这使其对数据科学家极具吸引力。
  • 动态计算图:PyTorch 对动态计算图的支持允许对模型进行实时调整。
  • 轻松的多 GPU 支持:使用 PyTorch,数据并行性和计算任务的分配并不复杂。

流行趋势

alt

一段时间内 PyTorch 和 TensorFlow 之间流行度的动态变化可以与这些框架领域的重大事件和里程碑联系起来:

  • TensorFlow 的初始受欢迎程度:在我们时间线的早期阶段,TensorFlow 在受欢迎程度方面具有明显的优势。这可以归功于谷歌的大力支持及其广泛的工具,可以满足初学者和专业人士的需求。
  • PyTorch 的崛起:展望未来,PyTorch 开始获得动力。许多人发现它的方法对于研究和实验来说更加灵活,在吸引注意力方面发挥了作用。此外,随着 PyTorch 获得更多资源和支持,其用户群也在增长。
  • 最近的情况:到最后,PyTorch 和 TensorFlow 都已经在机器学习领域占据了自己的角色。对于那些寻求大规模部署和行业解决方案的人来说,TensorFlow 仍然是一个不错的选择。 PyTorch 因其强调灵活性而受到许多人的欢迎,特别是在研究领域。

局限

TensorFlow

  • 复杂性:虽然多功能性是一种优势,但它可能会带来一些复杂性,这可能会让一些人望而生畏。
  • 死板:一旦设置了计算图,进行更改并不简单。
  • 有限的初始 GPU 语言支持:早期的 TensorFlow 版本有 GPU 和语言限制。

PyTorch

  • 生产环境:虽然 PyTorch 在研究方面表现出色,但过渡到全面生产有时需要额外的步骤。
  • 可视化:PyTorch 开箱即用的可视化能力与 TensorBoard 的可视化能力不太匹配。

静态与动态计算图

TensorFlow 和 PyTorch 之间的基本区别在于它们的计算图方法。 TensorFlow 采用静态计算图,而 PyTorch 提倡动态计算图。

TensorFlow

在 TensorFlow 中,首先定义计算图。只有设置好图表后,您才能在会话中运行它并输入数据。

import tensorflow as tf

# Define the graph
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
sum_ab = a + b

# Initiate a session
with tf.Session() as sess:
    # Input data and execute the graph
    result = sess.run(sum_ab, feed_dict={a: 1, b: 2})

print(result)

PyTorch

使用 PyTorch,操作在编写时执行,并且图形是动态构建的。

import torch

# Operations are performed immediately
a = torch.tensor(1.0)
b = torch.tensor(2.0)
sum_ab = a + b

print(sum_ab)

虽然 TensorFlow 的静态方法可以在图编译期间进行优化,但它可能不太直观,特别是对于那些刚接触深度学习的人来说。相反,PyTorch 的动态特性更加灵活,特别有利于研究。

部署与集成

在考虑部署时,尤其是在生产环境中,框架与各种平台的兼容性和易于集成变得至关重要。

TensorFlow

  • TensorFlow Serving:专为生产就绪部署而设计。它支持多种模型和版本控制,确保无缝过渡和回滚。
  • TensorFlow Lite:专为移动和嵌入式设备量身定制,允许在资源有限的边缘设备上进行机器学习。
  • 云集成:作为 Google 产品,TensorFlow 与 Google Cloud 高效集成,提供可扩展的训练和部署等优势。

PyTorch

  • TorchServe:TorchServe 是一个相对较新的补充,提供了一种大规模部署 PyTorch 模型的简单方法。它无缝处理版本控制和日志记录等任务。
  • ONNX 兼容性:PyTorch 模型可以导出为 ONNX(开放神经网络交换)格式,这确保了深度学习框架之间的互操作性以及在各种平台上更轻松的部署。
  • 本机移动支持:PyTorch 提供本机库来支持 Android 和 iOS,从而简化了移动设备上的部署过程。

社区支持和文档

框架的增长、适应性和可持续性通常反映了其社区的活力。

TensorFlow

  • 庞大的社区:TensorFlow 存在的时间较长,并且已经建立了一个庞大的社区。在论坛或 Stack Overflow 上找到常见(和不常见)问题的解决方案的可能性更高。
  • 全面的文档:TensorFlow 的文档内容丰富,为各种任务和级别提供教程、指南和最佳实践。

PyTorch

  • 快速增长的社区:虽然较新,PyTorch 的社区正在快速增长,尤其是在学术和研究领域。
  • 用户友好的文档:PyTorch 的文档清晰简洁,经常因其简单性和易于理解而受到称赞,特别是对于初学者来说。

未来发展

密切关注每个框架的发展方向可以深入了解它们的寿命和相关性。

TensorFlow

  • 对 TF 2.x 的投资:随着 TensorFlow 2.x 的发布,借用了其他框架的一些最佳功能,明显推动了使 TensorFlow 更加用户友好和直观。
  • 不断发展的生态系统:借助 TensorFlow.js(用于基于浏览器的应用程序)和 TensorFlow Hub(用于可重用模型组件)等工具,TensorFlow 生态系统不断扩展。

PyTorch

  • 研究到生产:借助 TorchScript 和 TorchServe 等工具,PyTorch 正在弥合研究和生产之间的差距,确保模型可以无缝过渡。
  • 扩展库:TorchText、TorchVision 和 TorchAudio 等库正在不断开发,为从 NLP 到计算机视觉的一系列应用提供预训练的模型和数据集。

选择

在 TensorFlow 和 PyTorch 之间进行选择并不是要选择“最佳”框架,而是要找到最符合您需求的框架。这两个框架都具有独特的优势,并且在解决其最初的局限性方面取得了重大进展。通过评估您的项目需求、您对 Python 的熟悉程度、可扩展性的需求、部署偏好以及您正在寻求的社区支持类型,您可以做出确保效率和生产力的选择。随着深度学习世界的不断发展,这些框架也会不断发展,保持更新将使您能够一次又一次地做出明智的决策。

Reference

[1]

Source: https://medium.com/@kaveh.kamali/pytorch-vs-tensorflow-the-battle-of-machine-learning-frameworks-908cc301f795

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/103745.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

报错:Could not resolve host: mirrorlist.centos.org;Unknown error

报错:Could not resolve host: mirrorlist.centos.org;Unknown error 一般是因为网络配置错误导致无法连接外网,我们先尝试ping一下www.baidu.com发现无法ping通。 果然,接下来我们就开始排查吧!! 1.网络配置查看 打开…

SpringBoot 源码分析(四) 内置Tomcat分析

一、Tomcat相关知识 1. tomcat目录结构 Tomcat文件的目录结构 2.启动流程 启动一个Tomcat服务是执行的bin目录下的脚本程序,startup.bat和 startup.sh.一个是windows的脚本,一个是Linux下的脚本,同样还可以看到两个停止的脚本 shutdown.ba…

64从零开始学Java之关于日期时间的新特性

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中,壹哥给大家讲解了Java里的格式化问题,这样我们就可以个性化设…

网络套接字编程

1.基础预备知识 1.1源ip和目的ip 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 源IP地址表示发起通信的设备的IP地址。它是数据包的出发点,标识了数据包的来源。当一个设备发送数据包到网络上的其他设备时,该数据包的源IP字段会被…

WSL2的安装与配置(创建Anaconda虚拟环境、更新软件包、安装PyTorch、VSCode)

1. WSL2 安装 以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /a…

Maven学习

Maven介绍 Maven是Apache的一个开源项目,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 Maven可以让团队能够更科学的构建项目,我们可以用配置文件的方式,对项目的名称、描述、项目版本号、项目依赖等信息进行描述…

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费 上图为:程序控制的硬件设备电路图 上图为:程序控制灯的开关软件截图,适用范围比如:台球厅桌球室的计时计费管理,计时的时候…

RedHat8升级GLIBC_2.29,解决ImportError: /lib64/libm.so.6: version `GLIBC_2.29

问题背景 在做大模型微调训练时,执行python脚本时出现如下报错: 查看当前服务器版本,确实没有GLIBC_2.29的 strings /lib64/libm.so.6 | grep GLIBC_ GLIBC_2.2.5 GLIBC_2.4 GLIBC_2.15 GLIBC_2.18 GLIBC_2.23 GLIBC_2.24 GLIBC_2.25 GLIB…

MySQL的优化利器:索引条件下推,千万数据下性能提升273%

MySQL的优化利器:索引条件下推,千万数据下性能提升273%🚀 前言 上个阶段,我们聊过MySQL中字段类型的选择,感叹不同类型在千万数据下的性能差异 时间类型:MySQL字段的时间类型该如何选择?千万…

[Go版]算法通关村第十八关青铜——透析回溯的模版

目录 认识回溯思想回溯的代码框架从 N 叉树说起有的问题暴力搜索也不行回溯 递归 局部枚举 放下前任Go代码【LeetCode-77. 组合】回溯热身-再论二叉树的路径问题题目:二叉树的所有路径Go 代码 题目:路径总和 IIGo 代码 回溯是最重要的算法思想之一&am…

【Jenkins 安装】

一:安装文件夹准备 在/home/admin 界面下新建三个文件夹,用来安装tomcat、maven 1.打开,/home/admin目录 cd /home/admin 2.新建三个文件夹 mkdir tomcat mkdir maven 二:安装tomcat 1.打开tomcat目录进行tomcat的安装 访问:h…

LSKA(大可分离核注意力):重新思考CNN大核注意力设计

文章目录 摘要1、简介2、相关工作3、方法4、实验5、消融研究6、与最先进方法的比较7、ViTs和CNNs的鲁棒性评估基准比较8、结论 摘要 https://arxiv.org/pdf/2309.01439.pdf 大型可分离核注意力(LSKA)模块的视觉注意力网络(VAN)已…

SpringDoc API文档工具集成SpringBoot - Swagger3

1、引言 之前在Spring Boot项目中一直使用的是SpringFox提供的Swagger库,发现已经超过3年没出新版本了!SpringDoc是一款可以结合Spring Boot使用的API文档生成工具,基于OpenAPI 3,是一款更好用的Swagger库!值得一提的是…

高速下载b站视频的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

JAVA 链式编程和建造者模式的使用(lombok的使用)

0.说明 0.1 链式编程 链式编程的原理是返回一个this对象,也就是返回对象本身,从而达到链式效果。这样可以减少一些代码量,是java8新增的内容。 此处主要介绍在新建对象使用链式编程更加方便的创建对象。链式编程的一些常见用法可以看这个&a…

C++笔记之初始化二维矩阵的方法

C笔记之初始化二维矩阵的方法 —— 2023年5月20日 上海 code review! 文章目录 C笔记之初始化二维矩阵的方法一.常见方法1. 使用数组2. 使用向量3. 使用数组的动态分配4. 使用嵌套的 std::vector 并使用resize方法5. 初始化固定大小的 std::array 二.C中使用vector初始化二维矩…

CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)

CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(Cascading Style Sheets)。下面是一些常用的CSS3属性及其详细解释: border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可…

基于Java的新闻发布管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

华为云HECS云服务器docker环境下安装nacos

华为云HECS云服务器,安装docker环境,查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 docker pull nacos/nacos-server二、宿主机创建挂载目录 执行如下命令: mkdir -p /usr/local/nacos/logs mkdir -p /usr/local/nacos/con…

基于指数分布优化的BP神经网络(分类应用) - 附代码

基于指数分布优化的BP神经网络(分类应用) - 附代码 文章目录 基于指数分布优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.指数分布优化BP神经网络3.1 BP神经网络参数设置3.2 指数分布算法应用 4.测试结果…