干货 | 5个常用的深度学习框架
干货 | 5个常用的深度学习框架
深度学习框架是实现神经网络模型的重要工具,它们能够帮助开发者快速构建和训练复杂的深度学习模型。本文将详细介绍5个常用的深度学习框架:TensorFlow、Keras、PyTorch、Caffe和DeepLearning4j,并通过对比分析帮助读者选择合适的框架。
一、什么是深度学习框架
让我们用一个例子来理解这个概念。考虑下面的图像集合:
此图像中有各种类别,猫、骆驼、鹿、大象等。我们的任务是将这些图像分类到相应的类(或类别)中。Google搜索告诉我们,卷积神经网络(CNN)对于此类图像分类任务非常有效。所以我们需要去实现这个模型,但是如果你开始从头开始编写CNN,那么获得工作模型将是几天后(甚至是几周),而这就是深度学习框架真正改变了这尴尬的局面。
无须写上百行代码,我们仅仅需要使用一个适合的框架去帮助我们快速建立这样的模型。以下是良好深度学习框架的一些主要特征:
- 针对性能进行了优化
- 易于理解和编码
- 良好的社区支持
- 并行化进程以减少计算
- 自动计算渐变
二、TensorFlow
TensorFlow由GoogleBrain团队的研究人员和工程师开发。它是深度学习领域中最常用的软件库(尽管其他人正在迅速赶上)。
TensorFlow如此受欢迎的最大原因是,它支持多种语言来创建深度学习模型。比如Python,C++和R语言,它有适当的文档的演练指导。制作TensorFlow有很多组件,其中比较突出的两个是:
- TensorBoard:使用数据流图帮助实现有效的数据可视化
- TensorFlow:用于快速部署新算法/实验
TensorFlow的灵活架构使我们能够在一个或者多个CPU(以及GPU)上部署我们的深度学习模型。以下是TensorFlow的几个常见用例:
- 基于文本的应用程序:语言检测、文本摘要
- 图像识别:图像字幕、人脸识别、物体检测
- 声音识别
- 时间序列分析
- 视频分析
安装TensorFlow也是一项非常简单的任务:
仅适用于CPU:
pip install tensorflow
对于支持CUDA的GPU卡:
pip install tensorflow-gpu
从以下综合教程中学习如何使用TensorFlow构建神经网络模型:
三、Keras
对于Python爱好者来说,Keras是你开始深度学习之旅的完美框架。Keras是用Python编写的,可以运行在TensorFlow(以及CNTK和Theano)之上。TensorFlow接口可能有点挑战性,因为它是一个低级库,新用户可能会很难理解某些实现。另一方面,Keras是一个高级API,开发的重点是实现快速实验。因此,如果想要快速结果,Keras将自动处理核心任务并生成输出。Keras支持卷积神经网络和递归神经网络。它可以在CPU和GPU上无缝运行。同时,Keras有助于深度学习初学者正确理解复杂的模型,它旨在最大限度地减少用户操作,并使模型非常容易理解。
我们可以将Keras的模型大致分为两类:
- 顺序:模型的各层以顺序方式定义,这意味着当我们训练深度学习模型时,这些层是按顺序实现的。以下是顺序模型的示例:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
- Keras功能API:通常用于定义复杂模型,例如多输出模型或具有共享层的模型,查看以下代码以实际方式理解:
from keras.layers import Input, Dense
from keras.models import Model
# 这是我们网络的输入
input_img = Input(shape=(784,))
# 编码层
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded)
# 解码层
decoded = Dense(64, activation='relu')(encoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded)
# 模型
autoencoder = Model(input_img, decoded)
Keras有多种架构,如下所述,用于解决各种各样的问题
- VGG16
- VGG19
- InceptionV3
- Mobilenet和其他更多
你可以参考官方Keras文档,以详细了解框架的工作原理:https://keras.io/
仅仅使用一行代码就能够安装Keras:
pip install keras
想要更进一步是如何使用Keras实现神经网络的可以查看:
四、PyTorch
PyTorch是我所研究的所有框架中最灵活的,它是Torch深度学习框架的一个端口,可用于构建深度神经网络和执行Tensor计算。Torch是一个基于Lua的框架,而PyTorch是在Python上运行的,使用动态计算图,它的Autogard软件包从tensors中构建计算图并自动计算梯度。Tensors是多维数组,就像numpy的ndarrays一样,也可以在GPU上运行。
PyTorch不是使用具有特定功能的预定义图形,而是为我们提供了一个构建计算图形的框架,甚至可以在运行时更改它们。这对于我们不知道在创建神经网络时应该需要多少内存的情况很有用。
你可以使用PyTorch处理各种深度学习挑战,包括:
- 图像(检测、分类等)
- 文本(NLP)
- 强化学习
关于PyTorch的安装步骤和利用PyTorch构建你的第一个神经网络,可以参考以下文档:
- Learn How to Build Quick & Accurate Neural Networks using PyTorch - 4 Awesome Case Studies
- PyTorch tutorials
五、Caffe
Caffe是面向图像处理领域的另一种流行的深度学习框架。作者是贾扬清,加州大学伯克利的博士,现就职于阿里巴巴,担任技术副总裁岗位,领导大数据计算平台的研发工作。需要注意的是,Caffe对循环网络和语言建模的支持不如上述三个框架。但是,Caffe脱颖而出的是处理和学习图像的速度。这很容易成为主要的USP。(USP指的是Unique Selling Proposition,又称创意理论,其特点是必须向受众陈述产品的特点,同时这个特点必须是独特的、必须能够引起销售)
Caffe为C、C++、Python、Matlab等接口以及传统的命令行提供了坚实的支持。Caffe Model Zoo(大量的在大数据集上预训练的可供下载的模型)框架允许我们访问可用于解决深度学习问题的预训练网络、模型和权重。这些模型适用于以下任务:
- 简单回归
- 大规模的视觉分类
- 用于图像相似性的暹罗网络(Siamese Networks)
- 语音和机器人应用
你可以查看Caffe的安装和文档以获取更多详细信息。
六、DeepLearning4j
对于Java程序员,这是理想的深度学习框架。DeepLearning4j在java中实现,因此与Python相比更高效,它使用称为ND4J的张量库,提供了处理n维数组的能力。这个框架还支持GPU和CPU。
DeepLearning4j将加载数据和训练算法的任务视为单独的过程,这种功能分离提供了很大的灵活性。它同时也适用于不同的数据类型:
- 图片
- CSV
- 纯文本等
你可以使用DeepLearning4j构建的深度学习模型是:
- 卷积神经网络(CNN)
- 递归神经网络(RNN)
- 长短记忆(LSTM)和许多其他架构
你可以查看DeepLearning4j的安装和文档以获取更多详细信息。
七、五个深度学习框架的对比
我们已经介绍了五个最流行的深度学习框架。每个都有它自己独特的功能集,有些框架可以很好地处理图像数据,但无法解析文本数据。其他框架在图像和文本数据方面表现良好,但其内部工作可能难以理解。下面我们将使用以下标准比较我们的五个深度学习框架:
- 社区支持
- 它们用到的语言
- 接口
- 支持预训练模型
特征 | TensorFlow | Keras | PyTorch | Caffe | DeepLearning4j |
---|---|---|---|---|---|
开发语言 | Python, C++, R | Python | Python | C++ | Java |
接口 | 低级 | 高级 | 高级 | 低级 | 高级 |
社区支持 | 非常强大 | 强大 | 非常强大 | 强大 | 一般 |
预训练模型 | 丰富 | 丰富 | 丰富 | 丰富 | 一般 |
适用场景 | 图像、文本、声音 | 图像、文本 | 图像、文本、强化学习 | 图像 | 图像、CSV、纯文本 |
优点 | 生态系统完善 | 上手容易 | 灵活、动态 | 图像处理速度快 | Java生态友好 |
缺点 | 学习曲线陡峭 | 依赖TensorFlow | 资源消耗大 | 文本处理能力弱 | 社区支持相对较少 |
所有这些框架都是开源的,支持CUDA并且有预训练模型来帮助您入门。但是,什么应该是正确的起点,你应该选择哪个框架来构建你的(初始)深度学习模型?
TensorFlow
TensorFlow适用于图像和基于序列的数据。如果您是深度学习的初学者,或者对线性代数和微积分等数学概念缺乏扎实的理解,那么TensorFlow的陡峭学习曲线可能会让人望而生畏。对于刚刚起步的人来说,这方面可能很复杂。我的建议是继续练习,继续探索社区。一旦您对框架有了很好的理解,实现深度学习模型对您来说将非常容易。Keras
Keras是一个非常可靠的框架,可以开始您的深度学习之旅。如果您熟悉Python并且没有进行一些高级研究或开发一些特殊类型的神经网络,那么Keras就适合您。它更多的是让你取得成果,而不是陷入模型错综复杂的困境。因此,如果您获得与图像分类或序列模型相关的项目,请从Keras开始,因为你可以非常快速地获得工作模型。
Keras也集成在TensorFlow中,因此您也可以使用tf.keras构建模型。
PyTorch
与TensorFlow相比,PyTorch更直观。一个包含这两个框架的快速项目将使这一点非常清晰。即使你没有扎实的数学或纯机器学习背景,你也可以理解PyTorch模型。随着模型的进行,您可以定义或操作图形,这使得PyTorch更加直观。PyTorch没有像TensorBoard这样的可视化工具,但你可以随时使用像matplotlib这样的库。Caffe
当我们在图像数据上构建深度学习模型时,Caffe非常有效。但是当涉及到递归神经网络和语言模型时,Caffe落后于我们讨论过的其他框架。Caffe的主要优势在于,即使您没有强大的机器学习或微积分知识,您也可以构建深度学习模型。Caffe主要用于构建和部署用于移动电话和其他计算受限平台的深度学习模型。DeepLearning4j
就像我之前提到的,Deeplearning4j是Java程序员的天堂。它为不同的神经网络提供了大量支持,如CNN,RNN和LSTM。它可以在不牺牲速度的情况下处理大量数据。
八、结束
请记住,这些框架本质上只是帮助我们实现最终目标的工具。明智地选择它们可以减少大量的精力和时间。下图是详细介绍我们所涵盖的每个深度学习框架的信息图。你可以选择下载,打印并在下次构建深度学习模型时使用它!