深度学习入门(九)——深度学习框架概览

2023-05-16

深度学习框架概览

  • Caffe
  • Theano
  • TensorFlow
  • Torch
  • Pytorch
  • MXNet
  • cuda-convnet2
  • Neon
  • Deeplearning4j
  • CNTK
  • PaddlePaddle
  • Keras


工欲善其事,必先利其器。深度学习诞生10年有余,已经有了不少成熟的开发框架,这篇文章就来了解一下当前主流的框架。

参考文章:详解 6 大主流深度学习框架
参考书籍:【深度学习与计算机视觉】 叶韵编著

Caffe

在这里插入图片描述

Caffe,全称为Convolutional Architecture for Fast Feature Embedding,由伯克利加州大学的博士生贾扬清开发,后来一直由伯克利视觉及学习中心(Berkeley Vision and Learning Center, BVLC)进行维护。Caffe基于C++和英伟达公司的GPU(Graphic Processing Unit)通用计算架构CUDA(Compute Unified Device Architecture)开发,特点是高效、可配置化的输入、GPU和CPU的无缝切换。当然还有非常重要的一点,Caffe拥有庞大的社区,无论是科研领域还是业界都有大量的用户。每当一些最前沿的深度学习方法发表后,没多久就会有官方的预训练模型或是第三方基于Caffe的实现,所以Caffe是一个对初学者和有经验的人都非常适合的工具。

2013年,贾扬清得到了一块NVIDIA免费提供的K20加速卡。在这个契机下贾扬清一边做毕业论文一边开始写一个用于深度学习的框架。经过了近半年的独立开发,Caffe初具形态并且在伯克利的研究组内获得了良好的试用反响。后来在物体检测领域成为经典的R-CNN(Regions with Convolutional Neural Network features)方法就是在这段时间内基于Caffe实现的。

2013年底,贾扬清将Caffe开源,成为了当时业内第一个较为完整的深度学习开源框架,于是立刻获得了学术界和业界的好评及支持。后来在BLVC和NVIDIA为主的合力推广下,Caffe很快成为了深度学习领域,尤其是基于深度学习的计算机视觉领域最流行的框架。

初学使用Caffe还需要注意下面两个问题。

Caffe的安装过程需要大量的依赖库,因此涉及很多安装版本问题,初学者须多加注意。

当用户要实现一个新的层,就需要用C++实现它的前向传播和反向传播代码,而如果想要新层运行在GPU上,则需要同时使用CUDA实现这一层的前向传播和反向传播。

Theano

在这里插入图片描述

这个由希腊神话中伊卡里亚岛国王妻子名字命名的框架,是由本吉奥领导的蒙特利尔大学机器学习研究小组(MILA)开发的。作为一个诞生比Caffe早的框架,在早期Theano是深度学习领域最流行的软件包。严格来说,Theano不是专门面向深度学习的,而是一个基于多维数组用于计算和优化数学表达式的数值软件包,因为神经网络的本质其实就是数学表达式,所以用Theano可以非常灵活地从无到有地实现神经网络的各种功能。Theano基于Python,最大的优点是灵活,性能非常出色,确实是基于函数式的编程方式,还有拗口的API,异常困难的调试等,造就了陡峭的学习曲线。另外,其异常慢的编译速度也常常遭人诟病。

直接在Theano中开发虽然灵活度最高,但开发工作量和难度也不小,所以在Theano基础上有很多封装过后的框架,比如MILA官方的Pylearn2,还有第三方开发的Lasagne和Keras等。Pylearn2由于把Theano的缺点又进一步发挥到了极致,在火了一小阵后就被渐渐冷落,如今已经停止了实际意义上的开发。后两个框架正在蓬勃发展中,尤其是Keras,渐渐开始成为一个脱离底层实现的大框架,目前除了Theano也支持了Google的Tensorflow。

TensorFlow

在这里插入图片描述

Google开源的深度学习框架,一开始主要面向的是分布式系统。从官方介绍上来看,具有非常好的延展性,在多GPU/多机上拥有最好的灵活性。另外Google的强有力支持也算是一大优点。初期版本在单机和一些小任务上性能差强人意,在一些基准测试上甚至常常被其他框架甩下一个量级。不过随着TensorFlow的持续改进,以及Google光环的照耀,现在TensorFlow正在变得越来越流行。截至2016年5月,在github上关于TensorFlow的相关讨论的数量已经超过Caffe跃居第一位。

TensorFlow在很大程度上可以看作Theano的后继者,这不仅因为它们有很大一批共同的开发者,还因为它们拥有相近的设计理念,都基于计算图实现自动微分系统。TensorFlow 使用数据流图进行数值计算,图中的节点代表数学运算,图中的边代表在这些节点之间传递的多维数组。

TensorFlow编程接口支持Python和C++,TensorFlow 1.0版本开始支持Java、Go、R和Haskell API的Alpha版本。此外,TensorFlow还可以在Google Cloud和AWS中运行。TensorFlow支持Windows 7、Windows 10和Windows Server 2016系统。

因为TensorFlow使用C++ Eigen库,所以可以在ARM架构上编译和优化。这也就意味着用户可以在各种服务器和移动设备上部署自己的训练模型,无须执行单独的模型解码器或者加载Python解释器。

作为当前最流行的深度学习框架,TensorFlow获得了极大的成功,但在学习过程中读者也需要注意下面一些问题。

  • 因为TensorFlow的接口在不断地快速迭代,并且版本之间不兼容,所以在开发和调试过程中可能会出现问题,例如开源代码无法在新版的TensorFlow上运行。

  • 想学习TensorFlow底层运行机制的读者需要做好心理准备,TensorFlow在GitHub代码仓库的总代码量超过100万行,系统设计比较复杂,这将是一个漫长的学习过程。

  • 在代码层面,对于同一个功能,TensorFlow提供了多种实现,这些实现良莠不齐,使用中还有细微的区别,请读者注意选择。另外,TensorFlow创造了图、会话、命名空间、PlaceHolder等诸多抽象概念,对普通用户来说较难理解。

Torch

由卷积神经网络之父杨乐昆领导开发的框架,是Facebook的深度学习开发工具,于2014年开源后,迅速传播开来。Torch的性能非常优秀,其他方面作为一个框架该有的功能都有。另外,作为集合了杨乐昆学术能力和Facebook业界经验的框架,Torch天然对多GPU的支持也胜过了被经常拿来一起比较的Caffe。Torch是基于Lua的,虽然Lua是一个简单又灵活的语言,但是毕竟是小众语言,这在一定程度上限制了Torch的流行程度。

Pytorch

在这里插入图片描述

PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架比如Tensorflow等都不支持的。

PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。

相对于TensorFlow,PyTorch的一大优点是它的图是动态的,而TensorFlow框架是静态图,不利于扩展。同时,PyTorch非常简洁,方便使用。

如果说TensorFlow的设计是“Make it complicated”,Keras的设计是“Make it complicated and hide it”,那么PyTorch的设计则真正做到了“Keep it simple,stupid”。

MXNet

在这里插入图片描述

由分布式机器学习社区(Distributed/Deep Machine Learning Community, DMLC)开发,是第一个由中国人主导开发的流行框架。MXNet的特点是轻量级、高性能,以及对从分布式到嵌入式等多种场景的优异支持。MXNet前身是DMLC的CXXNet和Minerva,这两个项目一个通过配置和定义来训练网络,而另一个则提供了类似numpy一样的多维数组的用法。MXNet无缝地衔接了这两种用法,获得了非常好的灵活性,这是另一个特点。MXNet支持语言非常多,尤其是对R的支持,赢得了一批统计领域的用户,并且扩展性也不错,可以说是一个非常有潜力的框架。此外,MXNet还有一个很大的特点是文档非常“烂”。2016年末,Amazon宣布MXNet为其官方深度学习平台,并会提供进一步支持,这个问题似乎有望被解决。

cuda-convnet2

由2012年让深度学习在视觉领域声名大噪的AlexNet作者,辛顿的学生艾利克斯·克里则夫斯基(Alex Krizhevsky)开发。作为一名学术工程双馨的天才,其开发的cuda-convnet2的性能曾经非常强悍,不过不知什么原因,最近也停止更新了。

Neon

由一家结合了深度学习人才和硬件人才的创业公司Nervana Systems于2015年开源发布。这是一个比较独特的框架,因为其公司软硬结合的血统,在硬件优化上的造诣让这个框架在发布时在不少基准测试上达到了世界最佳的成绩。2016年中,Nervana System被Intel收购。

Deeplearning4j

支持Java的机器学习库,由Skymind发布于2014年发布,商业标准的开源框架,在一些欧美咨询公司中受到欢迎。

CNTK

全称为Computational Network Toolkit,是微软出品的深度学习框架,于2016年初开源,所以目前使用者寥寥。该框架同时支持CPU和GPU,据说性能极其强悍,在微软官方博客上的测试中,超过了其他所有常见框架。

PaddlePaddle

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发、功能完备、开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。目前,飞桨已凝聚超过265万开发者,服务企业10万家,基于飞桨开源深度学习平台产生了34万个模型 。飞桨助力开发者快速实现AI想法,快速上线AI业务。帮助越来越多的行业完成AI赋能,实现产业智能化升级。

飞桨在业内率先实现了动静统一的框架设计,兼顾灵活性与高性能,并提供一体化设计的高层API和基础API,确保用户可以同时享受开发的便捷性和灵活性。

在大规模分布式训练技术上,飞桨率先支持了千亿稀疏特征、万亿参数、数百节点并行训练的能力,并推出业内首个通用异构参数服务器架构,达到国际领先水平。

飞桨拥有强大的多端部署能力,支持云端服务器、移动端以及边缘端等不同平台设备的高速推理;飞桨推理引擎支持广泛的AI芯片,已经适配和正在适配的芯片或IP达到29款,处于业界领先地位。

飞桨围绕企业实际研发流程量身定制打造了大规模的官方模型库,算法总数达到270多个,服务企业遍布能源、金融、工业、农业等多个领域。

Keras

在这里插入图片描述
Keras是一个高层神经网络API,使用Python编写,并将TensorFlow、Theano及CNTK作为后端。Keras为支持快速实验而生,能够快速实现开发者的想法。Keras目前是最容易上手的深度学习框架,它提供了一致且简洁的API,能够极大减少一般应用下用户的工作量。

相比于深度学习框架,Keras更像是一个深度学习接口,它构建于第三方框架之上。Keras的缺点很明显:过度封装导致丧失了灵活性。Keras最初作为Theano的高级API,后来增加了TensorFlow和CNTK作为后端。

为了屏蔽后端的差异性,Keras提供了一致的用户接口并做了层层封装,导致用户在新增操作或是获取底层的数据信息时过于困难。同时,过度封装也使得Keras的程序运行十分缓慢,许多Bug都隐藏于封装之中。在绝大多数场景下,Keras是本文介绍的所有框架中运行最慢的。

学习Keras十分容易,但是很快就会遇到瓶颈,因为它不够灵活。另外,在使用Keras的大多数时间里,用户主要是在调用接口,很难真正学习到深度学习的内容。

Keras的过度封装使其并不适合新手学习(无法理解深度学习的真正内涵),故不推荐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习入门(九)——深度学习框架概览 的相关文章

  • NEMA格式

    NMEA標準格式 大部份的GPS receiver都具被有美國國家海洋電子學會 National Marine Electronics Association xff0c NMEA 所制定的標準規格 xff0c 其制定了所有航海電子儀器間的
  • 在 JETSON 上配置 CAN 总线收发并基于Node.js编写应用DEMO

    概述 CAN 总线 是汽车电子行业常用的通信协议 Nvidia 推出的边缘 AI 推理设备 JETSON TX2 AGX Xavier 两款开发板支持 CAN 总线通信 这里以 AGX Xavier 开发者套件 为例 介绍如何配置实现基本的

随机推荐

  • C++开发UDP通信:使用socket创建UDP服务器端和客户端

    我的主页视频讲解 博客不经常在线 xff0c 私信请到西瓜视频搜索 智能之心 xff0c 以智能之心赴智能之梦 UDP通信步骤 引用UDP通信步骤 一 UDP套接字服务端架构步骤 1 xff0e 初始化套接字环境WSAStartup 2 x
  • D6 PRO充电器使用方法

    充电方式两种 xff1a 接220V供电 xff08 推荐 xff09 接XT60电池供电 接线 xff1a 大头XT60接口平衡头6S 4S 3S 2S接口 xff0c 123456 黑线从右侧减号一侧开始接 xff0c 红线在左侧数字一
  • uORB和MAVLink通讯例程

    uORB uORB 是一种异步 publish subscribe 的消息传递 API xff0c 用于进程或者线程间通信 IPC 添加新的Topic xff08 主题 xff09 在msg 目录下创建一个新的 msg文件 xff0c 并将
  • 往android studio原生java工程中添加jni的过程

    一 配置步骤 xff1a 第一步是在 src main 中建立一个文件夹cpp 第二步是在文件夹中建立两个文件一个是native lib cpp和CMakeLists txt 第三步在上述两文件中添加如下内容 xff1a span clas
  • C++迭代器

    一 什么是迭代器 xff1a C 43 43 中 xff0c 迭代器就是一个类似于指针的对象 xff0c 它能够用来遍历C 43 43 标准模板库容器中的部分或全部元素 xff0c 每个迭代器对象代表容器中的确定的地址 以下面的string
  • webpack vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin

    场景 webpack2 4 集成vue loader 64 15 2 4报错 vue loader was used without the corresponding plugin Make sure to include VueLoad
  • slamugv使用说明--5.电机编码测速

    电机编码器测速 编码器 xff08 encoder xff09 是将信号 xff08 如比特流 xff09 或数据进行编制 转换为可用以通讯 传输和存储的信号形式的设备 编码器把角位移或直线位移转换成电信号 编码器分类及原理 xff1a 按
  • STM32相关名词解释

    L N NO NC COM名词解释 L是line的意思 xff0c 相线 xff0c 俗称火线 xff1b N是neutral xff0c 中性线的意思 xff0c 在两相线中也称为零线 NO xff1a 也就是常开 xff0c 即在未通电
  • 三轴加速度计、三轴陀螺仪、三轴磁力计

    1 今天要做的事情 列出 xff1a 可能影响因素 xff0c 对影响因素做实验 如何设置对比实验 xff1f 如何设置对比实验 xff1f 三轴加速度计 1 加速度计的原理 三轴加速度 xff1a 输出的速度是去掉重力后的整体加速度 xf
  • zed相机使用

    zed立体相机 43 pyhon 43 opencv zed相机网上资料都是关于安装的教程 xff0c 后续的一些使用介绍的不是很多 xff0c 因为官方文档已经介绍的很详细 xff0c 这里介绍一下自己的学习过程 xff0c 以备查阅 x
  • 思岚A1激光雷达hector_mapping建图与定位

    ROS中最常见的定位包还是gmapping xff0c gmapping是需要里程计的数据也就是IMU或者视觉里程计的数据 xff0c 但是目前还是仅仅在电脑中测试 xff0c 并未实现树莓派与飞控通信 xff0c 因此使用不用里程计数据的
  • 科技概念/名词解释

    文章目录 自然科学算法类无人机互联网软件类硬件类计算机架构类人工智能 自然科学 量子 百度百科 量子 xff08 quantum xff09 是现代物理的重要概念 即一个物理量如果存在最小的不可分割的基本单位 xff0c 则这个物理量是量子
  • 自动驾驶基础知识(一)——英文缩写(持续更新...)

    这一篇就先整理一下接触到的英文缩写 xff0c 相当于给自己补补课 xff0c 以后遇到新的 xff0c 会持续更新上来 xff01 英文缩写中文全称英文全称ABS防抱死制动系统Anti lock Braking SystemACCS自适应
  • 自动驾驶基础知识(二)——术语中英文对照

    文章目录 深度学习自动驾驶深度增强学习计算机视觉其他 深度学习 中文名称英文名称人工智能系统Artificial Intelligence System认知负荷Cognitive Load深度学习Deep Learning3D卷积神经网络3
  • 使用Typora绘制流程图

    Typora可以直接在markdown中画流程图 xff0c 而且语法简洁易懂 xff0c 这是个让我异常惊喜的功能 Typora使用flowchart js来生成简单的SVG流程图 xff0c 此外它还支持mermaid engine 要
  • 自动驾驶算法-滤波器系列(八)——IMM交互多模型介绍

    IMM交互多模型介绍 1 简介 xff08 1 xff09 IMM Interacting Multiple Model xff08 2 xff09 马尔科夫概率转移矩阵 2 算法流程 xff08 1 xff09 输入交互 xff08 模型
  • Vue2.* computed property ' ' was assigned to but it has no setter.

    场景分析解决 场景 父组件传递了一个属性给子组件 xff0c 子组件需要在完成某个动作之后 xff0c 修改这个动作 当我将这个计算属性在computed处理后 再次修改的时候 xff0c 会有警告而且修改没有成功 computed pro
  • 深度学习入门(七)——深度学习和视觉的基础数学知识

    深度学习和视觉的基础数学知识 线性变换和非线性变换点积和投影矩阵乘法的几何意义本征向量和本征值奇异值分解线性可分性和维度非线性变换 概率论条件概率和独立期望值 方差和协方差熵最大似然估计KL散度 维度诅咒采样和维度高维空间中的体积和距离中心
  • 深度学习入门(八)——深度卷积神经网络

    深度卷积神经网络 卷积神经网络卷积层和特征响应图参数共享稀疏连接多通道卷积激活函数池化 不变性和感受野分布式表征分层表达卷积神经网络结构 LeNetAlexNet网络结构局部响应归一化 GoogLeNetNetwork In Network
  • 深度学习入门(九)——深度学习框架概览

    深度学习框架概览 CaffeTheanoTensorFlowTorchPytorchMXNetcuda convnet2NeonDeeplearning4jCNTKPaddlePaddleKeras 工欲善其事 xff0c 必先利其器 深度