博客专栏

EEPW首页 > 博客 > 原创 | 让你捷足先登的深度学习框架

原创 | 让你捷足先登的深度学习框架

发布人:数据派THU 时间:2023-01-19 来源:工程师 发布文章

对于据科学的初学者来说,利用开源的深度学习框架,可以大幅度简化复杂的大规模度学习模型的实现过程。在深度学习框架下构建模型,无需花费几天或几周的时间从头开始编写代码,便可以轻松实现诸如卷积神经网络这样复杂的模型。在本文中,将介绍几种非常有用的深度学习框架、它们的优点以及应用,通过对每个框架进行比较,研发人员了解如何有选择地使用它们,高效快捷完成项目任务。


1. 深度学习框架概述


深度学习框架是一种界面、库或工具,它使编程人员在无需深入了解底层算法的细节的情况下,能够更容易、更快速地构建深度学习模型。深度学习框架利用预先构建和优化好的组件集合定义模型,为模型的实现提供了一种清晰而简洁的方法。


利用恰当的框架可以快速构建模型,而无需编写数百行代码,一个良好的深度学习框架具备以下关键特征:


  • 优化的性能

  • 易于理解和编码

  • 良好的社区支持,

  • 并行化的进程,以减少计算

  • 自动计算梯度


这五点也是用来挑选五大顶级深度学习框架的首选标准。


2. PyTorch


PyTorch是Torch深度学习框架的一个接口,可用于建立深度神经网络和执行张量计算。Torch是一个基于Lua的框架,而PyTorch则运行在Python上。


PyTorch是一个Python包,它提供张量计算。张量是多维数组,就像numpy的ndarray一样,它也可以在GPU上运行。PyTorch使用动态计算图,PyTorch的Autograd软件包从张量生成计算图,并自动计算梯度。


与特定功能的预定义的图表不同,PyTorch提供了一个框架,用于在运行时构建计算图形,甚至在运行时也可以对这些图形进行更改。当不知道创建神经网络需要多少内存的情况下,这个功能便很有价值。


PyTorch灵活性大,可以使用PyTorch处理各种深度学习的任务,包括但不局限于:


  • 影像(检测、分类等)

  • 文本(自然语言学习)

  • 增强学习


3. JAX


谷歌最新推出的JAX,官方定义为CPU、GPU和TPU上的NumPy。它具有出色的自动微分(differentiation)功能,是可用于高性能机器学习研究的python库。Numpy在科学计算领域十分普及,但是在深度学习领域,由于它不支持自动微分和GPU加速,所以更多的是使用Tensorflow或Pytorch这样的深度学习框架。


JAX使用 XLA 在诸如GPU和TPU的加速器上编译和运行NumPy。它与 NumPy API 非常相似, numpy 完成的事情几乎都可以用 jax.numpy 完成。


XLA是TensorFlow底层做JIT编译优化的工具,XLA可以对计算图做算子Fusion,将多个GPU Kernel合并成少量的GPU Kernel,用以减少调用次数,可以大量节省GPU Memory IO时间。Jax本身并没有重新做执行引擎层面的东西,而是直接复用TensorFlow中的XLA Backend进行静态编译,以此实现加速。


JAX在偏微分方程求解问题上的表现尤为突出,研究人员试了试分别在PyTorch和JAX两种框架上运行几种预训练模型,发现JAX的速度大约是PyTorch的6倍。JAX在以分子动力学为代表的科学计算领域的巨大潜力。


4. TensorFlow


TensorFlow由谷歌大脑团队的研究人员和工程师研发,它是深度学习领域中最常用的框架。


TensorFlow之所以流行的原因有两点:首先,它是完全开源的,并且有出色的社区支持。TensorFlow为大多数复杂的深度学习模型预先编写好了代码,比如递归神经网络和卷积神经网络,其次,它支持多种语言来创建深度学习模型,比如Python语言、C语言和R语言等,并且有不错的文档和指南支持。


TensorFlow有许多组件,其中最为突出的是:


  • Tensorboard:帮助使用数据流图进行有效的数据可视化;

  • TensorFlow:用于快速部署新算法/试验。


TensorFlow的架构灵活,能够在一个或多个CPU(以及GPU)上部署深度学习模型,典行的TensorFlow应用场景如下:


  • 基于文本的应用:语言检测、文本摘要

  • 图像识别:图像字幕、人脸识别、目标检测

  • 声音识别

  • 时间序列分析

  • 视频分析


5. Keras


Keras用Python编写,可以在TensorFlow(以及CNTK和Theano)之上运行。TensorFlow的接口是一个低级库,新用户可能会很难理解某些实现。


而Keras是一个高层的API,它为快速实验而开发。因此,如果希望获得快速结果,Keras会自动处理核心任务并生成输出。Keras支持卷积神经网络和递归神经网络,可以在CPU和GPU上无缝运行。


深度学习的初学者经常会抱怨:无法正确理解复杂的模型。如果你是这样的用户,Keras便是正确选择!它的目标是最小化用户操作,并使其模型真正容易理解。


Keras有多种架构,用于解决各种各样的问题,其中最为典型的应用是图像分类!


6. Caffe


CAFE是另一个面向图像处理领域的、比较流行的深度学习框架,它是由贾阳青(Yangqing Jia)在加利福尼亚伯克利大学读博士期间开发的,它也是开源的!


虽然Caffe对递归网络和语言建模的支持不如前面所述的几个框架。但是Caffe最突出的优点是:只需单个NVIDIA K40 GPU,它便可以每天处理超过六千万张图像,其中 1毫秒/图像用于推理,4毫秒/图像用于学习。


它为C、Python、MATLAB等接口以及传统的命令行提供了支持。


通过Caffe Model Zoo框架可访问用于解决深度学习问题的预训练网络、模型和权重。这些模型可完成下述任务:


1) 简单的递归

2) 大规模视觉分类

3) 用于图像相似性的SiameSE网络

4) 语音和机器人应用


7. Deeplearning4j


对于Java程序员来说,Deeplearning4j理想的深度学习框架!


Deeplearning4j用Java实现,与Python相比效率更高。它使用称为ND4J的张量库,提供了处理n维数组(也称为张量)的能力。该框架还支持CPU和GPU。


Deeplearning4j将加载数据和训练算法的任务作为单独的过程处理,这种功能分离提供了很大的灵活性。这成为了它的突出优点。!


Deeplearning4j适用于图像、CSV 和纯文本等不同的数据类型。


可以使用Deeplearning4j构建的深度学习模型有:


1) 卷积神经网络(CNNs)

2) 递归神经网络(RNNs)

3) 长短时记忆(LSTM)等多种结构.


8. 深度学习框架之间的对比


上面已经讨论了六种较为流行的深度学习框架,每一种都独具特性,那么数据科学家会从中如何做出选择?


当接到一个新的项目时,如何决定采用哪个框架?为此,需要了解每个框架的优点和局限性。如果选对了正确的框架,会起到事半功倍的效果。某些框架在处理图像数据时工作得非常好,但无法解析文本数据;某些框架在处理图像和文本数据时,性能很好,但是它们的内部工作原理很难理解。


在本节中,使用以下标准比较上述深度学习框架:


1) 社区支持力度

2) 使用的语言

3) 接口

4) 对预训练的模型的支持


所有这些框架都是开源的,支持CUDA,并有预训练的模型。但是,应该如何正确开始,应该选择哪个框架来构建(初始)深度学习模型?让我们来做详细的讨论!


先来说说TensortFlow。TensorFlow能处理图像以及基于序列的数据,如果你是深度学习的初学者,或者对线性代数和微积分等数学概念没有坚实的基础,那么TensortFlow的学习曲线将会十分陡峭。对于刚起步的人来说,TensorFlow可能过于复杂。建议需要不断练习,不断探索社区,并继续阅读文章以掌握TensorFlow的诀窍。一旦对这个框架有了一个很好的理解,实现一个深度学习模型对你来说将是易如反掌。


Keras是一个非常坚实的框架,可以开启深度学习之旅。如果你熟悉Python,并且没有进行一些高级研究或开发某种特殊的神经网络,那么Keras适合你。如果有一个与图像分类或序列模型相关的项目,可以从Keras开始,很快便可以构建出一个工作模型。Keras也集成在TensorFlow中,因此也可以使用tf.keras.构建模型。


在图像数据上构建深度学习模型时,Caffe是不错的选择。但是,当用到递归神经网络和语言模型时,Caffe落后于其他框架。Caffe的主要优点是,即使没有强大的机器学习或微积分知识,也可以构建出深度学习模型。Caffe主要用于建立和部署移动电话和其他计算受限平台的深度学习模型。


正如前文所述,DeepleEarning4J是Java程序员的天堂,它为CNNS、RNN和LSTMS等不同的神经网络提供了大量的支持,在不牺牲速度的情况下它可以处理大量数据。



*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: AI

相关推荐

技术专区

关闭