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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebService SOAP1.1 SOAP1.12 HTTP PSOT方式调用

Visual Studio 2022 新建WebService项目 创建之后启动运行 设置默认文档即可 经过上面的创建WebService已经创建完成,添加HelloWorld3方法, [WebMethod] public string HelloWorld3(int a, string b) { //var s a b; return $"Hello World ab{a …

机器学习中的核方法

一、说明 线性模型很棒,因为它们易于理解且易于优化。他们受苦是因为他们只能学习非常简单的决策边界。神经网络可以学习更复杂的决策边界,但失去了线性模型良好的凸性特性。 使线性模型表现出非线性的一种方法是转换输入。例如,通过添加特征…

【面试经典150 | 区间】用最少数量的箭引爆气球

文章目录 Tag题目来源题目解读解题思路方法一:合并区间 其他语言python3 写在最后 Tag 【合并区间】【排序】【数组】 题目来源 452. 用最少数量的箭引爆气球 题目解读 每个气球都有一个占据x轴的一个范围,在这个范围里射出一只箭就会引爆该气球&…

C++笔记之关于函数名前的取址符

C笔记之关于函数名前的取址符 相关博文:C之指针探究(十一):函数名的本质和函数指针 code review! 文章目录 C笔记之关于函数名前的取址符一.函数名可以被视为指向函数的地址二.sayHello和&sayHello是不是等同?三.Qt信号与槽中的取地址符& 一…

2023全新小程序广告流量主奖励发放系统源码 流量变现系统

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件,吃瓜视频,或其他资源内容,通过用户付费买会员来变现,用户需要付费,有些人喜欢白嫖,所以会流失一部分用户,所以就写了这个系统…

Node编写用户登录接口

目录 前言 服务器 编写登录接口API 使用sql语句查询数据库中是否有该用户 判断密码是否正确 生成JWT的Token字符串 配置解析token的中间件 配置捕获错误中间件 完整的登录接口代码 前言 本文介绍如何使用node编写登录接口以及解密生成token,如何编写注册接…

关于 硬盘

关于 硬盘 1. 机械硬盘1.1 基本概念1.2 工作原理1.3 寻址方式1.4 磁盘磁记录方式 2. 固态硬盘2.1 基本概念2.2 工作原理 1. 机械硬盘 1.1 基本概念 机械硬盘即是传统普通硬盘,硬盘的物理结构一般由磁头与盘片、电动机、主控芯片与排线等部件组成。 所有的数据都是…

利用dns协议发起ddos反射攻击

利用DNS服务器发起反射型DDOS,攻击带宽 基本思路: 1、利用any类型的dns查询,可完成发送少量请求数据,获得大量返回数据。 2、将原请求地址改为受害者地址,则dns会向受害者返回大量数据,占用带宽 警告&…

QCC 音频输入输出

QCC 音频输入输出 QCC蓝牙芯片(QCC3040 QCC3083 QCC3084 QCC5181 等等)支持DAC、I2S、SPDIF输出,AUX、I2S、SPDIF、A2DP 输入 蓝牙音频输入,模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 输入方式切换参考 sta…

AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 梳理 AD9371 时钟,理解采样率和各个时钟之间的关系 …

RabbitMQ基础篇 笔记

RabbitMQ 余额支付 同步调用 一步一步的来,支付业务写完后,如果之后加需求,还需要增加代码,不符合开闭原则。 性能上也有问题,openfeign是同步调用,性能太差。 同步调用耦合太多。 同步的优势是可以立…

网站、小程序常见布局样式记录

文章目录 🎀前言:🐕网页样式展示小程序:《携程网》🎀持续更新... 🎀前言: 本篇博客会收藏一些作者见到的网页、小程序页面,目的是用来寻找制作项目网页页面的灵感,有需要…

mysql第一篇---索引

文章目录 mysql第一篇---索引索引的数据结构为什么使用索引?索引的及其优缺点InnoDB中索引的推演常见的索引概念InnoDB的B树索引的注意事项MyISAM中索引方案索引的代价MySQL数据结构选择的合理性 mysql第一篇—索引 索引的数据结构 为什么使用索引? 索…

修炼k8s+flink+hdfs+dlink(六:学习k8s-pod)

一:增(创建)。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 直接创建方式,并建立pod。 kubectl create deployment my-nginx-deployment --imagenginx:latest 先创建employment,不…

紫光展锐携中国联通完成RedCap芯片V517孵化测试

近日,紫光展锐携手中国联通5G物联网OPENLAB开放实验室(简称“OPENLAB实验室”)共同完成RedCap芯片V517创新孵化,并实现在联通5G全频段3.5GHz、2.1GHz、900MHz下的端到端业务验证测试。 V517是一款基于紫光展锐5G成熟平台设计与研发…

Java反射实体组装SQL

之前在LIS.Core定义了实体特性,在LIS.Model给实体类加了表特性,属性特性,外键特性等。ORM要实现增删改查和查带外键的父表信息就需要解析Model的特性和实体信息组装SQL来供数据库驱动实现增删改查功能。 实现实体得到SQL的工具类&#xff0c…

DOS攻击-ftp_fuzz.py

搭建FTP 使用AlphaFuzzer的FTPFUSS进行攻击 挖掘漏洞,自动用特殊字符看能不能把服务器崩掉 这些都是测试的目录 不能随意使用,可能会把C盘内容清掉 也可以自己写脚本测试下

二叉排序树(BST)

二叉排序树 基本介绍 二叉排序树创建和遍历 class Node:"""创建 Node 节点"""value: int 0left Noneright Nonedef __init__(self, value: int):self.value valuedef add(self, node):"""添加节点node 表示要添加的节点&quo…

使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统

上一节内容是 使用IO流完成项目实战水果库存系统https://blog.csdn.net/m0_65152767/article/details/133999972?spm1001.2014.3001.5501 package com.csdn.fruit.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java…

Vue单文件组件

一、.vue文件 我们使用Vue的单文件组件的时候&#xff0c;一个.vue文件就是一个组件。 例如我们创建一个School组件&#xff1a; 二、组件的结构 我们编写网页代码的时候有HTML结构、CSS样式、JS交互。 组件里也是同样存在这三种结构的&#xff1a; <template><d…