iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何进行Keras vs PyTorch框架比较
  • 221
分享到

如何进行Keras vs PyTorch框架比较

2023-06-04 19:06:53 221人浏览 薄情痞子
摘要

如何进行Keras vs PyTorch框架比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经

如何进行Keras vs PyTorch框架比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在 Keras 与 PyTorch 的对比中,作者还给出了相同神经网络在不同框架中性能的基准测试结果。目前在 GitHub 上,Keras 有超过 31,000 个 Stars,而晚些出现的 PyTorch 已有近 17,000 个 Stars。

值得一提的是,尽管在 4 月底 PyTorch 在 0.4 版本中已经加入了对于 windows 的支持,但其对比 Keras 与 Tensorflow 在 Windows 上的稳定性还略有差距。

两大框架的链接:

Keras:https://github.com/keras-team/keras (Https://keras.io/)

PyTorch:https://github.com/pytorch/pytorch

你想学习深度学习吗?是要将深度学习应用到业务中,还是用深度学习开展副业,抑或只是为了得到一些适合市场需求的技能?无论目标是什么,选择合适的深度学习框架是达到目标的第一步。

我们强烈建议你选择 Keras 或 PyTorch。它们都是非常强大的工具,且不管是学习还是实验都很有乐趣。我们是从教师和学生的角度考虑的。本文作者 Piotr 在企业举办过 Keras 和 PyTorch 研讨会,Rafa?则正在学习这两种框架。

一、简介

Keras 和 PyTorch 是颇受数据科学家欢迎的深度学习开源框架。

Keras 是能够在 TensorFlow、CNTK、Theano 或 MXNet 上运行的高级 api(或作为 TensorFlow 内的 tf.contrib)。Keras 于 2015 年 3 月首次发布,之后即因其易用性和语法简洁性而受到支持,得到快速发展。Keras 是谷歌支持的一款框架。

PyTorch 于 2017 年 1 月对外发布,是专注于直接处理数组表达式的较低级别 API。去年它受到了大量关注,成为学术研究和需要优化自定义表达式的深度学习应用偏好的解决方案。它是 Facebook 支持的一款框架。

在讨论二者的具体细节之前,我们想先说明:对于「哪一个框架更好」这个问题我们没有直接明了的答案。选择哪一个框架最终取决于你的技术背景、需求和期望。本文旨在帮助你更好地了解何时应该选择 Keras 或 PyTorch。

一句话总结:Keras 更容易学习和用标准层进行实验,即插即用;PyTorch 提供一种较低级别的方法,对于更具备数学背景的用户来讲灵活性更强。

二、所以说为何不用其他框架呢?

本文不讨论选择 TensorFlow 作为首选深度学习框架的优劣势,因为我们认为 TensorFlow 与 Keras(TensorFlow 的官方高级库)和 PyTorch 相比对于新手不够友好。尽管你可以找到一些 Theano 教程,但它已不再处于活跃开发状态。Caffe 缺少灵活性,Torch 使用 lua 语言(然而其重写非常难:))。MXNet、Chainer 和 CNTK 目前应用不那么广泛。

三、Keras vs PyTorch:易用性和灵活性

Keras 和 PyTorch 的运行抽象层次不同。

Keras 是一个更高级别的框架,将常用的深度学习层和运算封装进干净、乐高大小的构造块,使数据科学家不用再考虑深度学习的复杂度。

PyTorch 提供一个相对较低级别的实验环境,使用户可以更加自由地写自定义层、查看数值优化任务。当你可以使用 python 的全部能量,访问使用的所有函数的核心,则复杂架构的开发更加直接。这自然会以冗长为代价。

下面用在 Keras 和 PyTorch 中定义的简单卷积网络来对二者进行对比:

Keras

model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(MaxPool2D()) model.add(Conv2D(16, (3, 3), activation='relu')) model.add(MaxPool2D()) model.add(Flatten()) model.add(Dense(10, activation='softmax'))

PyTorch

class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 32, 3) self.conv2 = nn.Conv2d(32, 16, 3) self.fc1 = nn.Linear(16 * 6 * 6, 10) self.pool = nn.MaxPool2d(2, 2) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) xx = x.view(-1, 16 * 6 * 6) x = F.log_softmax(self.fc1(x), dim=-1) return x model = Net()

上述代码片段显示了两个框架的些微不同。至于模型训练,它在 PyTorch 中需要大约 20 行代码,而在 Keras 中只需要一行。GPU 加速在 Keras 中可以进行隐式地处理,而 PyTorch 需要我们指定何时在 CPU 和 GPU 间迁移数据。

如果你是新手,那么 Keras 作为更高级别的框架可能具备明显优势。Keras 确实可读性更强,更加简练,允许用户跳过一些实现细节,更快地构建自己的第一个端到端深度学习模型。但是,忽略这些细节会限制用户探索深度学习流程中每个计算模块内在工作原理的机会。使用 PyTorch 会提供更多机会,来更深入地思考深度学习概念,如反向传播以及其他训练过程。

也就是说,Keras 虽然比 PyTorch 简单得多,但它绝不是「玩具」,它是初学者以及经验丰富的数据科学家使用的正经深度学习工具。

例如,在 DSTL 卫星图像特征检测 Kaggle 竞赛中,最优秀的 3 支队伍的解决方案都使用了 Keras,第四名(deepsense.ai 队伍)使用了 PyTorch 和 Keras。

你的深度学习应用所需的灵活性是否超出 Keras 能够提供的灵活性值得考虑。根据你的需求,遵循 Rule of least power,Keras 可能是最完美的解决方案。

结论

Keras:更简练,更简单的 API

PyTorch:更灵活,鼓励用户更深入地理解深度学习概念

四、Keras vs PyTorch:流行度和可获取学习资源

框架流行度不仅代表了易用性,社区支持也很重要——教程、代码库和讨论组。截至 2018 年 6 月,Keras 和 PyTorch 的流行度不断增长,不管是 GitHub 还是 arXiv 论文(注意大部分提及 Keras 的论文也提到它的 TensorFlow 后端)。根据 KDnuggets 调查,Keras 和 PyTorch 是增长最快的数据科学工具。

尽管两个框架的文档都比较好,但是 PyTorch 的社区支持更强大:其讨论板很值得访问,其中能找到你在文档或 StackOverflow 中找不到的答案。

我们发现基于 Keras 的初学者深度学习课程要比基于 PyTorch 的课程简单,这使得前者更容易受初学者喜欢。Keras 的代码可读性和无与伦比的易用性使它被深度学习爱好者、教师和实力派 Kaggle 冠军广泛使用。

伟大的 Keras 资源和深度学习课程示例,参见 Piotr Migda?写的文章《Starting deep learning hands-on: image classification on CIFAR-10》,以及 Keras 创建者 Fran?ois Chollet 写的书《Deep Learning with Python》。至于 PyTorch 资源,我们推荐官方教程,提供了稍微更有挑战性的综合方法来学习神经网络的内在工作原理。

结论

Keras:大量可获取教程和可重用代码

PyTorch:卓越的社区支持和活跃的开发

五、Keras vs PyTorch:debug 和内省

Keras 封装了大量计算模块,这使得确定导致问题的代码较为困难。

相比起来,PyTorch 更加详细,我们可以逐行执行脚本。和 debug NumPy 类似,我们可以轻松访问代码中的所有对象,使用 print 语句(或任何标准 Python debug 语句)查看有问题的代码。

Keras 用户创建的标准网络要比 PyTorch 用户创建的标准网络出错的机率小一个数量级。但是一旦出错,则损害巨大,且通常很难定位出错的代码行。PyTorch 提供更直接了当的 debug 经验,而无需关注模型复杂度。此外,当你怀疑哪里出错时,你可以查找 PyTorch repo 查看可读代码。

结论

PyTorch:debug 能力更强

Keras:debug 简单网络的需求的(潜在)频率更低

六、Keras vs PyTorch:导出模型和跨平台可移植性

在生产环境中,导出和部署自己训练的模型时有哪些选择?

PyTorch 将模型保存在 Pickles 中,Pickles 基于 Python,且不可移植,而 Keras 利用 JSON + H5 文件格式这种更安全的方法(尽管在 Keras 中保存自定义层通常更困难)。另一方面,Keras 也有 R 语言接口,如果你合作的数据分析师团队使用 R 语言,那么你会用得上它。

Keras 是在 TensorFlow 上运行的,这意味着它可以通过 TensorFlow for Mobile 和 TensorFlow Lite 享有更多选择来部署到移动平台。你编写的 WEB 应用也可以通过 TensorFlow.js 或 Keras.js 部署到网页上。例如,你可以看看这个深度学习驱动的浏览器插件,它可以检测密集恐惧症触发因素:https://github.com/cytadela8/trypophobia。

导出 PyTorch 模型的过程由于其 Python 代码的限制而更加费力,目前人们广泛采用的方法是首先使用 ONNX 将 PyTorch 模型转换为 Caffe2 形式。

结论

Keras 获胜:它有更多的部署选项(直接通过 TensorFlow 后端),模型导出也更简单。

七、Keras vs PyTorch:性能篇

Donald Knuth 有一句名言:不成熟的优化是编程中所有邪恶(至少大部分)的根源。

在大多数情况下,基准测试中的速度差异不应该成为框架选择的主要标准——特别是在学习阶段。GPU 时间比其数据科学家的时间显然便宜得多。而且,在学习过程中,性能瓶颈大多是由失败的实现、未优化的网络和数据加载造成的,而不是框架本身的运行速度。当然,为了完整地进行比较,我们还是要介绍这一方面。在这里我们推荐两个性能对比结果:

Wojtek Rosiński 的《TensorFlow, Keras and PyTorch Comparison》:https://wrosinski.github.io/deep-learning-frameworks/

微软的《Comparing Deep Learning Frameworks: A Rosetta Stone Approach》:https://github.com/ilkarman/DeepLearningFrameworks/

PyTorch 和 TensorFlow 一样快,在循环神经网络上或许更快,相比之下,Keras 通常速度较慢。正如第一篇文章的作者指出的那样:大多数情况下,高性能框架(即 PyTorch 和 TensorFlow)的计算效率优势不敌快速开发环境以及 Keras 提供的实验易用性。

如何进行Keras vs PyTorch框架比较

就训练速度而言,PyTorch 胜过 Keras

八、Keras vs PyTorch:对比总结

Keras 和 PyTorch 都是深度学习框架初学者非常棒的选择。如果你是数学家、研究员或者想要理解模型的本质,那么可以考虑选择 PyTorch。在需要更先进的定制化和 debug 时(例如用 YOLOv3 做目标检测或者带有注意力的 LSTM),或者当我们需要优化数组表达式而不是神经网络时(例如矩阵分解或者 Word2vec 算法),PyTorch 真的很棒。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何进行Keras vs PyTorch框架比较

本文链接: https://www.lsjlt.com/news/239292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行Keras vs PyTorch框架比较
    如何进行Keras vs PyTorch框架比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经...
    99+
    2023-06-04
  • ASP 框架对象和 Django:如何在两个框架之间进行比较?
    ASP框架对象和Django:如何在两个框架之间进行比较? 在现代Web开发中,框架是必不可少的工具。ASP框架和Django是两个非常流行的框架,它们都提供了强大的工具来简化Web开发。但是,它们之间的差异是什么?本文将介绍ASP框架对象...
    99+
    2023-11-11
    框架 对象 django
  • ASP Core vs 其他框架:深入比较和对比
    简介 ASP Core 是一种用于构建现代 Web 应用程序的开源、跨平台、基于 .NET 的框架。它以其高性能、可扩展性和安全性而闻名。然而,在选择用于特定项目的 Web 框架时,将其与其他流行框架(例如 ASP.NET MVC、Nod...
    99+
    2024-03-07
    ASP Core、ASP.NET MVC、Node.js、Java Spring Boot、Web 框架、性能、可扩展性、安全性
  • java如何用equals进行比较
    在Java中,可以使用equals()方法来比较两个对象是否相等。equals()方法是Object类的一个方法,可以在所有的Jav...
    99+
    2023-08-22
    java equals
  • 如何进行JSON和XML的比较
    这篇文章给大家介绍如何进行JSON和XML的比较,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JSON VS XML 的基本方法是前台载入后台声明JavaScript对象的字符串,用e...
    99+
    2024-04-02
  • 如何进行Service Mesh中的Linkerd 和Istio框架对比
    本篇文章给大家分享的是有关如何进行Service Mesh中的Linkerd 和Istio框架对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引言:各个细分行业和领域的组织机...
    99+
    2023-06-04
  • 如何在PHP中进行类型比较
    PHP是一种流行的服务器端脚本语言,常用于开发动态网站和Web应用程序。一种常见的任务是比较不同类型的值。在PHP中,可以使用一系列比较运算符来比较int,float,string和其他类型的值。本文将介绍如何在PHP中进行类型比较。1.比...
    99+
    2023-05-14
    php 比较运算符
  • 如何进行.NET 的WebSocket开发包比较
    如何进行.NET 的WebSocket开发包比较,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Web项目常常需要将数据尽可能快地推送给客户,必要时无需等待客户端请求。对于与用户...
    99+
    2023-06-17
  • c语言如何进行字符串比较
    这篇文章将为大家详细讲解有关c语言如何进行字符串比较,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方...
    99+
    2023-06-14
  • 如何进行CaptureFramework框架分析
    这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起...
    99+
    2023-06-04
  • 如何进行Hystrix开源框架
    本篇文章给大家分享的是有关如何进行Hystrix开源框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spring Cloud集成了Hystrix,Hystrix在很多大公司里...
    99+
    2023-06-19
  • 如何进行安装ThinkPHP框架
    本文小编为大家详细介绍“如何进行安装ThinkPHP框架”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何进行安装ThinkPHP框架”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、环境要求在安装 Think...
    99+
    2023-07-05
  • 如何进行equals()方法和==异同的比较
    如何进行equals()方法和==异同的比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。equals()方法是Object类的方法,所有的类都集成了此方法,还...
    99+
    2023-06-02
  • 如何进行SAP S4CRM和C4C的技术比较
    如何进行SAP S4CRM和C4C的技术比较,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。部署方式这一差异显而易见,本地部署和云端部署的区别导致了表格里其他比较项目的差异。...
    99+
    2023-06-04
  • 如何进行DB2 和SQL Server自增列比较
    如何进行DB2 和SQL Server自增列比较,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近由于对SQL Server的自增列理解不够好...
    99+
    2024-04-02
  • 如何对SSM框架进行整合
    今天就跟大家聊聊有关如何对SSM框架进行整合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不...
    99+
    2023-05-31
    ssm
  • Keras中如何进行模型蒸馏
    模型蒸馏是一种训练较大的、复杂的模型,然后用较小的模型来近似复杂模型的方法。在Keras中,可以通过以下步骤进行模型蒸馏: 定义...
    99+
    2024-03-08
    Keras
  • Keras中如何进行模型融合
    在Keras中进行模型融合可以通过以下步骤实现: 创建要融合的多个模型:首先创建多个不同的模型,可以使用不同的架构、参数和训练数...
    99+
    2024-03-12
    Keras
  • Keras中如何进行模型微调
    在Keras中进行模型微调通常需要以下步骤: 加载预训练模型:首先,加载一个预训练的模型,通常是在大规模数据集上进行训练的模型,比...
    99+
    2024-04-02
  • Keras中如何进行模型解释
    在Keras中,可以使用一些工具来解释模型,如下所示: 使用Grad-CAM(Gradient-weighted Class A...
    99+
    2024-03-08
    Keras
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作