深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer

2.6 深度学习主流开源框架

表2.1 深度学习主流框架参数对比
请添加图片描述

框架关键词总结

框架关键词基本数据结构(都是高维数组)
Caffe“在工业中应用较为广泛”,“编译安装麻烦一点”Blob
TensorFlow“安装简单pip”Tensor
Pytorch“定位:快速实验研究”,“简单”,“灵活”Tensor
Theano× “用于处理大规模神经网络的训练”,“不支持移动设备”,“不能应用于工业环境”,“编译复杂模型时间非常久”
Keras“高度模块化”,“适合在探索阶段能快速尝试各种网络结构”,“从CPU上计算切换到GPU加速无需任何代码的改动”,“适用于复杂模型
MXNet“轻量级”、“AWS官方推荐的深度学习框架”,“可在小内存上训练深度神经网络模型”,“可在移动设备上运行图像识别等任务”
Chainer“为复杂神经网络的实现提供了更大的灵活性”,“已在丰田汽车、松下和FANUC 等公司投入使用”

2.6.1 Caffe简介

Caffe是基于C++语言以及CUDA开发的框架,支持MATLAB、Python接口和命令行,可以直接在GPU和CPU中进行切换,训练效率有保障,在工业中应用较为广泛

优点

  • 在Caffe中,网络层通过C++定义,网络配置使用Protobu定义,可以较方便地进行深度网络的训练与测试
  • Caffe代码易懂、好理解、搞笑、使用、上手简单,比较成熟和完善,实现基础算法方法快捷,适合工业快速应用与部署
  • Caffe保留所有的有向无向环图,确保能正确的进行前向传播和反向传播,Caffe是一个典型的端到端的机器学习系统。
  • 每一个Caffe网络都开始于数据层,结束于损失函数层

结构

Caffe通过Blob以四维数组的方式存储和传递数据。

Caffe还提供了一套完整的层类型。一个层(Layer)是一个神经网络层的本质,它采用一个或多个Blob作为输入并产生一个或多个Blob作为输出。

缺点

  • 编译安装稍微麻烦一点(相对于TenorFlow等使用pip一键安装的方式)

    1. 以Ubuntu16.04为例,官网的安装脚本足够用了,有一些依赖库。

    2. 装完之后,去Git上复制代码(https://github.com/BVLC/caffe),修改Makefile.config就可以编译安装了。

      注意:对于GPU安装,还需要安装CUDA以及NVIDIA驱动

关键词:“在工业中应用较为广泛”,“编译安装麻烦一点”

2.6.2 TensorFlow简介

TensorFlow是Google Brain推出的开源机器学习库,与Caffe一样,主要用于深度学习的相关任务

结构

  • TensorFlow中的Tensor就是张量,代表N维数组,与Caffe中的blob是类似的。
  • Flow是流,代表基于数据流图的计算。

神经网络的运算过程就是数据从一层到下一层,TensorFlow更直接地强调了这个过程。

最大特点是计算图,即先定义好图,然后进行运算,因此所有的TensorFlow代码都包含两部分

  • 第一部分:创建计算图。表示计算的数据流,实际上就是定义好一些操作,可以将它看做Caffe中Prototxt的定义过程
  • 第二部分:运行会话。执行图中的运算,可以看做Caffe中的训练过程,只是TensorFlow的会话比Caffe灵活很多。因为是Python接口,所以取中间的结果分析和debug等方便很多。

优点

  • 与Caffe相比,TensorFlow的安装简单很多,一个pip命令就可以解决。
  • TensorFlow不止局限于神经网络,其数据流式图支持非常自由的算法表达,可以轻松实现深度学习以外的机器学习算法
  • 在TensorFlow中定义新的节点时只需要写一个Python函数,如果没有对应的底层运算核,则需要编写C++或者CUDA代码来实现运算操作。
  • TensorFlow还支持深度强化学习及其他计算密集的科学计算(如偏微分方程求解等)

缺点:

  • TensorFlow采用静态图,先定义好图,然后再Session中运算。图一旦定义好后是不能随意修改的。目前,TensorFlow虽然也引入了动态图机制Eager Execution,只是不如Pytorch直观
  • TensorFlow学习成本高,对新手来说,Tensor、Variable、Session等概念众多,数据读取接口频繁更新,tf.nn、tf.layers、tf.contrib各自重复。

关键词:“安装简单pip”

2.6.3 PyTorch简介

Torch是纽约大学的一个机器学习开源框架,几年前在学术界非常流行。但是由于其初始只支持Lua语言,导致其没有普及。随着Python的生态越来越完善,Facebook人工智能研究院推出了Pytorch并将其开源。

  • Pytorch不是简单地封装Torch并提供Python接口,而是对Tensor以上的所有代码进行了重构,同TensorFlow一样,增加了自动求导功能
  • Pytorch的定位是快速实验研究,因此可直接用Python写新层。之后Caffe2被全部并入PyTorch,如今已经成为非常流行的框架。

特点

  • 动态图计算

    Pytorch就像是脚本语言,可以随时随地地修改,随处调试,没有一个类似编译的过程,比TensorFlow灵活很多

  • 简单

    从Tensor到Variable再到nn.Module,是从数据张量到网络的抽象层次的递进

注:在Pytorch中,Tensor的使用与NumPy的数组非常相似,二者可以互转且共享内存

通过调用torch.cuda.is_available()函数,可以检查Pytorch中是否有可用的CUDA

关键词:“定位:快速实验研究”,“简单”,“灵活”

2.6.4 Theano简介

Theano由蒙特利尔大学Lisa Lab团队开发并维护,它是一个高性能的符号计算及深度学习库,用于处理大规模神经网络的训练

优点

  • Theano整合了Numpy,可以直接使用ndarray等功能,无需直接进行CUDA编码即可方便地进行神经网络结构设计。【因为其核心是数学表达式编辑器,计算稳定性好,所以可以精确地计算输出值很小的函数(如log(1+x))】
  • 支持Linux、MacOS、Windows

缺点

  • 没有底层C++的接口,模型的部署非常不方便,需要以来各种Python库,并且不支持各种移动设备,因此其几乎没有在工业生产环境中应用。
  • 在CPU上的执行性能比较差,但在单GPU上的执行效率不错,性能和其他框架类似
  • Theano运算时需要将用户的Python代码转换为CUDA代码,再编译为二进制可执行文件,编译复杂模型的时间非常久
  • Theano在导入时也比较慢,而且一旦设定了选择某块GPU,就无法切换到其他设备

关键词:× “用于处理大规模神经网络的训练”,“不支持移动设备”,“不能应用于工业环境”,“编译复杂模型时间非常久”

2.6.5 Keras简介

Keras是一个高度模块化的神经网络库,用Python实现,可以同时运行在TensorFlow和Theano上。

优点

  • Keras无需额外的文件来定义模型,仅通过编程的方式改变模型结构和调整超参数,旨在让用户进行最快速的原型实验,因此适合在探索阶段快速地尝试各种网络结构

  • Keras组件都是可插拔的模块,使用时只需要将一个个组件(如卷积层和激活函数等)连接起来即可,在Keras中通过几行代码就能实现MLP,AlexNet的实现也只需要十几行代码。

  • Keras专注于深度学习(Theano和TensorFlow的计算图支持更通用的计算)。同时支持卷积网络和循环网络,支持级联的模型或任意的图结构模型,从CPU上计算切换到GPU加速无需任何代码的改动

  • 节约尝试新网络结构的时间

    Keras底层使用的是Theano或TensorFlow,用Keras训练模型相比于前两者基本没有性能损耗(还可以享受前两者持续开发带来的性能提升),只是简化了编程的复杂度,节约了尝试新网络结构的时间。

    即模型越复杂,使用Keras的收益越大,尤其是在高度依赖全职共享、多模型组合和多任务学习等模型上,Keras表现得非常突出。

缺点

  • 但是设计新模块或者新的Layer时则不太方便

关键词:“高度模块化”,“适合在探索阶段能快速尝试各种网络结构”,“从CPU上计算切换到GPU加速无需任何代码的改动”,“适用于复杂模型”

2.6.6 MXNet简介

MXNet 是DMLC(Distributed Machine Learning Community)开发的一款开源的、轻量级、可移植、灵活的深度学习库,它让用户可以灵活地混合使用符号编程模式和指令式编程模式,以达到效率最大化,目前它已经是AWS官方推荐的深度学习框架。

优点

  • MXNet是在各个框架中率先支持多GPU 和分布式的框架,同时其分布式性能也非常高。MXNet的核心是一个动态的依赖调度器,支持自动将计算任务并行化到多个GPU 或分布式集群(支持AWS、Azure、Yarn 等)上。

  • 基于上层的计算图优化算法不仅加速了符号计算的过程,而且内存占用较小。开启镜像模式之后,甚至可以在小内存的GPU上训练深度神经网络模型,同样可以在移动设备(如Android和iOS)上运行基于深度学习的图像识别等任务

缺点

  • 训练时间长

MXNet支持多语言封装,基本涵盖所有主流的脚本语言,如MATLAB、JavaScript、Julia、C++、Python 和R 语言等。虽然MXNet构造并训练网络的时间长于高度封装类框架 Keras 和PyTorch,但是明显短于Theano框架。

关键词:“轻量级”、“AWS官方推荐的深度学习框架”,“可在小内存上训练深度神经网络模型”,“可在移动设备上运行图像识别等任务”

2.6.7Chainer 简介

Chainer 是一个由Preferred Networks公司推出并获得英特尔支援,专门为高效研究和开发深度学习算法而设计的开源框架。Chainer使用纯Python 和NumPy提供了一个命令式的API,为复杂神经网络的实现提供了更大的灵活性

优点

  • 在训练时“实时”构建计算图,非常适合此类复杂神经网络的构建。这种方法可以让用户在每次前向计算时根据条件更改计算图。同时也可以很容易地使用标准调试器和分析器来调试和重构基于Chainer 的代码。
  • 支持最新的优化方法、序列化方法以及使用CuPy的由CUDA驱动的更快速的计算方法,目前已在丰田汽车、松下和FANUC 等公司投入使用

关键词:“为复杂神经网络的实现提供了更大的灵活性”,“已在丰田汽车、松下和FANUC 等公司投入使用”

参考文献:

《深度学习之图像识别 核心算法与实战案例 (全彩版)》 言有三 著

出版社:清华大学出版社

出版时间:2023年7月第一版(第一次印刷)

ISBN:978-7-302-63527-7

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

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

相关文章

探索设计模式的魅力:揭秘模版方法模式-让你的代码既灵活又可维护

设计模式专栏:http://t.csdnimg.cn/U54zu 目录 一、开篇二、应用场景一坨坨代码实现存在的问题 三、解决方案模式方法结构示意图及说明用模板方法模式重构示例解决的问题 四、工作原理使用模板方法模式重写示例结构图核心结构:抽象类和具体实现 五、总结…

【Effective Objective - C】—— 内存管理

【Effective Objective - C】—— 内存管理 前言29.理解引用计数引用计数工作原理关闭ARC模式属性存取方法中的内存管理自动释放池保留环要点 30.以ARC简化引用计数使用ARC时必须遵守的方法命名规则变量的内存管理语义ARC如何清理实例变量要点 31.在dealloc方法中只释放引用并解…

基于深度置信网络的多模态过程故障评估方法及应用

源自:自动化学报 作者:张凯, 杨朋澄, 彭开香, 陈志文 “人工智能技术与咨询” 发布 摘 要 传统的多模态过程故障等级评估方法对模态之间的共性特征考虑较少, 导致当被评估模态故障信息不充分时, 评估的准确性较低. 针对此问题, 首先, 提出一种共性–…

Arrays工具类的常见方法总结

一、Arrays.asList( ) 1.作用&#xff1a;Arrays.asList( )方法的作用是将数组转换成List&#xff0c;将List中的全部集合对象添加至ArrayList集合中 2.参数&#xff1a;动态参数 (T... a) 3.返回值&#xff1a;List 集合 List<T> 4.举例&#xff1a; package com…

删除windows自带输入法

ctrl shift F 搜狗简繁体切换

【第二十四课】二分图:acwing-860染色法判定二分图 / acwing-861二分图的最大匹配 ( c++代码 )

目录 二分图是什么 acwing-860染色法判定二分图 染色法 代码 acwing-861二分图的最大匹配 思路 代码 二分图是什么 学习二分图的目的就是一些题目可以简化成二分图的模型来求解。 二分图也就是&#xff1a;一个无向图顶点集&#xff0c;分成了两堆顶点(可以理解为两…

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…

《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)

文章目录 7.1 使用 Go Modules 管理依赖 - 掌舵向未来7.1.1 基础知识讲解7.1.2 重点案例&#xff1a;Web 服务功能描述实现步骤扩展功能 7.1.3 拓展案例 1&#xff1a;使用数据库功能描述实现步骤扩展功能 7.1.4 拓展案例 2&#xff1a;集成 Redis 缓存功能描述实现步骤扩展功能…

Sora 和之前 Runway 那些在架构上有啥区别呢?

问&#xff1a;Sora 和之前 Runway 那些在架构上有啥区别呢&#xff1f; 答&#xff1a;简单来说 Runway 是基于扩散模型&#xff08;Diffusion Model&#xff09;的&#xff0c;而 Sora 是基于 Diffusion Transformer。 Runway、Stable Diffusion 是基于扩散模型&#xff08…

MySQL 插入10万条数据性能分析

MySQL 插入10万条数据性能分析 一、背景 笔者想复现一个索引失效的场景&#xff0c;故需要一定规模的数据作支撑&#xff0c;所以需要向数据库中插入大约一百万条数据。那问题就来了&#xff0c;我们应该怎样插入才能使插入的速度最快呢&#xff1f; 为了更加贴合实际&#…

cool Node后端 中实现中间件的书写

1.需求 在node后端中&#xff0c;想实现一个专门鉴权的文件配置&#xff0c;可以这样来解释 就是 有些接口需要token调用接口&#xff0c;有些接口不需要使用token 调用 这期来详细说明一下 什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理&#xf…

如何用AI绘画工具最好最省时省事的方法制作个性化头像框?

原文章链接&#xff1a;如何根据游戏素材制作主题头像框&#xff1f;实战教程来了&#xff01; - 优设网 - 学设计上优设 教程专区&#xff1a;AI绘画&#xff0c;AI视频&#xff0c;AI写作等软件类型AI教程&#xff0c; AI工具专区&#xff1a;AI工具-喜好儿aigc 在 APP 的…

「算法」二分查找1:理论细节

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;算法详解 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 二分查找算法简介 这个算法的特点就是&#xff1a;细节多&#xff0c;出错率高&#xff0c;很容易就写成死循环有模板&#xff0c;但…

如何在UI自动化测试中加入REST API的操作

1、问题 当我们描述一个“好的自动化测试用例”时&#xff0c;经常出现标准是&#xff1a; 精确 自动化测试用例应该测试一件事&#xff0c;只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。 独立 自动化测试用例不应该受测试套件中任何其他…

PyTorch-线性回归

已经进入大模微调的时代&#xff0c;但是学习pytorch&#xff0c;对后续学习rasa框架有一定帮助吧。 <!-- 给出一系列的点作为线性回归的数据&#xff0c;使用numpy来存储这些点。 --> x_train np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],[9.779], [6.1…

win32汇编获取系统信息

.data fmt db "页尺寸&#xff1a;%d",0 db "" lpsystem SYSTEM_INFO <?> szbuf db 200 dup(0) .const szCaption db 系统信息,0 .code start: invoke GetSystemInfo,addr lpsystem …

Java编程在工资信息管理中的最佳实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

用Java实现简单的图书管理系统

目录 1.总体框架 2.book包 Books类 booklist类 3.operation包 IO接口&#xff1a; addbooks类&#xff1a; borrowbooks类&#xff1a; delbooks类&#xff1a; returnbooks类&#xff1a; exit类&#xff1a; 4.user包 user类 Adminuser类&#xff08;难点&#…

嵌入式linux驱动开发篇之设备树

什么是设备树&#xff1f; 设备树&#xff08;Device Tree&#xff09;是一种用于描述嵌入式系统硬件组件及其连接关系的数据结构。它被广泛用于嵌入式 Linux 系统&#xff0c;尤其是针对使用多种不同架构和平台的嵌入式系统。它是一种与硬件描述相关的中间表示形式&#xff0c…

如何生成狗血短剧

如何生成狗血短剧 狗血短剧剧本将上述剧本转成对话 狗血短剧剧本 标题&#xff1a;《爱的轮回》 类型&#xff1a;现代都市爱情短剧 角色&#xff1a; 1. 林晓雪 - 女&#xff0c;25岁&#xff0c;职场小白&#xff0c;善良单纯 2. 陆子轩 - 男&#xff0c;28岁&#xff0c;公…