掌握深度学习,为什么要用PyTorch、TensorFlow框架?
作者 | Martin Heller
译者 | 弯月
责编 | 屠敏
来源 | CSDN(ID:CSDNnews)
【导读】如果你需要深度学习模型,那么 PyTorch 和 TensorFlow 都是不错的选择。
并非每个回归或分类问题都需要通过深度学习来解决。甚至可以说,并非每个回归或分类问题都需要通过机器学习来解决。毕竟,许多数据集可以用解析方法或简单的统计过程进行建模。
另一方面,在某些情况下,深度学习或深度迁移学习可以帮助你训练更准确的模型。在这些情况下,你可以考虑使用 PyTorch 和 TensorFlow ,特别是如果你所需的训练模型与其中一个框架模型库中的模型类似。
PyTorch
PyTorch 建立在旧版的 Torch 和 Caffe2 框架之上。如其名所示,PyTorch采用了脚本语言 Python,并利用改版后的Torch C/CUDA作为后端。PyTorch 项目还融入了 Caffe2 的生产功能。
PyTorch 被称为“拥有强大 GPU 加速功能的 Python 版 Tensor 和动态神经网络。”这意味着什么?
Tensor(张量)是一种物理学和工程学中广泛使用的数学结构。2 阶的 Tensor 是一种特殊的矩阵;而对向量和张量取内积就可以得到另一个拥有新长度和新方向的向量。TensorFlow 这个名字就来自张量在其网络模型中流动的方式。NumPy 也用到了 Tensor,名为 ndarray 。
GPU 加速是大多数现代深度神经网络框架的基础。动态神经网络是一种特殊的神经网络,每次迭代都会发生变化,例如,PyTorch 模型可以在训练期间通过添加和删除隐藏层,来提高其准确性和通用性。
PyTorch 会在每个迭代中实时重建计算图。相比之下,在默认情况下TensorFlow 会创建一个计算图,优化图代码以提高性能,然后训练模型。
虽然急切执行模式在 TensorFlow 中刚刚出现,但其是 PyTorch 唯一的运行方式:API 在被调用时会立即执行,而不会被添加到计算图稍后再运行。这样可能看起来计算效率会低一些,但是 PyTorch 设计的工作方式就是如此,而且实际上在训练或预测速度方面并不逊色。
PyTorch 通过集成加速库,比如英特尔 MKL、Nvidia cuDNN 和 NCCL 等,最大限度地提升速度。其核心CPU、GPU Tensor和神经网络后端TH(Torch)、THC(Torch CUDA)、THNN(Torch神经网络)和THCUNN(Torch CUDA神经网络)等,都是使用 C99 API 编写的单独库。同时,PyTorch 并不是整体式 C++ 框架的 Python 绑定。其目的是与Python 深度集成,并允许使用其他 Python 库。
Fast.ai与fastai库
fastai 库基于 PyTorch,通过现代化的最佳实践简化了快速准确的神经网络训练。它基于对 Fast.ai 深度学习最佳实践的研究,提供了包括视觉、文本、表格和协作(协作过滤)模型在内的“开箱即用”支持。
fastai 库与 PyTorch 的关系非常类似于 Keras 与 TensorFlow 。但明显的区别在于,PyTorch 没有正式支持 fastai 。
TensorFlow
TensorFlow 是众多优秀的机器学习和深度学习框架中最成熟的一个,也是研究论文中引用最多的一个(即使不算来自谷歌员工的引用也是第一),而且在生产中的使用效果也很好。它可能不是最容易学习的框架,但随着 TensorFlow 2的到来,TensorFlow 的门槛也没有 2016 年那般高了。TensorFlow 是许多 Google 服务的基础。
TensorFlow 2.0 官网对该项目的描述为:“端到端的开源机器学习平台。”,谷歌通过“平台”提供了一个包含工具、库以及社区资源的全方位生态系统,研究人员可以利用这个平台“推动机器学习达到最高水准”,而开发人员则可以利用这个平台轻松构建和部署基于 AI 的应用程序。
TensorFlow 2.0 有四个主要部分组成:
TensorFlow 核心,一个用于开发和培训机器学习模型的开源库;
TensorFlow.js,一个在 Web 浏览器和 Node.js 上训练和部署模型的 JavaScript库;
TensorFlow Lite,一个轻量级库,用于在移动和嵌入式设备上部署模型;
TensorFlow Extended,是一个端到端平台,用于在大型生产环境中准备数据、培训、验证和部署模型。
TensorFlow 2.0 的重点放在了简单性和易用性上,其这个版本拥有一系列的新功能,包括急切执行、直观的高级 API 以及可以在任何平台上构建模型等。急切执行意味着 TensorFlow 代码定义好就可以运行,而 TensorFlow 最初的模式需要将节点和边添加到计算图中,稍后再在会话中运行。
高效地使用 TensorFlow 2.0 方法是,使用高级的 tf.keras API(而不是旧的低级 AP,这样可以大大减少需要编写的代码量。只需要使用一行代码就可以构建 Keras 神经网络中的一层,如果利用循环结构,则可以进一步减少代码量。
TensorFlow.js 是一个利用 JavaScript 开发和训练机器学习模型,并在浏览器或 Node.js 中部署模型的库。在 TensorFlow.js、ml5.js 之上还有一个高级库,它隐藏了张量和优化器的复杂性。
TensorFlow.js 可以通过浏览器支持移动设备和桌面设备。如果你的浏览器支持 WebGL 着色器 API,TensorFlow.js 可以利用它们发挥 GPU 的优势。与CPU 后端相比,这可以为你提供高达 100 倍的加速。在拥有 GPU 的计算机上,TensorFlow.js 可以非常快速地在浏览器中运行。
TensorFlow Lite 是一个用于移动设备的开源深度学习框架。目前它可以为iOS、ARM64 和 Raspberry Pi 构建模型。TensorFlow Lite 有两个主要组件:解释器和转换器。解释器可以在许多不同的硬件类型上运行经过特别优化的模型。转换器可以将 TensorFlow 模型转换为高效的形式供解释器使用,还可引入优化以缩小可执行文件大小并提高性能。
TensorFlow Extended(TFX)是用于部署生产机器学习管道的端到端平台。在你训练好一个模型后,就需要考虑这方面的工作了。管道包括数据验证、功能工程、建模、模型评估、服务推断以及管理在线、原生移动和 JavaScript 目标的部署。
Keras
Keras 是用于构建神经网络模型的高级前端规范和实现。Keras 支持三种后端深度学习框架:TensorFlow、CNTK 和 Theano。目前亚马逊正在全力为Keras 开发 MXNet 后端。你也可以使用 PlaidML(一个独立的项目)作为Keras 的后端,利用 PlaidML 的 OpenCL 支持所有 GPU 的优势。
TensorFlow是Keras的默认后端,在很多情况下我们也推荐使用TensorFlow,包括通过 CUDA 和 cuDNN 在 Nvidia 硬件上实现 GPU 加速,以及利用 Google Cloud 中的 Tensor 处理单元加速等。Keras 除了可以单独安装之外,TensorFlow 还包含一个内部 tf.keras 类。如上所述,这是TensorFlow 的首选高级前端。
Keras 提供了一个高级环境,在其 Sequential 模型中向神经网络添加一层的代码量可以缩减到一行,编译和训练模型也分别只需一个函数调用。如果有需要,Keras 也允许你通过其 Model 或函数式 API 接触较低层上的代码。
你还可以利用 Keras 的子类 keras.Model 进一步深入,一直到 Python 代码级别,直到找到你喜欢的功能 API 。另外,它还有 Scikit-learn API,因此你可以利用 Scikit-learn 网格搜索在 Keras 模型中执行超参数优化。
深度学习与迁移学习
PyTorch 和 TensorFlow 都支持深度学习和迁移学习。迁移学习(有时称为自定义机器学习)可以从预先训练好的神经网络模型开始,只需为你的数据定制最终层即可。
从头开始训练深度神经网络非常耗时,并且需要大量标记数据。迁移学习花费的时间更少,而且需要的新标记样本更少,但只有在模型已预先训练好的情况下,你才可以使用迁移学习。幸运的是,所有主流的深度学习框架都提供了某种形式的模型库供你挑选模型。
图像分类中使用的卷积神经网络(也称为 ConvNets 或 CNN )是迁移学习的代表。PyTorch 和 TensorFlow 都提供了有关如何使用迁移学习来训练卷积神经网络的教程。TensorFlow 的迁移学习教程演示了如何使用迁移学习提取和微调特征。PyTorch 的迁移学习教程也演示了相同的两种方法。
如果你想了解有关卷积神经网络迁移学习的更多信息,则可能需要阅读有关该主题的文章:
斯坦福 CS231笔记
https://cs231n.github.io/transfer-learning/
并阅读相关的参考资料。以下是这些笔记中提到的一个关键点:
实际上,很少有人从头开始训练整个卷积网络(利用随机的初始化),因为你很难拥有足够大的数据集。相反,一般人们会在非常大的数据集(例如ImageNet,其中包含 1,000 个类别的 120 万个图像)上预先训练ConvNet,然后以 ConvNet 为起点或通过 ConvNet 提取感兴趣的特征。
如何选择深度学习框架
在 PC 和 Mac 出现的早期,人们经常会问我应该买哪个。其实,这个问题没有正确的答案,因为这个问题本身就是一个错误,或者我应该说“那要看你想用这台电脑干什么”,但一般在我问他们几个问题后,他们就能找到自己的答案,比如“你想用这台电脑干什么?”,或者“你有什么不可或缺的应用吗?”
同样,“我应该使用哪种深度学习框架?”也算不上一个真正的问题。这个问题同样取决于你自己,比如首先想一想“你想用你的模型干什么?”,然后再深入研究你可以用于训练的数据类型。
如果你不熟悉深度学习,那么我建议你先阅读 TensorFlow 2 中的 Keras 教程,以及 PyTorch 中的 fastai 教程。即使不深入了解 TensorFlow 和PyTorch 的低级 API ,你也有很多东西需要学习,而且你应该对这两种方法都有所了解。然后,你可能会意识到这两个框架的确有多相似之处,而且它们赖以生存的概念和技术都是相同的。
在很多情况下,选用哪种框架无关紧要:你会发现每个框架可用的模型基本相同。在某些特定的情况下,可能某个框架优于另一个——至少在当前版本是如此。你可能还会发现,学习其中某一个更为容易,原因可能是框架中的某些基本功能,也有可能是教程的质量。
原文:
https://www.infoworld.com/article/3433857/deep-learning-frameworks-pytorch-vs-tensorflow.html
(*本文为AI科技大本营转载文章,转载请联系作者)
◆
福利时刻
◆
距离大会参与通道关闭还有 1 天,扫描下方二维码或点击阅读原文,马上参与!(学生票特享 598 元,团购票每人立减优惠,倒计时 1 天!)
推荐阅读
从垃圾分类到千行百业,如何打响AI“落地战”?
2亿日活,日均千万级视频上传,快手推荐系统如何应对技术挑战
在图数据上做机器学习,应该从哪个点切入?
Docker容器化部署Python应用
AI 假冒老板骗取 24.3 万美元
编程吸金榜:你排第几?网友神回应了!
吴子宁:手握 280 多项专利的斯坦福技术先锋 | 人物志
阿里云 CDN 业务基于边缘容器的云原生转型实践
你点的每个“在看”,我都认真当成了喜欢
相关文章:

ICANN敦促业界使用DNSSEC,应对DNS劫持攻击
HTTPS加密 可以有效帮助服务器应对DNS欺骗、DNS劫持、ARP攻击等安全威胁。DNS是什么?DNS如何被利用?HTTPS如何防止DNS欺骗? DNS如何工作? 如果您想访问www.example.com,您的浏览器需要找到该特定Web服务器的IP地址。它…

Lucene.net: the main concepts
2019独角兽企业重金招聘Python工程师标准>>> In the previous post you learnt how to get a copy of Lucene.net and where to go in order to look for more information. As you noticed the documentation is far from being complete and easy to read. So in …

einsum,一个函数走天下
作者 | 永远在你身后转载自知乎【导读】einsum 全称 Einstein summation convention(爱因斯坦求和约定),又称为爱因斯坦标记法,是爱因斯坦 1916 年提出的一种标记约定,本文主要介绍了einsum 的应用。简单的说ÿ…
常用排序算法的C++实现
排序是将一组”无序”的记录序列调整为”有序”的记录序列。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,rirj,且ri在rj之前࿰…

4.65FTP服务4.66测试登录FTP
2019独角兽企业重金招聘Python工程师标准>>> FTP服务 测试登录FTP 4.65FTP服务 文件传输协议(FTP),可以上传和下载文件。比如我们可以把Windows上的文件shan上传到Linux,也可以把Linux上的文件下载到Windows上。 Cent…

JavaScript的应用
DOM, BOM, XMLHttpRequest, Framework, Tool (Functionality) Performance (Caching, Combine, Minify, JSLint) ---------------- 人工做不了,交给程序去做,这样可以流程化。 Maintainability (Pattern) http://www.jmarshall.com/easy/http/ http://dj…

miniz库简介及使用
miniz:Google开源库,它是单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。关于miniz的更详细介绍可以参考:https://code.google.com/archive/p/miniz/miniz.c is a loss…

iOS之runtime详解api(三)
第一篇我们讲了关于Class和Category的api,第二篇讲了关于Method的api,这一篇来讲关于Ivar和Property。 4.objc_ivar or Ivar 首先,我们还是先找到能打印出Ivar信息的函数: const char * _Nullable ivar_getName(Ivar _Nonnull v) …

亚马逊首席科学家李沐「实训营」国内独家直播,马上报名 !
开学了,别人家的学校都开始人工智能专业的学习之旅了,你呢?近年来,国内外顶尖科技企业的 AI 人才抢夺战愈演愈烈。华为开出200万年薪吸引 AI 人才,今年又有 35 所高校新增人工智能本科专业,众多新生即将开展…
人脸检测库libfacedetection介绍
libfacedetection是于仕琪老师放到GitHub上的二进制库,没有源码,它的License是MIT,可以商用。目前只提供了windows 32和64位的release动态库,主页为https://github.com/ShiqiYu/libfacedetection,采用的算法好像是Mult…

倒计时1天 | 2019 AI ProCon报名通道即将关闭(附参会指南)
2019年9月5-7日,面向AI技术人的年度盛会—— 2019 AI开发者大会 AI ProCon,震撼来袭!2018 年由 CSDN 成功举办 AI 开发者大会一年之后,全球 AI 市场正发生着巨大的变化。顶尖科技企业和创新力量不断地进行着技术的更迭和应用的推…

法院判决:优步无罪,无人车安全员可能面临过失杀人控诉
据路透社报道,负责优步无人车在亚利桑那州致人死亡事件调查的律师事务所发布公开信宣布,优步在事故中“不承担刑事责任”,但是当时在车上的安全员Rafaela Vasquez要接受进一步调查,可能面临车辆过失杀人罪指控。2018年3月…

09 Storage Structure and Relationships
目标:存储结构:Segments分类:Extents介绍:Blocks介绍:转载于:https://blog.51cto.com/eread/1333894

边界框的回归策略搞不懂?算法太多分不清?看这篇就够了
作者 | fivetrees来源 | https://zhuanlan.zhihu.com/p/76477248本文已由作者授权,未经允许,不得二次转载【导读】目标检测包括目标分类和目标定位 2 个任务,目标定位一般是用一个矩形的边界框来框出物体所在的位置,关于边界框的回…
人脸识别引擎SeetaFaceEngine简介及在windows7 vs2013下的编译
SeetaFaceEngine是开源的C人脸识别引擎,无需第三方库,它是由中科院计算所山世光老师团队研发。它的License是BSD-2.SeetaFaceEngine库包括三个模块:人脸检测(detection)、面部特征点定位(alignment)、人脸特征提取与比对(identification)。人…

当移动数据分析需求遇到Quick BI
我叫洞幺,是一名大型婚恋网站“我在这等你”的资深老员工,虽然在公司五六年,还在一线搬砖。“我在这等你”成立15年,目前积累注册用户高达2亿多,在我们网站成功牵手的用户达2千多万。目前我们的公司在CEO的英名带领下&…

为什么选择数据分析师这个职业?
我为什么选择做数据分析师? 我大学专业是物流管理,学习内容偏向于管理学和经济学,但其实最感兴趣的还是心理学,即人在各种刺激下反应的机制以及原理。做数据分析师,某种意义上是对群体行为的研究和量化,两者…
人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码:int test_detection() {std::vector<std::string> images{ "1.jpg", "2.jpg", "3.jpg", "4.jpeg", "5.jpeg", "…

基于Pygame写的翻译方法
发布时间:2018-11-01技术:pygameeasygui概述 实现一个翻译功能,中英文的互相转换。并可以播放翻译后的内容。 翻译接口调用的是百度翻译的api接口。详细 代码下载:http://www.demodashi.com/demo/14326.html 一、需求分析 使用pyg…

冠军奖3万元!CSDN×易观算法大赛开赛啦
伴随着5G、物联网与大数据形成的后互联网格局的逐步形成,日益多样化的用户触点、庞杂的行为数据和沉重的业务体量也给我们的数据资产管理带来了不容忽视的挑战。为了建立更加精准的数据挖掘形式和更加智能的机器学习算法,对不断生成的用户行为事件和各类…

快速把web项目部署到weblogic上
weblogic简介 BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应 用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应用系统问题所需的性…
使GDAL库支持中文路径或中文文件名的处理方法
之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图:解决方法:1. 在所有使用GDALAllRegister();语句后面加上一句CPLSetConfigOption…

创新工场论文入选NeurIPS 2019,研发最强“AI蒙汗药”
9月4日,被誉为机器学习和神经网络领域的顶级会议之一的 NeurIPS 2019 揭晓收录论文名单,创新工场人工智能工程院的论文《Learning to Confuse: Generating Training Time Adversarial Data with Auto-Encoder》被接收在列。这篇论文围绕现阶段人工智能系…

Flutter环境搭建(Windows)
SDK获取 去官方网站下载最新的安装包 ,或者在Github中的Flutter项目去 下载 。 将下载的安装包解压 注意:不要将Flutter安装到高权限路径,例如 C:\Program Files\ 配置环境变量,在Path中添加flutter\bin的全路径(如:D…
Android在eoe分享一篇推荐开发组件或者框架的文章
http://www.eoeandroid.com/thread-311194-1-1.html y4078275315 主题 62 帖子 352 e币实习版主 积分314发消息电梯直达楼主 回复 发表于 2013-11-7 09:58:45 | 只看该作者 |只看大图 34本帖最后由 y407827531 于 2013-11-28 15:07 编辑感谢版主推荐,本贴会持续更新…

如何打造高质量的机器学习数据集?这份超详指南不可错过
作者 | 周岩,夕小瑶,霍华德,留德华叫兽转载自知乎博主『运筹OR帷幄』导读:随着计算机行业的发展,人工智能和数据科学近几年成为了学术和工业界关注的热点。特别是这些年人工智能的发展日新月异,每天都有新的…
人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心、鼻尖、两个嘴角,以下是测试代码:int test_alignment() {std::vector<std::string> images{ "1.jpg", "2.jpg"…

微软宣布 Win10 设备数突破8亿,距离10亿还远吗?
开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> 微软高管 Yusuf Mehdi 昨天在推特发布了一条推文,宣布运行 Windows 10 的设备数已突破 8 亿,比半年前增加了 1 亿。 根据之前的报道,两个月前 W…

领导者必须学会做的十件事情
在这个世界上你可以逃避很多事情并且仍然能够获得成功,但是有些事情你根本就无法走捷径。商业领导者们并不存在于真空之中。成功总是与竞争有关。你可能拥有伟大的产品、服务、概念、战略、团队等等,如果它不能从某种程度上超越竞争对手,这对…