言尽于此,完结
无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。
- 第一,设计模式能让专业人之间交流方便,如下:
程序员A:这里我用了XXX设计模式
程序员B:那我大致了解你程序的设计思路了
- 第二,易维护
项目经理:今天客户有这样一个需求…
程序员:明白了,这里我使用了XXX设计模式,所以改起来很快
- 第三,设计模式是编程经验的总结
程序员A:B,你怎么想到要这样去构建你的代码
程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题
- 第四,学习设计模式并不是必须的
程序员A:B,你这段代码使用的是XXX设计模式对吗?
程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的
从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!
搜集费时费力,能看到此处的都是真爱!
org.deeplearning4j
deeplearning4j-ui
- 如果您在用的是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:
总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
只会留给那些有准备的人!
[外链图片转存中…(img-xPMJODGn-1715625587882)]