Deeplearning4j【基础 01】初识Java深度学习框架DL4J

2024-03-04 14:04

本文主要是介绍Deeplearning4j【基础 01】初识Java深度学习框架DL4J,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初识Java深度学习框架DL4J

  • 1.起因
  • 2.简介
  • 3.组件
    • 3.1 Deeplearning4j/ScalNet
      • 3.1.1 Deeplearning4jf(Java)
      • 3.1.2 ScalNet(Scala)
    • 3.2 ND4J/LibND4J
    • 3.3 SameDiff
    • 3.4 DataVec
    • 3.5 Arbiter
    • 3.6 RL4J
  • 4.总结

内容来自网络,基于官方文档【 Deeplearning4j】、知乎【 DL4J开发者社区】、OSCHINA【 Deeplearning4j 分布式深度学习库】、科普中国·科学百科【 Deeplearning4j】等文章进行整理,简化了一些信息并通过深度学习菜鸟 我这个人形GPT〒_〒的思维方式进行阐述。

1.起因

  • LLM如火如荼地影响着整个互联网应用,AI也成为焦点,之前的大数据分析似乎热度过去了,大家都想学点儿ML,但是Python、GPU不是都具备的。
  • DL4J可以在JVM上运行,拥有了Java语言的一切优点,且支持GPU和大数据组建集成,不用担心性能和可扩展性。
  • 由于是小白,需要进行基础知识的补充,这里整理一下分享给大家。

2.简介

Deeplearning4j是当前最大、最流行的基于JAVA的深度学习框架,正式诞生于2013年,在2017年加入Eclipse基金会,由美国的Skymind开源并维护。

  • 支持神经网络模型的构建、模型训练和部署;
  • 能够与现有大数据生态进行无缝衔接(Hadoop、Spark等),也是可以原生态支持分布式模型训练的框架之一;
  • 支持多线程;
  • 跨平台(硬件:CUDA GPU,x86,ARM,PowerPC;操作系统:Windows/Mac/Linux/Android)。

小结一下:模型构建、模型训练和部署一条龙,兼容性强,多线程,跨平台(特别注意Android平台,支持端侧模型)?

3.组件

Deeplearning4j实际上是一堆项目,旨在支持基于 JVM 的深度学习应用程序的所有需求。除了 Deeplearning4j 本身(高级 API),它还包括:

  • Deeplearning4j/ScalNet:JVM和Spark上运行神经网络构建、训练和部署的基础框架库;
  • ND4J/libND4J:支持CPU/GPU加速的高性能数值计算库,可以说是JVM上的Numpy;
  • SameDiff:用于符合微分和计算图库;
  • DataVec:数据处理库,提供采样、过滤、变换等操作;
  • Arbiter:神经网络超参数搜索和优化库;
  • RL4J:JVM上的强化学习库;
  • Model Import:模型导入库,可以导入ONNX,TensorFlow,Keras(Caffe)模型;
  • Jumpy:ND4J对应Python语言API;
  • Python4j:可以在JVM里运行Python脚本语言。

dl4j-0.jpg
dl4j-3.jpg

3.1 Deeplearning4j/ScalNet

  1. 前向神经网络(Feedforward Neural Networks, FNN)
  2. 自动编码器(AutoEncoders)
  3. 卷积神经网络(Convolutional Neural Networks, CNN)
  4. 循环神经网络(Recurrent Neural Networks ,RNN)
  5. 生成对抗网络(Generative Adversarial Networks)
  6. 递归神经网络(Recursive Neural Network )
  7. 深度信念网络(Deep Belief Networks)和受限制玻尔兹曼机(Restricted Boltzmann Machines)
  8. 图神经网络(Graph Neural Networks)

dl4j-1.jpg

3.1.1 Deeplearning4jf(Java)

神经网络高层API库,用于构建具有各种层的多层神经网络(MultiLayerNetworks)和计算图(ComputationGraphs),支持从其他框架导入模型和在Apache Spark上进行分布式训练

3.1.2 ScalNet(Scala)

ScalNet是受Keras启发而为Deeplearning4j开发的Scala语言包装。它通过Spark在多个GPU上运行。功能相当于Keras。
Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。

3.2 ND4J/LibND4J

ND4J是Deeplearning4j的数值处理库和张量库,在JVM中实现Numpy的功能:

  • Java科学运算引擎,用来驱动矩阵操作;
  • JavaCPP功能: Java 到 Objective-C 的桥,可像其他 Java 对象一样来使用 Objective-C 对象;
  • CPU 后瑞:OpenMP、OpenBlas 或 MKL、与SIMD的扩展;
  • GPU 后瑞:最新CUDA 及 CuDNN。

包含500多种数学、线性代数和神经网络操作。

3.3 SameDiff

SameDiff是具有自动微分功能的张量计算库,其自动微分方法是基于静态图的方法,提供神经网络运算中更为底层的接口,主要用于自定义神经网络拓扑结构。
另外,SameDiff支持导入Tensorflow冻结模型格式的.pd(protobuf)模型。对ONNX、TensorFlow SaveModel和Keras模型的导入正在完善中。可以简单的认为SameDiff和DL4J的关系类似于Tensorflow和Keras。
符合微分和计算图库是深度学习中的两个关键概念:

  1. 符合微分(Automatic Differentiation,简称AD)
  • 符合微分是一种计算梯度的技术,用于优化神经网络中的参数。
  • 在神经网络训练过程中,我们需要计算损失函数对模型参数的梯度,以便使用梯度下降等优化算法来更新参数。
  • 符合微分通过构建计算图并自动计算每个节点的梯度,使得梯度计算变得高效且不容易出错。
  • 常见的深度学习框架(如TensorFlow、PyTorch和Deeplearning4j)都使用符合微分来实现反向传播算法。
  1. 计算图库
  • 计算图是一种表示复杂计算过程的图结构,其中节点表示操作(例如加法、乘法、激活函数等),边表示数据流。
  • 计算图库用于构建、管理和执行计算图。
  • 在深度学习中,计算图用于描述神经网络的前向传播和反向传播过程。

3.4 DataVec

神经网络专门处理多维数组形式的数值数据。DataVec可以将来自一个CSV文件或一批图像的数据序列化,转换为数值数组。数据的摄取、清理、联接、缩放、标准化和转换是开展任何类型的数据分析时都必须完成的工作。是深度学习的先决条件。DataVec是专为这一流程设计的工具包。数据科学家和开发人员可以用其中的工具将图像、视频、声音、文本和时间序列等原始数据转变为特征向量,输入神经网络。

  • 数据的的 ETL (抽取、转换、装载)和向量化;
  • DataVec帮助克服机器学习及深度学习实现过程中最重大的障碍之一:将数据转化为神经网络能够识别的格式;
  • DataVec使用Apache Spark来进行转换运算。

整体流程如下:

image.png
同时,DataVec也支持所有主要类型的输入(CSV、文本、图像、音频、视频和数据库)整体流程如下:


除了明显提供经典数据格式的读取器,DataVec还提供了一个接口用来摄取特定的自定义数据。

3.5 Arbiter

Arbiter帮助您搜索超参数空间,为神经网络寻找最理想的参数组合及架构。这非常重要,因为寻找恰当的架构和超参数是一个很大的组合问题。来自微软研发部等企业实验室的ImageNet大赛获胜团队正是通过搜索超参数空间才得出了ResNet这样的150层神经网络:

  • 深度学习模型检测、评估器;
  • 调整及优化机器学习模型;
  • 使用Grid search和Random Search 作超参数寻优;
  • arbiter-core:Aribter-core用网格搜索等算法来搜索超参数空间。它会提供一个GUI界面。
  • arbiter-deeplearning4j:Arbiter可以同DL4J模型互动。在进行模型搜索时,您需要能运行模型。这样可以对模型进行试点,进而找出最佳的模型。

3.6 RL4J

RL4J是在Java中实现深度Q学习、A3C及其他强化学习算法的库和环境,与DL4J和ND4J相集成。

4.总结

简而言之,Deeplearning4j 能够让你从各类浅层网络(其中每一层在英文中被称为layer)出发,设计深层神经网络。这一灵活性使用户可以根据所需,在分布式、生产级、能够在分布式 CPU 或 GPU 的基础上与 Spark 和 Hadoop 协同工作的框架内,整合受限玻尔兹曼机、其他自动编码器、卷积网络或递归网络。此处为我们已经建立的各个库及其在系统整体中的所处位置:

dl4j-4.jpg

这篇关于Deeplearning4j【基础 01】初识Java深度学习框架DL4J的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773431

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.