DL4J实战之六:图形化展示训练过程

article/2025/4/30 5:51:41

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本篇是《DL4J实战》系列的第六篇,咱们继续夯实基本功,这次学习的是如何更加形象完整的展示训练过程:图形化页面,效果如下图所示:
    在这里插入图片描述

  • 接下来选择一个已有的子工程,为其增加图形化界面的效果,我这里选的是《DL4J实战之三:经典卷积实例(LeNet-5)》一文中的simple-convolution子工程

  • 总的来说本篇由以下内容构成:

  1. 基本的图形化功能
  2. 图形化数据的持续存储问题
  3. 图形化页面的端口配置问题

依赖库配置

  • 首先是添加依赖库,一共需要两步:
  • 打开父工程dlfj-tutorials的pom.xml,这是管理依赖库版本号的地方,在dependencies节点确保以下子节点是存在的,这里dl4j-master.version的值是1.0.0-beta7
<dependency><groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j-ui</artifactId><version>${dl4j-master.version}</version>
</dependency>
  • 打开子工程simple-convolution的pom.xml,添加deeplearning4j-ui库的依赖:
<dependency><groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j-ui</artifactId>
</dependency>
  • 如果您在用的是IDEA,建议执行下图中的操作,确保配置立即生效:
    在这里插入图片描述

增加图形化相关代码

  • 图形化相关的代码很少,只有寥寥几句,写在MultiLayerNetwork实例初始化之后的位置即可,如下图红框所示:
    在这里插入图片描述
  • 上图红框中的代码在此,方便您使用:
// 初始化用户界面后端
UIServer uiServer = UIServer.getInstance();// 配置要存储网络信息(梯度、分数、时间等)的位置。这里:存储在内存中。
StatsStorage statsStorage = new InMemoryStatsStorage();// 将StatsStorage实例附加到UI:这允许StatsStorage的内容可视化
uiServer.attach(statsStorage);//然后添加StatsListener来收集网络上的信息
net.setListeners(new StatsListener(statsStorage));
  • 最后,为了避免进程过早结束导致无法继续查看图形化信息,在main方法的末尾动一点手脚,如等待输入或者延时,我这里加了个延时:
Thread.sleep(Integer.MAX_VALUE);
  • 至此编码完成,运行起来,在浏览器输入http://localhost:9000,效果如下图:
    在这里插入图片描述
  • 还可以将页面语言换成中文,如下图:
    在这里插入图片描述
  • 点击下图红框中的菜单,还可以看到神经网络每一层的详情:
    在这里插入图片描述
  • 基本功能已经完成,接下来看看持久化问题

持久化存储页面展示的内容

  • 前面的图形化功能有个明显的问题:一旦进程结束,web服务也就结束了,下次再启动,页面上展示的也是最新一次训练的数据,如果想保存页面上展现的内容以便后面再回放,应该如何做呢?接下来一起操作,改成可以持久化存储的
  • 找到这一行代码:
StatsStorage statsStorage = new InMemoryStatsStorage();
  • 把上面那行代码删除,换成下面这行,File对象的入参是数据存储位置,请按照您电脑的实际情况修改:
StatsStorage statsStorage = new FileStatsStorage(new File("E:\\temp\\202107\\11", "ui-stats.dl4j"));
  • 把下面这行代码也删除,这样训练完成后进程会立即结束:
Thread.sleep(Integer.MAX_VALUE);
  • 现在运行代码执行一次训练,完成后,在E:\temp\202107\11目录发现生成了名为ui-stats.dl4j的文件:
    在这里插入图片描述
  • 上图看起来已经把数据保存硬盘,接下来试试能不能再次读取到,在simple-convolution工程中新增Test.java,代码如下所示,寥寥几行,全是前面那点东西:
package com.bolingcavalry.convolution;import org.deeplearning4j.api.storage.StatsStorage;
import org.deeplearning4j.ui.api.UIServer;
import org.deeplearning4j.ui.storage.FileStatsStorage;
import java.io.File;public class Test {public static void main(String[] args) throws Exception {UIServer uiServer = UIServer.getInstance();StatsStorage statsStorage = new FileStatsStorage(new File("E:\\temp\\202107\\11", "ui-stats.dl4j"));// 将StatsStorage实例附加到UI:这允许StatsStorage的内容可视化uiServer.attach(statsStorage);Thread.sleep(99999);}
}
  • 再次打开浏览器访问http://localhost:9000,曾经的数据再现:
    在这里插入图片描述
  • 聪明的您看了上面的Test.java代码,一定会对欣宸投来鄙视的眼光,就这水平?请容我解释一下,这里只是演示如何加载和展示数据,所以写的过于简陋,您可以将此代码段放在常用的web应用中,如SpringBoot,这样就能按需要加载和查看了
  • 解决了存储问题,咱们再来看看web端口如何调整,因为端口冲突,或者一些端口管理,都有调整端口的需求,而不能固定在9000

关于图细化服务的web端口

  • 图细化服务是通过浏览器访问的,默认端口为9000,如果您想改变端口,例如改为9001,该如何操作呢?

  • 先看官方怎么说,如下图红框,地址:https://deeplearning4j.konduit.ai/tuning-and-training/visualization
    在这里插入图片描述

  • 听官方的,配置启动参数,操作如下图:
    在这里插入图片描述

  • 确保下图红框2中的菜单被选中:
    在这里插入图片描述

  • 在下图红框位置(VM options位置)填入官方推荐的内容,将端口指定为9001:
    在这里插入图片描述

  • 怕自己设置的参数有问题,我添加了下图红框中的两行代码,将参数打印出来:
    在这里插入图片描述

  • 再次运行Test.java,如下图,红框2证明我按照官方建议输入的参数是没有问题的,但是红框1显示服务还在监听9000端口:
    在这里插入图片描述

  • 去浏览器上试试,发现确实如此:9000端口服务正常,9001端口无法访问

  • 这就郁闷了,我的操作有问题吗?若是有问题,System.getProperty(“org.deeplearning4j.ui.port”)的输出是9001又怎么解释?

  • 还是去看下源码吧,很容易就查到了设置端口值的代码,在VertxUIServer类中,如下图红框所示,真像大白了!获取端口的代码是System.getenv,这是获取环境变量的方法,不能用前面那种方式去设置:
    在这里插入图片描述

  • 既然源码中是用System.getenv方法获取参数的,那咱们就按照环境变量的方法来输入吧,如下图所示,将之前的配置删除,再在红框2位置输入参数,注意参数的最前面不需要-D
    在这里插入图片描述

  • 改好后,再起运行Test.java,如下图,红框1显示web服务监听端口已经变成了9001,红框2中的值为null,这也正常,因为最初的system property参数已经删除了

  • 浏览器访问http://localhost:9001试试,可以正常访问了:
    在这里插入图片描述

  • 所以,最终通过修改环境变量,咱们成功的修改了web端口,此刻再回想一下,官方提到的system property和-Dorg.deeplearning4j.ui.port=9001是怎么回事呢,事实证明这样改是没用的…

  • 我觉得,应该是欣宸才疏学浅不了解真像,聪明的您如果发现了问题原因,麻烦您在文章评论者指点一二,谢谢啦。

  • 至此,图形化展示训练过程的实战就完成了,希望本文能给您提供一些参考,帮您顺利搭建图形化环境,以更好的观察和调整训练参数、优化网络

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

http://chatgpt.dhexx.cn/article/ivMlSMIH.shtml

相关文章

使用tensorflow搭建深层神经网络

6在吴恩达老师的《深度学习》第二课第三周的课程中&#xff0c;提及到了多种深度学习框架&#xff0c;包括caffe/caffe2&#xff0c;CNTK&#xff0c;DL4J&#xff0c;Keras&#xff0c;Lasagne&#xff0c;mxnet&#xff0c;paddlepadle&#xff0c;tensorflow&#xff0c;The…

[Deeplearning4j应用教程02]_DL4J环境搭建教程-Windows版

Windows下DL4J环境搭建教程 一、DL4J简介二、Windows下DL4J环境搭建三、安装JDK1.1、JDK简介1.2、JDK下载安装1.3、安装JDK1.3.1、环境变量配置 四、安装Intellij idea五、Maven Apache安装六、在IDEA中配置Maven七、安装Git八、获取DL4J示例代码九、在IDEA中导入项目并运行 一…

DL4J源码分析

目录 源码目录&#xff08;部分&#xff09; NDArray 工作间 DL4J的层工作间管理器 沿维张量&#xff08;TAD&#xff09; 反向减法 源码目录&#xff08;部分&#xff09; DeepLearning4J: 包含用于既在单个机器上&#xff0c;又在分布式上学习神经网络的所有代码。 N…

DL4J实战之四:经典卷积实例(GPU版本)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 作为《DL4J实战》的第四篇&#xff0c;今天咱们不写代码&#xff0c;而是为今后的实战做些准备&#xff1a;在DL4J框架下用GPU加速深度学习的训练过…

DL4J实战之三:经典卷积实例(LeNet-5)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 作为《DL4J》实战的第三篇&#xff0c;目标是在DL4J框架下创建经典的LeNet-5卷积神经网络模型&#xff0c;对MNIST数据集进行训练和测试&#xff0…

DL4J实战之二:鸢尾花分类

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《DL4J》实战的第二篇&#xff0c;前面做好了准备工作&#xff0c;接下来进入正式实战&#xff0c;本篇内容是经典的入门例子&#xff1a;鸢…

DL4J实战之一:准备

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于DL4J DL4J是Deeplearning4j的简称&#xff0c;是基于Java虚拟机的深度学习框架&#xff0c;是用java和scala开发的&#xff0c;已开源&#xff0c;官网&…

【DL4J】基本操作_学习笔记(二)

DL4J基本操作 文章目录 DL4J基本操作1. 创建矩阵2. 矩阵元素读取3. 矩阵行元素读取4. 矩阵运算 导入依赖 <nd4j.version>1.0.0-beta2</nd4j.version><dependency><groupId>org.nd4j</groupId><artifactId>nd4j-native-platform</artifa…

【DL4J速成】Deeplearning4j图像分类从模型自定义到测试

文章首发于微信公众号《有三AI》 【DL4J速成】Deeplearning4j图像分类从模型自定义到测试 欢迎来到专栏《2小时玩转开源框架系列》&#xff0c;这是我们第九篇&#xff0c;前面已经说过了caffe&#xff0c;tensorflow&#xff0c;pytorch&#xff0c;mxnet&#xff0c;keras&…

深度学习框架DeepLearning4J(DL4J)的安装及配置

一、DeepLearning4J的简介和系统要求 1、DeepLearning4J简介 Deeplearning4J&#xff08;以下简称DL4J&#xff09;不是第一个开源的深度学习项目&#xff0c;但与此前的其他项目相比&#xff0c;DL4J在编程语言和宗旨两方面都独具特色。DL4J是基于JVM、聚焦行业应用且提供商…

适合中学生看的英文电影

怎样利用好丰富的资源来学习英语口语呢&#xff1f;其实其实看什么样的剧、如何看剧都是很讲究的。一起来解锁吧。 一、选剧要学会拆解自己学习目标&#xff0c;选定合适的类型&#xff0c;各取所需。 并不是所有类型的国外影视剧都适合作为学习的素材&#xff0c;主要依据自身…

springboot+mybatis实现简单的增、删、查、改

这篇文章主要针对java初学者&#xff0c;详细介绍怎么创建一个基本的springboot项目来对数据库进行crud操作。 目录 第一步&#xff1a;准备数据库 第二步&#xff1a;创建springboot项目 方法1&#xff1a;通过spring官网的spring initilizer创建springboot项目 方法2&am…

tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询

Mybatis-Plus极大简化了我们的开发&#xff0c;作为mybatis的增强版&#xff0c;Mybatis-Plus确实帮我们减少了很多SQL语句的编写&#xff0c;通过其提高的API&#xff0c;可以方便快捷第完成增删查改操作。但是&#xff0c;其实除了Mybatis-Plus以外&#xff0c;还有一个技术t…

SXSW 2022线下展回归,今年有哪些有趣的AR/VR内容?

如今海外的线下活动开始逐渐恢复&#xff0c;今年的SXSW活动也回归线下。与往年相比&#xff0c;这场艺术、音乐、电影的年度盛会在今年进一步融合新兴科技&#xff0c;比如将AR/VR与线下活动结合&#xff0c;带来了更多样化的娱乐应用场景。 那么今年活动上都有哪些看点&#…

UE4 Ultra Dynamic Sky 参数翻译及功能概述

Ultra Dynamic Sky的虚幻商城链接: Ultra Dynamic Sky Ultra_Dynamic_Sky翻译及功能概述 basic controls 基础控制 Refresh Settings 刷新设置 检查此布尔一次&#xff0c;以刷新所有设置&#xff1b; Time Of Day 一天中的时间 一天中天空模仿的时间&#xff0c;从0000到…

更新《鸿门宴传奇》黎明/冯绍峰/张涵予/刘亦菲1024x436 高清下载!1.25G 附加720P种子...

高清下载!1.25G 附加720P种子" title="更新《鸿门宴传奇》黎明/冯绍峰/张涵予/刘亦菲1024x436 高清下载!1.25G 附加720P种子"> 高清下载!1.25G 附加720P种子" title="更新《鸿门宴传奇》黎明/冯绍峰/张涵予/刘亦菲1024x436 高清下载!1.25G 附加…

2019年如何成为一名合格的数据分析师

我是CPDA数据分析师 我是CDA数据分析员 我从事数据分析相关工作 我是个数据分析的小白 我想转行做数据分析 今天我围绕如何成为合格的数据分析师跟大家分享三个小话题: 找到在数据分析领域的定位 数据分析思维的训练 数据分析领域发展方向 一、找准数据分析师的定位 …

感谢折磨你的人[三]

第38节 肯定自己才能看见成功 美国联合保险公司董事长克里蒙史东说&#xff1a;“真正的成功秘诀是‘肯定人生’四个字&#xff0c;如果你能以坚定而乐观的态度&#xff0c;去面对一切困难险阻&#xff0c;那么&#xff0c;你一定能从其中得到好处。” 不要抱怨周遭人、事、物对…

舒淇放下黎明战胜抑郁 自称没责任感且不会结婚q1h

舒淇入行至今&#xff0c;最令人印象深入的恋情&#xff0c;要数与黎明的7年情&#xff0c;有传二人当年因黎明父亲及影迷反对而分手&#xff0c;有一段时光&#xff0c;舒淇更患上抑郁症&#xff01;舒淇日前接收拜访时&#xff0c;被问到若心境愁闷会如何面对&#xff0c;她说…

PS4计算机模块试题,越玩越留恋的PS4独占大作,馋坏了PC玩家,纷纷加入主机行列...

PS4游戏主机是发烧级玩家必有的装备&#xff0c;它的游戏性能远远大于电脑&#xff0c;对于任何的游戏软件优化很强&#xff0c;几乎很少出现卡顿和缺陷&#xff0c;因为它就是为游戏而生&#xff0c;各种游戏也是为主机固件量身定做&#xff0c;那么这个强大的游戏平台&#x…