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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis--线程模型详解

Redis线程模型 Redis内部使用的文件事件处理器(基于Reactor模式开发的)file event handler是单线程的,所以Redis线程模型才叫单线程模型,它采用IO多路复用机制同时监听多个socket,当被监听的socket准备好执行accep、r…

072:vue+cesium 实现下雪效果

第072个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中实现下雪效果,这里使用着色器来实现实例特效。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共120行)着色代码实现心得:专栏目标示例效果

Wifi技术知识

参考文章 https://www.163.com/dy/article/FDFT60T70550I80C.html https://www.zhihu.com/tardis/bd/art/485711752?source_id1001 wifi代数 以前大家看电脑手机路由器参数,WiFi都是802.11a/b/n/g/ac/ax,这学名读起来有些麻烦,现在好了&…

第12届智能计算与无线光通信国际会议(ICWOC 2024)即将召开!

2024年第12届智能计算与无线光通信国际会议(ICWOC 2024)将于2024年6月21-23日在中国重庆召开。随着深度学习等人工智能技术的不断进步,以自动化、自治为特征的智能应用预计将激增。本届会议主题为“光通信智能链接”,旨在为相关技…

ubuntu环境下docker容器详细安装使用

文章目录 一、简介二、ubuntu安装docker1.删除旧版本2.安装方法一3. 安装方法二(推荐使用)4.运行Docker容器5. 配置docker加速器 三、Docker镜像操作1. 拉取镜像2. 查看本地镜像3. 删除镜像4. 镜像打标签5. Dockerfile生成镜像 四、Docker容器操作1. 获取…

深入理解C语言中的变量和常量

变量和常量 1. 前言2. 预备知识2.1 printf和%d2.2 \n2.3 scanf2.4 scanf在vs中报错2.5 extern2.6 数组的初始化 3. 变量和常量的区别4. 变量4.1 定义变量的方法4.2 变量的分类4.2.1 局部优先 4.3 变量的使用4.4 变量的作用域4.4.1 局部变量的作用域4.4.2 全局变量的作用域 4.5 …

机器学习|KNN和Kmeans

KNN和Kmeans KNN KNN-K个最近的邻居,而K是可人先预设出来的。 所谓近朱者赤,近墨者黑。 可以选取离当前最近的K个样本来作为辅助判断,因为本样本和最近的K个样本应该是处于一种相似的状态。 以下是一个苹果和梨的识别任务。 图上会出现一个未…

【软件设计师】通俗易懂的去了解算法的时间复杂度

🐓 时间复杂度 常用排序的时间复杂度 时间频度 算法需要花费的时间,和它语句执行的次数是成正比的,所以会把一个算法种语句执行次数称为语句频度和时间频度、记作T(n)。 定义 时间复杂度就是找到一个无限接近时间频度T(n)同数量级的函数&am…

mirthConnect忽略HTTPS SSL验证

mirthConnect SSL忽略验证 1、下载https网站证书 点击不安全---->证书无效 2、查看mirth 秘钥库口令 在mirthConnect 的conf目录下面keystore.storepass 3、导入证书到本地 在jdk的bin目录下面执行 keytool -importcert -file "下载的网站证书路径" -keysto…

CV论文--2024.3.4

1、Deep Networks Always Grok and Here is Why 中文标题:深度网络总是让人摸不着头脑,原因如下 简介:本文探讨了深度神经网络(DNN)中一种称为"延迟泛化"或"Grokking"的现象。在接近零的训练误差…

如何用Elementor创建WordPress会员网站

在下面的文章中,我们将向您展示如何使用Elementor和MemberPress在WordPress中轻松构建会员网站。这篇文章将涵盖WordPress会员网站设置过程、会员资格和受保护内容创建、重要页面和登录表单设计、电子邮件通知管理、报告等。 目录 什么是WordPress会员网站&#x…

【go从入门到精通】go基本类型和运算符用法

大家好,这是我给大家准备的新的一期专栏,专门讲golang,从入门到精通各种框架和中间件,工具类库,希望对go有兴趣的同学可以订阅此专栏。 --------------------------------------------------------------------------…

.NET高级面试指南专题十四【 观察者模式介绍,最常用的设计模式之一】

简介: 观察者模式(Observer Pattern)是一种行为型设计模式,其目的是定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。 原理: 在观察者模式中…

从零开始搭建web组态

成果展示:by组态[web组态插件] 一、技术选择 目前只有两种选择,canvas和svg Canvas: 是一个基于像素的渲染引擎,使用JavaScript API在画布上绘制图像,它的优点包括: Canvas渲染速度快,适合处理大量图像和…

TIOBE 2024榜单启示:程序员如何把握未来编程趋势与机遇

程序员如何选择职业赛道? 程序员的职业赛道就像是一座迷宫,有前端的美丽花园,后端的黑暗洞穴,还有数据科学的神秘密室。你准备好探索这个充满挑战和机遇的迷宫了吗?快来了解如何选择职业赛道吧! 方向一…

CSS中如何解决 1px 问题?

1px 问题指的是:在一些 Retina屏幕 的机型上,移动端页面的 1px 会变得很粗,呈现出不止 1px 的效果。原因很简单——CSS 中的 1px 并不能和移动设备上的 1px 划等号。它们之间的比例关系有一个专门的属性来描述: window.devicePix…

重构笔记系统:Docker Compose在微服务架构中的应用与优化

虽然我的笔记系统的开发是基于微服务的思想,但是在服务的配置和编排上感觉还是不太合理,具体来说,在开发上的配置和在生产上的配置差别太大。现在规模小,后面规模变大,估计这一块会成为系统生长的瓶颈。 因此&#xff…

跨时钟信号处理方法

1. 背景 现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会…

python+Django+Neo4j中医药知识图谱与智能问答平台

文章目录 项目地址基础准备正式运行 项目地址 https://github.com/ZhChessOvO/ZeLanChao_KGQA 基础准备 请确保您的电脑有以下环境:python3,neo4j 在安装目录下进入cmd,输入指令“pip install -r requirement.txt”,安装需要的python库 打…

猫为什么挑食?可以改善、预防猫咪挑食的主食冻干分享

现在的猫咪主人都把自家的小猫当成了心头的宝贝,呵护备至。最令人头疼的就是猫咪挑食不吃猫粮,猫为什么挑食?遇到这类情况怎么办呢?今天,我要分享一个既能确保猫咪不受苦,又能有效改善挑食问题的方法。 一、…