深度学习框架的比较:TensorFlow,PyTorch,Keras,MXNet,Microsoft Cognitive Toolkit,Caffe等

大家好 这个星期五,我们将与您分享有关“数据科学家”课程启动的第一本出版物。 好好阅读。

许多组织已经着手尝试在决策中使用人工智能来扩大活动范围或发展自己的初创企业,但要理解的一件事是:选定的开发技术必须与良好的深度学习框架相结合,尤其是因为每个框架都可以某种单独的目标。 在这种情况下,寻求完美的串联是业务平稳快速发展和项目成功部署的前提。



以下用于深度学习的框架列表在选择正确的工具以解决您在项目工作过程中面临的特定问题的过程中可能会有所帮助。 您可以比较各种解决方案的优缺点,评估其局限性,并了解每种解决方案的最佳用例!

1. Tensorflow

TensorFlow由Google创建并用Python和C ++编写,是用于数值计算的最佳开源库之一。 它根本就必须好,因为即使是DeepMind,Uber,AirBnB或Dropbox之类的巨头也已根据需要选择了此框架。

TensorFlow适用于复杂的项目,例如多层神经网络。 例如,它用于语音识别或图片和文本应用程序,例如Google Translate。

当然,专家称其为许多优点:

  • 已经为她编写了大量手册和文档。
  • 它提供了强大的工具来监视模型和可视化的学习过程(Tensorboard);
  • 它得到了众多开发人员和科技公司的支持。
  • 提供服务模型;
  • 它支持分布式学习;
  • TensorFlow Lite为移动设备的低延迟设备提供输出;

缺点:

例如,与CNTK和MXNet相比,它在基准测试中速度下降。
与PyTorch或Keras相比,初学者的入门门槛更高。 赤裸的Tensorflow是相当底层的,需要大量样板代码,并且Tensorflow的“检测并运行”模式极大地使调试过程复杂化。

还有一个重要的限制:唯一受完全支持的语言是Python。

2. PyTorch

PyTorch是Python的Lua Torch库的后继者,也是TensorFlow的强大竞争对手。 它由Facebook开发,并由Twitter,Salesforce,牛津大学和许多其他公司使用。

PyTorch主要用于快速有效地训练模型,因此这是大量开发人员的选择

它具有许多重要的优点:

  • 由于框架的架构,创建模型的过程非常简单和透明。
  • 默认的“运行定义”模式是对传统编程的引用。 该框架支持流行的调试工具,例如pdb,ipdb或PyCharm调试器。
  • 它支持声明式数据并发
  • 它具有许多易于训练的模型和预制的模块化零件,易于组合;

从0.4版开始提供分布式培训。

但是这个框架有一些不可否认的缺点:

  • 缺乏模型支持;
  • 他还没有准备好全面发布产品,但是1.0版的路线图确实令人印象深刻。
  • 没有像TensorBoard这样的用于监视和可视化的界面-但是,它确实具有与Tensorboard的外部连接。


3. 凯拉斯

Keras是一个基于Python的最小库,可以在TensoFlow,Theano或CNTK之上运行。 它是由Google工程师FrançoisSchollet开发的,目的是加快实验速度。 Keras支持广泛的神经网络层,例如循环或密集的卷积层。

在翻译,图像识别,语音等情况下,此框架非常有用。

优点:

  • 原型制作真的很容易。
  • 它足够小,可以为多个层次构建深度学习模型;
  • 具有完全可配置的模块;
  • 它具有简单直观的界面,分别适合初学者;
  • 内置支持在多个GPU上进行训练;
  • 可以将其配置为TensorFlow的评估程序,并在Google Cloud平台上的GPU集群上进行培训;
  • 在Spark上运行;
  • 支持NVIDIA GPU,Google TPU和Open-CL GPU,例如AMD。

还有一些缺点:

  • 它可能太高级了,并且并不总是易于定制。
  • 它仅限于Tensorflow,CNTK和Theano后端。

Keras的功能不如TensorFlow,并且提供较少的选项来管理网络连接,如果您打算创建一些专门的深度学习模型,这可能是一个严重的限制。

4. MXNet


这是由Apache创建的深度学习框架,支持多种语言,例如Python,Julia,C ++,R或JavaScript。 Microsoft,Intel和Amazon Web Services使用它。

MXNet框架以其高可伸缩性而闻名,这就是为什么大型企业主要将其用于语音识别和手写,NLP和预测。
它具有许多优点:

  • 它在处理深度学习算法方面足够快,灵活且有效。
  • 它提供高级GPU支持;
  • 它可以在任何设备上运行;
  • 它具有高性能的命令性API;
  • 它提供了简单的模型支持;
  • 它具有极强的可扩展性。
  • 它为许多编程语言(例如Python,R,Scala,JavaScript和C ++等)提供了良好的支持。

现在针对MXNet的缺点:

  • 在他周围,不再像TensorFlow这样的社区。
  • 在科学界并不那么受欢迎。

基于上述论点,MXNet是大型工业项目的良好框架,但它仍处于初期阶段,因此请记住,您可能无法获得想要尽快解决问题的技术支持。

5. CNTK

该框架现在称为Microsoft Cognitive Toolkit。 它是一个开放的深度学习框架,旨在与支持Python,C ++,C#和Java的超大型数据集一起使用。

CNTK为语音,手写和图片识别提供有效的模型训练,还支持CNN和RNN。 它用于Skype,Xbox和Cortana。

与往常一样,专家们已经意识到它的好处:

  • 表现出良好的性能和可伸缩性;
  • 提供许多经过优化的组件;
  • 提供对Apache Spark的支持;
  • 有效利用资源;
  • 与Azure云轻松集成;

还有一个缺点:

  • 有限的社区支持。

6. Caffe和Caffe2

Caffe是具有非常有用的Python接口的C ++框架。 它支持CNN和直接分销网络,也非常适合训练模型(无需编写额外的代码行),处理图像和改进现有的神经网络。 另一方面,它的文档记录不充分,很难编译。 没有任何大公司使用Caffe的信息。 2017年,Facebook发布了Caffe 2,该产品成为了Caffe的真正继任者,并且被创建用于生产环境中的移动和大规模开发。

他在Facebook上被称为“一个可投入生产的平台(...),可在超过10亿部智能手机上运行,​​涵盖8代iPhone和6代Android处理器架构。”

该框架之所以好,有几个原因:

  • 它提供了用于创建演示应用程序的预训练模型;
  • 它快速,可扩展且占用空间很小;
  • 它可以与其他框架(例如PyTorch)一起很好地工作,并将最终集成到PyTorch 1.0中。
  • 它提供服务器的优化工作。

再次,主要缺点:

  • 有限的社区支持。

尽管Caffe2在速度和占用的内存方面都通过了良好的测试,但是它相对较新,并且在部署复杂的网络方面非常有限,而复杂的网络至少需要便捷的调试工具和技术支持。

7. Deeplearning4j

如果您的主要编程语言是Java,那么您绝对应该仔细看看DL4J。 这是一个主要为Java和Scala编写的商业开源平台,为各种类型的神经网络(例如CNN,RNN,RNTN或LTSM)提供了良好的支持。

该框架将是一个不错的选择,因为它在图像识别,自然语言处理,漏洞搜索和文本分析等领域具有巨大的潜力。

优点:

  • 可靠,灵活,高效;
  • 它可以处理大量数据而不会降低速度;
  • 在分布式CPU或GPU上与Apache Hadoop和Spark配合使用;
  • 有良好的文件记录;
  • 具有社区和企业版本。

令人惊讶的是,谈论此框架时,专家们并未关注任何特定的缺陷,就像一般关于Java是否适合机器学习的辩论一样。 由于Java在机器学习项目中并不经常使用,因此该框架不能依靠不断增长的现成代码数据库来解决特定问题。 结果,您的项目成本可能会高得多,而解决一个问题可能会大大减慢项目的总体进度。

8.链条机

英特尔,IBM,NVIDIA和AWS等巨头支持的另一个Python深度学习框架。 它可以轻松使用多个GPU。

Chainer主要用于语音识别,机器翻译和密钥分析。 它支持各种网络体系结构,例如CNN,快进,RNN,并且比其竞争对手有几个重要的优势:

  • 它比任何其他Python框架都快得多;
  • 它非常灵活和直观;
  • 现有网络可以在运行时直接修改;

另一方面:

  • 在调试方面非常困难;
  • 在他周围是一个相对较小的社区;

由于其他基于Python的框架更为流行,因此您可能无法获得与TensorFlow或PyTorch等其他框架一样快的帮助。

总结一下

为深度学习项目选择最佳框架可能非常困难。 您需要考虑以下因素:

  • 您将开发的神经网络的类型;
  • 您使用的编程语言;
  • 您可能需要的工具和其他选项的数量;
  • 项目预算;
  • 项目追求的性质和目标。

我希望框架的这种比较可以阐明这个问题,并帮助您为项目选择最合适的解决方案。

写评论并在3月19日亚历山大尼基汀举行的开放 日见

Source: https://habr.com/ru/post/zh-CN443874/


All Articles