【专知-Deeplearning4j深度学习教程01】分布式Java开源深度学习框架DL4j安装使用: 图文+代码

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。继Pytorch教程后,我们推出面向Java程序员的深度学习教程DeepLearning4J。Deeplearning4j的案例和资料很少,官方的doc文件也非常简陋,基本上所有的类和函数的都没有解释。为此,我们推出来自中科院自动化所专知小组博士生Hujun创作的-分布式Java开源深度学习框架Deeplearning4j学习教程,第一篇,Deeplearning4j配置使用。

  1. Deeplearning4j开发环境配置
  2. ND4J(DL4J的矩阵运算库)教程
  3. 基于DL4J的CNN、AutoEncoder、RNN、Word2Vec等模型的实现

简介

Deeplearning4j是由SkyMind公司开源的分布式Java/Scala深度学习框架,支持在CPU或GPU上运行。

组件

Deeplearning4j提供了非常强大的生态,大致可以分为:

  • DataVec: 支持数据(文本、图像、音频、视频)的清洗、拼接、归一化、转换等操作,是Deeplearning4j的数据预处理组件。类似Python的Pandas组件
  • ND4J: 科学计算组件,主要是矩阵运算(支持CPU和GPU)。类似Python的numpy。
  • Deeplearning4j: 深度学习组件,封装了各种深度学习模型,包括全连接层、卷积层、RBM层等。支持传统的多层网络(MultiLayerNetwork),也支持复杂网络的定制(Computation Graph)。
  • Deeplearning4j UI: 可视化组件,类似Tensorflow的TensorBoard。可以用于可视化网络结构,以及网络训练中变量的监控。

实例

Deeplearning4j提供了非常便捷的深度模型定制功能,例如定制LeNet(一种卷积网络)的代码如下:

 MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
                .iterations(1000) 
                .regularization(true).l2(0.0005)
                .learningRate(.01)
                .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
                .list()
                .layer(0, new ConvolutionLayer.Builder(5, 5)
                        .nIn(nChannels)
                        .stride(1, 1)
                        .nOut(20)
                        .activation(Activation.IDENTITY)
                        .build())
                .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX)
                        .kernelSize(2,2)
                        .stride(2,2)
                        .build())
                .layer(2, new ConvolutionLayer.Builder(5, 5)
                        .stride(1, 1)
                        .nOut(50)
                        .activation(Activation.IDENTITY)
                        .build())
                .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX)
                        .kernelSize(2,2)
                        .stride(2,2)
                        .build())
                .layer(4, new DenseLayer.Builder().activation(Activation.RELU)
                        .nOut(500).build())
                .layer(5, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
                        .nOut(outputNum)
                        .activation(Activation.SOFTMAX)
                        .build())
                .setInputType(InputType.convolutionalFlat(28,28,1)) 
                .backprop(true).pretrain(false).build();

虽然相比于tensorflow、keras等Python深度学习框架中卷积网络的定制,上面的代码闲的略微繁琐,但在编写代码时,各种长变量名、函数名都会由IDE自动提示,所以在编写Deeplearning4j模型时,并不会感觉到工作量的增加。

选择Deeplearning4j的一个理由,是它对复杂网络的定制也有很好的支持,例如下图中的网络有两个输出:

Deeplearning4j对应的模型代码为:

ComputationGraphConfiguration conf = new NeuralNetConfiguration.Builder()
        .learningRate(0.01)
        .graphBuilder()
        .addInputs("input")
        .addLayer("L1", new DenseLayer.Builder().nIn(3).nOut(4).build(), "input")
        .addLayer("out1", new OutputLayer.Builder()
                .lossFunction(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
                .nIn(4).nOut(3).build(), "L1")
        .addLayer("out2", new OutputLayer.Builder()
                .lossFunction(LossFunctions.LossFunction.MSE)
                .nIn(4).nOut(2).build(), "L1")
        .setOutputs("out1","out2")
        .build();

模型

Github上有许多现成的Deeplearning4j模型,如AlexNet、VGG、ResNet等,例如:

许多较新的模型由Tensorflow、Keras、Caffe等框架编写,Deeplearning4j提供了一种使用这些模型的机制。Tensorflow、Caffe等框架的模型都可以被转换为Keras模型,Deeplearning4j内置了Keras模型导入的支持,因此Deeplearning4j可以支持大部分流行深度学习框架模型的导入。

安装

Deeplearning4j的配置非常的简单,直接在Maven中加入deeplearning4j-core和对应版本的ndj4(CPU或GPU)的依赖即可:

  • deeplearning4j-core: https://mvnrepository.com/artifact/org.deeplearning4j/deeplearning4j-core
  • ndj4(CPU版): https://mvnrepository.com/artifact/org.nd4j/nd4j-native
  • nd4j(GPU版):
    • Cuda7.5: https://mvnrepository.com/artifact/org.nd4j/nd4j-cuda-7.5
    • Cuda8.0: https://mvnrepository.com/artifact/org.nd4j/nd4j-cuda-8.0

最后

Deeplearning4j社区一直在努力地改进这款优秀的深度学习框架。我在很久之前用过Deeplearning4j,由于其当时不成熟的接口导致的不良的开发体验而放弃DL4J而转向其他框架,几个月后又重新使用了新版的Deeplearning4j,发现以前那些不成熟的接口(例如对于错误的提示、一些冗余的配置)都在新版本中被修复了,DL4J逐渐变成了一个非常成熟的产品,使得Java开发者可以在项目中真正使用基于Java的深度学习框架,而不是去利用微服务之类蹩脚的方法去调用那些Python深度学习框架。

最后配几张Deeplearning4j UI的截图,调试深度学习模型时,数据的可视化还是很重要的:

原文发布于微信公众号 - 专知(Quan_Zhuanzhi)

原文发表时间:2017-10-12

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

开发 | 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

问题详情: 深度学习中常常需要多GPU并行训 练,而Nvidia的NCCL库NVIDIA/nccl(https://github.com/NVIDIA/nccl...

4368
来自专栏技术翻译

机器学习和容器

机器学习(ML)和人工智能(AI)现在是IT行业中的热门话题。和容器一样。在这个博客中,我尝试将两者绘制在同一张图片中,看看是否有任何协同作用。

1590
来自专栏新智元

谷歌、亚马逊和百度的深度学习野心:TensorFlow、MXNet、PaddlePaddle 三大框架对比

【新智元导读】本文作者陈汝丹从定位、框架使用、分布式构成三个方面比较了 TensorFlow、MXNet、PaddlePaddle三个常用开源框架。 本文转载自...

3676
来自专栏AI科技大本营的专栏

详解CPU漏洞对机器学习的影响:几乎所有卷积层都受影响,QR分解降速37%

作者 | Mikel Bober-Irizar 翻译 | 刘畅 编辑 | Donna (备注:KPTI 在计算机中指 Kernel page-table iso...

2908
来自专栏大数据挖掘DT机器学习

支持中文文本数据挖掘的开源项目PyMining

最近一个月,过年的时候天天在家里呆着,年后公司的事情也不断,有一段时间没有更新博客了。PyMining是我最近一段时间构思的一个项目,虽然目前看来比较微型。该项...

4166
来自专栏专知

【干货】还在自己写训练过程么?你需要一个训练引擎

4623
来自专栏机器学习算法与Python学习

TensorFlow的安装与初步了解

今天终于有时间一探滕三福了,TensorFlow(腾三福)是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tenso...

3506
来自专栏CSDN技术头条

基于OpenGL ES的深度学习框架编写

背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框...

4258
来自专栏企鹅号快讯

谷歌TensorFlowLite正式发布,机器学习框架向移动端大步挺进!

上个月,谷歌正式宣布推出针对移动设备和嵌入式设备的轻量级解决方案 TensorFlow Lite。而在此之前,今年 5 月份的谷歌 I/O 大会上他们已经对此进...

2077
来自专栏CDA数据分析师

工具 | Python 和 R 数据分析/挖掘工具互查

在此总结一些在数据分析/挖掘中可能用到的功能,方便大家索引或者从一种语言迁移到另一种。如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对...

2417

扫码关注云+社区

领取腾讯云代金券