点击上方“专知”关注获取更多AI知识!
Deeplearning4j开发环境配置
ND4J(DL4J的矩阵运算库)教程
基于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的截图,调试深度学习模型时,数据的可视化还是很重要的:
完整系列搜索查看,请PC登录
www.zhuanzhi.ai, 搜索“DeepLearning4j”即可得。
对DeepLearning4j教程感兴趣的同学,欢迎进入我们的专知DeepLearning4j主题群一起交流、学习、讨论,扫一扫如下群二维码即可进入:
群满,请扫描小助手,加入进群~
了解使用专知-获取更多AI知识!
获取更多关于机器学习以及人工智能知识资料,请访问www.zhuanzhi.ai, 或者点击阅读原文,即可得到!
-END-
欢迎使用专知
专知,一个新的认知方式!目前聚焦在人工智能领域为AI从业者提供专业可信的知识分发服务, 包括主题定制、主题链路、搜索发现等服务,帮你又好又快找到所需知识。
使用方法>>访问www.zhuanzhi.ai, 或点击文章下方“阅读原文”即可访问专知
中国科学院自动化研究所专知团队
@2017 专知
专 · 知
关注我们的公众号,获取最新关于专知以及人工智能的资讯、技术、算法、深度干货等内容。扫一扫下方关注我们的微信公众号。
点击“阅读原文”,使用专知!