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

本文作者:杨文 2018-01-02 11:03
导语:一文读懂深度学习框架Deeplearning4j 的构成与应用

雷锋网AI研习社按:深度学习是人工智能发展最为迅速的领域之一,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的未来。

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

雷锋网AI慕课学院视频回放链接:http://www.mooc.ai/open/course/333

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

  1. java深度学习框架Deeplearning4j实战(一)BP网络分类器

    1.Deeplearning4j 深度学习,人工智能今天已经成了IT界最流行的词,而tensorflow,phython又是研究深度学习神经网络的热门工具.tensorflow是google的出品,而 ...

  2. AI芯片独角兽寒武纪 - 诚聘虚拟化/深度学习框架/系统软件研发工程师

    公司简介 寒武纪是全球智能芯片领域的先行者,公司的使命是打造各类智能云服务器.智能终端以及智能机器人的核心处理器芯片,让机器更好地理解和服务人类. 公司创始人.首席执行官陈天石博士,在处理器架构和人工 ...

  3. 面试系列(五):寒武纪 深度学习框架研发工程师

    初面 1.自我介绍. 2.聊项目中的一些问题. 3.C++多态 如何实现一个多态? 多态是为了解决什么?优点是什么? 如何用C语言实现一个多态?说下思路. 4.你的项目中用过哪些设计原则? 5.对于常 ...

  4. 化学人学python有前途吗-Java之父点赞的开源Java深度学习框架,你不学下吗?

    深度学习领域中有很多面向Python开发者的资源与教程,比如使用NumPy进行数据分析.使用MatPlotlib进行可视化等:深度学习框架方面,TensorFlow.PyTorch.MXNet等常用框 ...

  5. 【AI超级美发师】深度学习算法打造染发特效(附代码)

    [新智元导读]如今,在类似天天P图.美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经是再正常不过的事情了.那么本文便介绍了该功能背后如AI头发分割模块.头发换色.颜色增强与修正模块等技 ...

  6. 换发型算法_【AI超级美发师】深度学习算法打造染发特效(附代码)

    原标题:[AI超级美发师]深度学习算法打造染发特效(附代码) 来源:OpenCV学堂 作者:胡耀武 [新智元导读]如今,在类似天天P图.美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经 ...

  7. 深度学习框架下群组行为识别算法综述

    源自:电子学报       作者:邓海刚  王传旭  李成伟  林晓萌 摘 要 群组行为识别目前是计算机视觉领域的一个研究热点,在智能安防监控.社会角色理解和体育运动视频分析等方面具有广泛的应用价值. ...

  8. 【OpenI开源项目推荐-GammaGL】支持国内外主流深度学习框架的图神经网络算法库

    今天,OpenI要为大家推荐一款入驻社区的开源项目[GammaGL],它是由北邮GAMMA LAB 与鹏城实验室最新开源的图神经网络算法库Gamma Graph Library (GammaGL),支 ...

  9. BAT资深算法工程师《深度学习》读书分享:概率和信息论

    <深度学习>这本书是机器学习领域的重磅书籍,三位作者分别是机器学习界名人.GAN的提出者.谷歌大脑研究科学家 Ian Goodfellow,神经网络领域创始三位创始人之一的蒙特利尔大学教授 ...

最新文章

  1. PNG透明兼容IE6的几种方法
  2. Java内存模型(转载)
  3. “No module named ‘vtk.util‘;‘vtk‘ is not a package”问题完美解决
  4. python调用gitlab api自动合并分支_Python3使用 GitLab API 进行批量合并分支
  5. php 删除文件时间,php删除文件后重建,文件创建时间(filectime)未变化怎么解决??...
  6. MED-V服务器的部署与配置
  7. linux标准I/O——标准I/O介绍
  8. 入门机器学习(六)--课后作业解析-logistics回归(python实现)
  9. 从零开始刷Leetcode——数组(118.119.121)
  10. 文字虚线怎么去掉_PS十秒钟更改图片上的文字?没问题!这个小技巧你轻松get到手「16期」...
  11. 随手记_英语_学术写作_标点符号的使用
  12. vcpkg 简明教程
  13. 爱好-超级IP:超级IP
  14. Windows利用WTS API获取锁屏状态
  15. Symbol 类型 的简单理解和应用
  16. 有哪些PDF分割工具?建议收藏这些工具
  17. Linux查看服务器硬件网卡cpu型号内存BIOS、主板型号信息
  18. ESL-chapter6 核密度估计和分类
  19. 报错Takes no arguements解决办法
  20. 防屏蔽浏览器_国外lead/emu广告联盟平台/扫盲篇–UA,指纹浏览器与流量来路-VMLogin指纹浏览器介绍..

热门文章

  1. linux 进程原理内存,linux进程通信之共享内存原理(基于linux 1.2.13)
  2. php workerman demo,workerman-demo
  3. Ubuntu 安装JDK8
  4. oracle11g知乎,【AAAI】AAAI2020录用论文汇总(二)
  5. ssh linux mysql 乱码_JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码
  6. Linux下CMake简明教程(一)简单入门
  7. python 写 log
  8. c++ hello word
  9. transepose 矩阵的转置
  10. amh支持java吗_AMH 6.0 发布,国内领先的云主机面板