深度学习主流开源框架: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一键安装的方式)
-
以Ubuntu16.04为例,官网的安装脚本足够用了,有一些依赖库。
-
装完之后,去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
相关文章:

深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer
2.6 深度学习主流开源框架 表2.1 深度学习主流框架参数对比 框架关键词总结 框架关键词基本数据结构(都是高维数组)Caffe“在工业中应用较为广泛”,“编译安装麻烦一点”BlobTensorFlow“安装简单pip”TensorPytorch“定位:快…...
[Linux] vim及gdb的使用
Linux工具使用 Vim编辑器使用Vim的基本概念vim的基本操作vim正常模式命令集vim底行模式命令集 gdb调试器使用背景使用 Vim编辑器使用 Vim的基本概念 vim我们所需要掌握的有三种模式,分别是命令模式、插入模式、底行模式。 正常/普通/命令模式 控制屏幕光标移动&a…...

Android WebView访问网页+自动播放视频+自动全屏+切换横屏
一、引言 近期,我发现电视家、火星直播等在线看电视直播的软件都已倒闭,而我奶奶也再无法通过这些平台看电视了。她已六十多岁,快七十岁啦。这些平台的倒下对我来说其实没有多大的影响,但是对于文化不多的她而言,生活中…...

php PhpSpreadsheet 读取日期变数字问题解决
问题描述: 使用PhpSpreadsheet 读取表格数据,日期格式读取后变成数字,如下图: 解决方案: $cell $sheet->getCell(H . $row)->getValue(); $toTimestamp \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimes…...

前端架构: 脚手架包管理工具之lerna的全流程开发教程
Lerna 1 )文档 Lerna 文档 https://www.npmjs.com/package/lernahttps://lerna.js.org [请直达这个链接] 使用 Lerna 帮助我们做包管理,并不复杂,中间常用的命令并不是很多这里是命令直达:https://lerna.js.org/docs/api-referen…...
[安洵杯 2019]easy_serialize_php1
打开题目 题目源码: <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&q…...

【前端素材】推荐优质在线通用果蔬商城电商网页eStore平台模板(附源码)
一、需求分析 1、系统定义 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。它将不同种类的新鲜水果、蔬菜、干果、坚果等聚集在一起,为消费者提供方便、快捷的购物渠道。 2、功能需求 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。…...
开源软件的商业模式探析:开放与盈利的平衡
写在开头 开源软件的概念和应用已经成为了现代科技领域中的一个重要组成部分。然而,虽然开源软件的价值和影响力得到了广泛认可,但如何在开放的环境中找到商业盈利的平衡却是一个颇具挑战性的问题。本文将深入探讨开源软件的商业模式,从基本…...

使用全局事件总线实现任意组件间的通讯
本文以vue2中爷孙组件通讯为例,需求是点击孙组件的按钮,实现关闭爷组件的弹窗。 全局事件总线是通过Vue实例的事件系统来实现组件之间的通讯,可以方便地在任何组件中进行事件的触发和监听。 以下是使用全局事件总线实现爷孙组件通讯的步骤&a…...

文件基础和文件fd
文章目录 预备知识C语言的文件接口系统调用文件fd 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 预备知识 我们平时说文件就是说文件里…...

3dgs学习(二)—— 3d高斯与协方差矩阵及其几何意义
协方差矩阵与3d高斯 3d高斯与椭球与协方差矩阵 3d高斯,及3维空间内的正态分布。 通过一元正态分布的坐标系图像不难想象,3维空间中的正态分布点集中在一片椭球空间中,各方向长轴取决于各方向正态分布的方差。 而协方差矩阵通过计算多元之…...
ZStack Cube超融合入选IDC《中国超融合基础架构市场评估》报告
近日,IDC发布了《中国超融合基础架构市场评估,2023》。IDC针对中国超融合基础架构市场的发展现状展开了调研,明确了最终用户构建融合型云平台的痛点和难点,阐述了市场中各技术服务提供商的服务方案和优势,并对未来中国…...

每日一题——LeetCode1556.千位分隔符
方法一 个人方法: 把n转为字符串,逆序遍历n,把n的每个元素加入res,每三次加入.,最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…...

8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现
内容参考于:易道云信息技术研究院VIP课 上一个内容:通过逆向分析确定游戏明文接收数据过程 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:bcf7559184863febdcad819e48aa…...

Redis冲冲冲——事务支持,AOF和RDB持久化
目录 引出Redis事务支持,AOF和RDB持久化1、Redis的事务支持2、Redis的持久化 Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Redis冲冲冲——事务支持,AOF和RDB持久化 Redis事务支持,AOF和…...
路由菜单路径匹配方法
优化路由菜单路径匹配算法:实现获取整条线路的路径 引言 在前端开发中,路由菜单的路径匹配是一个常见的需求。我们经常需要根据给定的路径,找到对应的菜单项,并获取整条线路的路径。本文将介绍一个优化的路由菜单路径匹配算法&…...

设计模式浅析(九) ·模板方法模式
设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 模板方法模式 概念 模板方法模式(Template Method Pattern)在Java中是…...

无用工作、UBI与AI
有些隐晦和黑暗的事实无法陈述,因为任何的系统中“无用”的结局都是被无情的抛弃和淘汰,AI监督下的人类结局更是如此。 什么是无用工作? 无用无效工作通常指的是那些看似忙碌但实际上对社会或个人没有实质性贡献的工作。这类工作可能包括以下…...

【监控】grafana图表使用快速上手
目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中,我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…...
Django常用命令
一、新建一个新项目 django-admin startproject project_name二、新建一个app 在Django中的一个app代表一个功能模块。开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。 python manage.py startapp appa_name三、数据迁移(更新数据库) 编写好了Model后&#x…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...