共计 4125 个字符,预计需要花费 11 分钟才能阅读完成。
欢送拜访我的 GitHub
这里分类和汇总了欣宸的全副原创 (含配套源码):https://github.com/zq2599/blog_demos
本篇概览
- 本篇是《DL4J 实战》系列的第六篇,咱们持续夯实基本功,这次学习的是如何更加形象残缺的展现训练过程:图形化页面,成果如下图所示:
- 接下来抉择一个已有的子工程,为其减少图形化界面的成果,我这里选的是《DL4J 实战之三:经典卷积实例 (LeNet-5)》一文中的 <font color=”blue”>simple-convolution</font> 子工程
- 总的来说本篇由以下内容形成:
- 根本的图形化性能
- 图形化数据的继续存储问题
- 图形化页面的端口配置问题
依赖库配置
- 首先是增加依赖库,一共须要两步:
- 关上父工程 <font color=”blue”>dlfj-tutorials</font> 的 pom.xml,这是治理依赖库版本号的中央,在 <font color=”blue”>dependencies</font> 节点确保以下子节点是存在的,这里 dl4j-master.version 的值是 <font color=”blue”>1.0.0-beta7</font>:
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-ui</artifactId>
<version>${dl4j-master.version}</version>
</dependency>
- 关上子工程 <font color=”blue”>simple-convolution</font> 的 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);
- 至此编码实现,运行起来,在浏览器输出 <font color=”blue”>http://localhost:9000</font>,成果如下图:
- 还能够将页面语言换成中文,如下图:
- 点击下图红框中的菜单,还能够看到神经网络每一层的详情:
- 基本功能曾经实现,接下来看看长久化问题
长久化存储页面展现的内容
- 后面的图形化性能有个显著的问题:一旦过程完结,web 服务也就完结了,下次再启动,页面上展现的也是最新一次训练的数据,如果想保留页面上展示的内容以便前面再回放,应该如何做呢?接下来一起操作,改成能够长久化存储的
- 找到这一行代码:
StatsStorage statsStorage = new InMemoryStatsStorage();
- 把下面那行代码删除,换成上面这行,File 对象的入参是数据存储地位,请依照您电脑的理论状况批改:
StatsStorage statsStorage = new FileStatsStorage(new File("E:\\temp\\202107\\11", "ui-stats.dl4j"));
- 把上面这行代码也删除,这样训练实现后过程会立刻完结:
Thread.sleep(Integer.MAX_VALUE);
- 当初运行代码执行一次训练,实现后,在 <font color=”blue”>E:\temp\202107\11</font> 目录发现生成了名为 <font color=”red”>ui-stats.dl4j</font> 的文件:
- 上图看起来曾经把数据保留硬盘,接下来试试能不能再次读取到,在 <font color=”blue”>simple-convolution</font> 工程中新增 <font color=”red”>Test.java</font>,代码如下所示,寥寥几行,全是后面那点货色:
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);
}
}
- 再次关上浏览器拜访 <font color=”blue”>http://localhost:9000</font>,已经的数据再现:
- 聪慧的您看了下面的 Test.java 代码,肯定会对欣宸投来鄙视的眼光,就这程度?请容我解释一下,这里只是演示如何加载和展现数据,所以写的过于简陋,您能够将此代码段放在罕用的 web 利用中,如 SpringBoot,这样就能按须要加载和查看了
- 解决了存储问题,咱们再来看看 web 端口如何调整,因为端口抵触,或者一些端口治理,都有调整端口的需要,而不能固定在 <font color=”blue”>9000</font>
对于图细化服务的 web 端口
- 图细化服务是通过浏览器拜访的,默认端口为 9000,如果您想扭转端口,例如改为 9001,该如何操作呢?
- 先看官网怎么说,如下图红框,地址:https://deeplearning4j.kondui…
- 听官网的,配置启动参数,操作如下图:
- 确保下图红框 2 中的菜单被选中:
- 在下图红框地位(VM options 地位)填入官网举荐的内容,将端口指定为 9001:
- 怕本人设置的参数有问题,我增加了下图红框中的两行代码,将参数打印进去:
- 再次运行 Test.java,如下图,红框 2 证实我依照官网倡议输出的参数是没有问题的,然而红框 1 显示服务还在监听 9000 端口:
- 去浏览器上试试,发现的确如此:9000 端口服务失常,9001 端口无法访问
- 这就郁闷了,我的操作有问题吗?若是有问题,<font color=”blue”>System.getProperty(“org.deeplearning4j.ui.port”)</font> 的输入是 <font color=”red”>9001</font> 又怎么解释?
- 还是去看下源码吧,很容易就查到了设置端口值的代码,在 <font color=”blue”>VertxUIServer</font> 类中,如下图红框所示,真像大白了!获取端口的代码是 <font color=”red”>System.getenv</font>,这是获取环境变量的办法,不能用后面那种形式去设置:
- 既然源码中是用 <font color=”blue”>System.getenv</font> 办法获取参数的,那咱们就依照环境变量的办法来输出吧,如下图所示,将之前的配置删除,再在红框 2 地位输出参数,留神参数的最后面不须要 <font color=”red”>-D</font>:
- 改好后,再起运行 Test.java,如下图,红框 1 显示 web 服务监听端口曾经变成了 9001,红框 2 中的值为 null,这也失常,因为最后的 system property 参数曾经删除了
- 浏览器拜访 <font color=”red”>http://localhost:9001</font> 试试,能够失常拜访了:
- 所以,最终通过批改环境变量,咱们胜利的批改了 web 端口,此刻再回忆一下,官网提到的 system property 和 <font color=”blue”>-Dorg.deeplearning4j.ui.port=9001</font> 是怎么回事呢,事实证明这样改是没用的 …
- 我感觉,应该是欣宸满腹经纶不理解真像,聪慧的您如果发现了问题起因,麻烦您在文章评论者指导一二,谢谢啦。
- 至此,图形化展现训练过程的实战就实现了,心愿本文能给您提供一些参考,帮您顺利搭建图形化环境,以更好的察看和调整训练参数、优化网络
你不孤独,欣宸原创一路相伴
- Java 系列
- Spring 系列
- Docker 系列
- kubernetes 系列
- 数据库 + 中间件系列
- DevOps 系列
欢送关注公众号:程序员欣宸
微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游 Java 世界 …
https://github.com/zq2599/blog_demos
正文完