资深算法工程师万宫玺:Java 工程师转型 AI 的秘密法宝——深度学习框架 Deeplearning4j | 分享总结

深度学习是人工智能发展最为迅速的领域之一,Google、Facebook、Microsoft 等巨头都围绕深度学习重点投资了一系列新兴项目,他们也一直在支持一些开源深度学习框架。目前研究人员使用的深度学习框架有 TensorFlow、Torch 、Caffe、Theano、Deeplearning4j 等,而 Deeplearning4j 是为数不多以 Java/JVM 为基础,能与 Apache Spark 无缝结合,支持 CPU/GPU 集群分布式计算的开源框架。本文就来为大家详细介绍一下深度学习框架 Deeplearning4j 的重要组件,不同环境下的操作用法及实例分享。

在近期AI 研习社的线上分享会,来自苏宁易购搜索技术研发部的资深算法工程师万宫玺为大家介绍了 Deeplearning4 框架的构成、主要功能模块并结合实例讲述具体的使用方法。

视频回放链接:http://www.mooc.ai/open/course/333

万宫玺,苏州大学硕士,现就职于苏宁易购搜索技术研发部,从事自然语言处理、机器视觉等领域的应用开发工作。熟悉诸如 Deeplearning4j、Keras 等开源深度学习框架。

以下为主要分享内容:

分享主题为:基于 Java 的开源深度学习框架 - Deeplearning4j 的介绍与实例分享。

分享内容可概括以下四方面:

  • Deeplearning4j 生态圈主要功能模块的介绍
  • Deeplearning4j 单机 / 并行 / 分布式建模过程介绍
  • Deeplearning4j 对迁移学习、强化学习的支持
  • 基于 Fashion Mnist 数据集的图像分类应用的开发、部署、上线实例

第一部分内容具体为 DL4j 的开源库背景,目前的项目进展情况和背后的支撑团队。

第二部分为 DL4j 的生态圈,主要介绍生态圈中最重要的三个模块:DL4j 本身,它所依赖的张量预算库 ND4j、DL4j 当中做数据 ETL 的库 DataVec。

DL4j 本身,它定义并且实现了比较经典的神经网络结构,比如图片中比较常用的卷积神经网络。机器学习都需要依赖一个张量运算框架,对于 DL4j,他依赖的是 ND4j 这样一个框架,libnd4j 是 ND4j 调用的一个库。

Model Zoo 是官方给出的经典神经网络结构的实现。包括 AlexNet,GoogLenet ,DeepFace,YOLO 等。Modle Zoo 在 0.9.0 版本之前是作为一个独立的工程存在的,0.9.0 之后的版本作为 DL4j 本身的一个模块,已经嵌入进去。

DL4j 所依赖的张量运算库 ND4J,ND4j 可当作 JAVA 版的 Numpy。

ND4j 内存管理情况:

ND4j 利用了堆外内存和堆上内存两个部分的内存做相应的计算。当用 ND4j 去声明一个具体的张量时候,是在堆外内存存储张量对象,堆上内存只存储张量对象的引用。设计的原因主要是我们所依赖张量运算库,大部分的运算空间都是在堆外内存上,把数据放到堆外内存可提高运行效率。

需要注意的是,用 ND4j 做神经网络的训练时,堆外内存一定要调的非常大,因为大量的工作都是在堆外内存做相应的张量运算。堆外内存要远远大于堆上内存。

ND4j 具体例子,第一个是如何去创建一个张量,并且把这个张量在底层存储的顺序打印出来。

第二个是 hadmard 乘积实现。用直白的话解释就是,两个张量相应的位置去做乘积,把这个结果形成新的向量,作为下一部分利用的结果,这个操作在包括卷积上面都是比较常用的。

数据 ETL 库,称之为 DataVec, 它的主要功能就是把语音信号,图片文件,文本文档转化为张量形式,做数据 ETL.

总结 DataVec 库的作用:它可以将非结构化数据经过处理转化变成张量型数据,也支持结构化数据的读取。

第三个部分怎么建模。分三个场景,第一个是本地单机建模;第二个是有多个 CPU 或多个 GPU 卡情况下怎么做并行建模;第三个是怎么和 Spark 结合做分布式的 DL4j 模型的建模。

建模的四个步骤并不是固定的,可以根据实际情况做灵活的处理。大致思路首先是生成这样一个训练,测试,验证数据集。

本地单机建模,首先是加载数据(包括本地数据和测试数据),其次是配置模型结构以及超参数,并初始化模型参数。最后,训练神经网络模型,并利用测试数据集进行评估。

数据并行化:

并行建模如图所示:

怎么和 Spark 结合做一个分布式的 Dp4j 模型的建模:

想要在 Spark 上面开发的同学,需要注意 Spark 的版本,因为 DL4j 支持 1.5、1.6 还有 2.0 之后的版本。框架接近 1.0 版本的发布,真正原生态支持 Spark 并不多,DL4j 和 Spark 的结合是它的一大亮点。

第四部分是强化学习模块,称之为 RL4j ,也是生态系统当中的一个组件。

迁移学习和强化学习在 DL4j 的支持情况:

具体应用实例分享:

关于 Deeplearning4j 的总结

个人在做 AI 方面的心得体会

  • 机器学习是 AI 的主要解决方案,但不是唯一方案。
  • 深度学习并不是万能的,对于非结构化数据:图像、文本、语音会有出色的效果,但传统机器学习模型同样很重要。
  • 数据的质和量在实际的应用中共同决定了模型的泛化能力。
  • 转型 AI 同样可以从 Hello World 入手。
  • 提升 AI 内功必须精通原理,而不仅仅跑出 Demo。
  • 不要局限于某一特定工具框架,可以取长补短。
  • 迁移学习和强化学习可能代表 AI 的未来。

如果想详细了解深度学习的应用,如何做开发,怎么去训练他的模型,怎么去调优,怎么去部署上线点击下面的视频可回顾本期内容。

视频回放链接:http://www.mooc.ai/open/course/333

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

译文 | 与TensorFlow的第一次接触(一)

本人对一直对高性能网络服务器,分布式存储比较感兴趣,在BAT时也一直从事架构开发,并没有做过机器学习相关工作,平时喜欢阅读分析开源代码,到目前为止已分析完约8套...

3456
来自专栏数据小魔方

R语言可视化——多边形与数据地图填充

ggplot函数中有一类特殊的图表类型叫做多边形,很难用传统的视角来定义它属于哪一类图表,因为它能够呈现信息多种多样。 特别是在做某些比较高阶的图表——地图时,...

3144
来自专栏数据派THU

分布式机器学习平台大比拼(附论文)

来源:将门创投 本文长度为2575字,建议阅读4分钟 本文为你介绍分布式机器学习平台的实现方法及未来研究方向。 本文选自纽约州里大学计算机系教授Murat和学生...

5905
来自专栏CDA数据分析师

盘点丨2018 年热门 Python 库丨TOP20

在解决数据科学任务和挑战方面,Python继续处于领先地位。去年,我对当时热门的Python库进行了总结。今年,我在当中加入新的库,重新对2018年热门Pyth...

1852
来自专栏机器学习-数据挖掘

基于多维数据频繁项挖掘的母机隐患排查

本文首先通过“啤酒与尿布”的故事入手,介绍机器学习中常见问题——频繁项挖掘的应用背景;其次,简要介绍频繁项挖掘最常用的两种算法——Apriori算法和FP-gr...

2246
来自专栏AI研习社

Java工程师转型AI的秘密法宝:深度学习框架Deeplearning4j | 回顾

深度学习是人工智能发展最为迅速的领域之一,Google、Facebook、Microsoft等巨头都围绕深度学习重点投资了一系列新兴项目,他们也一直在支持一些开...

4897
来自专栏CSDN技术头条

25个Java机器学习工具&库

本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。W...

2347
来自专栏ATYUN订阅号

DeepMind开源强化学习库TRFL,可在TensorFlow中编写强化学习智能体

今天,DeepMind开源了一个新的构建模块库,用于在TensorFlow中编写强化学习(RL)智能体。名为TRFL(发音为’truffle’),它代表了其内部...

1192
来自专栏新智元

【深度】基于论文,对谷歌 TPU 的最全分析和专业评价

【新智元导读】本文以 Google 最新公开的 TPU 论文《在数据中心中对张量处理器进行性能分析》的译本为基础,对该论文及 TPU 进行了评价。 源起 2...

5294
来自专栏新智元

Andrej Karpathy:神经网络是“软件2.0”,而非机器学习的一种工具

【新智元导读】深度学习和计算机视觉专家、特斯拉人工智能部门主管Andrej Karpathy最近提出将神经网络视为Software 2.0,而非“机器学习中的一...

4198

扫码关注云+社区

领取腾讯云代金券