4000336031 微信 li1377174255

遵义IT培训学校

Java 工程师如何开发 AI 项目

来源:遵义IT培训学校 发布时间:2019/1/17 11:15:31

  Java 工程师如何开发 AI 项目,随着深度学习在语音、图像、自然语言等领域取得了广泛的成功,越来越多的企业、高校和科研单位开始投入大量的资源研发AI项目。同时,为了方便广大研发人员开发深度学习应用,专注于算法应用本身,避免重复造轮子的问题,各大科技公司先后开源了各自的深度学习框架,例如:TensorFlow(Google)、Torch/PyTorch(Facebook)、Caffe(BVLC)、CNTK(Microsoft)、PaddlePaddle(百度)等。

  以上框架基本都是基于Python或者C/C++开发的。而且很多基于Python的科学计算库,如NumPy、Pandas等都可以直接参与数据的建模,非常快捷。

  然而,对于很多IT企业及网站,大量的应用都依赖于Java生态圈中的开源项目,如Spring/Structs/Hibernate、Lucene、Elasticsearch、Neo4j等。主流的分布式计算框架,如Hadoop、Spark都运行在JVM之上,很多海量数据的存储也基于Hive、HDFS、HBase这些存储介质,这是一个不容忽视的事实。

  有鉴于此,如果有可以跑在JVM上的深度学习框架,那么不光可以方便更多的Java/JVM工程师参与到人工智能的浪潮中,更重要的是可以与企业已有的Java技术无缝衔接。无论是Java EE系统,还是分布式计算框架,都可以与深度学习技术高度集成。Deeplearning4j正是具备这些特点的深度学习框架。

  01

  Deeplearning4j是什么

  Deeplearning4j是由美国AI创业公司Skymind开源并维护的一个基于Java/JVM的深度学习框架。同时也是在Apache Spark平台上为数不多的,可以原生态支持分布式模型训练的框架之一。此外,Deeplearning4j还支持多GPU/GPU集群,可以与高性能异构计算框架无缝衔接,从而进一步提升运算性能。在2017年下半年,Deeplearning4j正式被Eclipse社区接收,同Java EE一道成为Eclipse社区的一员。

  另外,就在今年的4月7号,Deeplearning4j发布了新版本1.0.0-alpha,该版本的正式发布不仅提供了一系列新功能和模型结构,也意味着整个Deeplearning4j项目的趋于稳定和完善。

  Deeplearning4j提供了对经典神经网络结构的支持,例如:

  多层感知机/全连接网络(MLP)

  受限玻尔兹曼机(RBM)

  卷积神经网络(CNN)及相关操作,如池化(Pooling)、解卷积(Deconvolution)、空洞卷积(Dilated/Atrous Convolution)等

  循环神经网络(RNN)及其变种,如长短时记忆网络(LSTM)、双向LSTM(Bi-LSTM)等

  词/句的分布式表达,如word2vec/GloVe/doc2vec等

  在新的1.0.0-alpha版本中,Deeplearning4j在开始支持自动微分机制的同时,也提供了对TensorFlow模型的导入,因此在新版本的Deeplearning4j中可以支持的网络结构将不再局限于自身框架。

  DeepLerning4j基于数据并行化理论,对分布式建模提供了支持(准确来说是基于参数同步机制的数据并行化,并在0.9.0版本后新增了Gradients Sharing的机制)。此外,Apache基金会下另一个分布式计算的项目Flink正在积极考虑将Deeplearning4j进行集成。

  Deeplearning4j生态圈中除了深度神经网络这个核心框架以外,还包括像DataVec、ND4J、RL4J等一些非常实用的子项目。

  02

  为什么要学习Deeplearning4j

  目前开源的深度学习框架有很多,那么选择一个适合工程师自己、同时也可以达到团队业务要求的框架就非常重要了。在这个部分中,我们将从计算速度、接口设计与学习成本,和其他开源库的兼容性等几个方面,给出Deeplearning4j这个开源框架的特点及使用场景。

  ND4J加速张量运算

  JVM的执行速度一直为人所诟病。虽然Hotspot机制可以将一些对运行效率有影响的代码编译成Native Code,从而在一定程度上加速Java程序的执行速度,但毕竟无法优化所有的逻辑。另外,Garbage Collector(GC)在帮助程序员管理内存的同时,其实也束缚了程序员的手脚,毕竟是否需要垃圾回收并不是程序员说了算;而在其他语言如C/C++中,我们可以free掉内存块。

  对于机器学习/深度学习来说,优化迭代的过程往往非常耗时,也非常耗资源,因此尽可能地加速迭代过程十分重要。运算速度也往往成为评价一个开源库质量高低的指标之一。鉴于JVM自身的局限性,Deeplearning4j的张量运算通过ND4J在堆外内存(Off-Heap Memory/Direct Memory)上进行。

  大量的张量运算可以依赖底层的BLAS库(如OpenBLAS、Intel MKL),由于这些BLAS库多数由Fortran或C/C++写成,且经过了细致地优化,因此可以大大提高张量运算的速度。对于这些张量对象,在堆上内存(On-Heap Memory)仅存储一个指针/引用对象,这样的处理也大大减少了堆上内存的使用。

  总结来说,至少有以下4种场景可以考虑使用Deeplearning4j:

  如果你身边的系统多数基于JVM,那么Deeplearning4j是你的一个选择;

  如果你需要在Spark上进行分布式深度神经网络的训练,那么Deeplearning4j可以帮你做到;

  如果你需要在多GPU/GPU集群上加快建模速度,那么Deeplearning4j也同样可以支持;

  如果你需要在Android移动端加入AI技术,那么Deeplearning4j可能是你方便的选择之一。

  以上四点,不仅仅是Deeplearning4j自身的特性,也是一些AI工程师选择它的理由。

  虽然Deeplearning4j并不是GitHub上Fork或者Star多的深度学习框架,但这并不妨碍其成为AI工程师的一种选择。就Skymind发布的信息看,在美国有像IBM、埃森哲、NASA喷气推进实验室等多家明星企业和实验机构,在使用Deeplearning4j或者其生态圈中的项目,如ND4J。算法团队结合自身的实际情况选择合适的框架,在多数时候可以做到事半功倍。

领取试听课
每天限量名额,先到先得
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
  • 详情请进入 遵义IT培训学校

关于我们 | 招生信息 | 新闻中心 | 学校动态

版权所有:搜学搜课(www.soxsok.com)