可视化
有两种方法可以在SKIL中可视化数据。可视化对于解释结果和理解其他复杂数组很有用,并且通常需要通过T-SNE或UMAP等算法实现降维。
![](https://img.haomeiwen.com/i14495907/c61dd360c14264d2.png)
![](https://img.haomeiwen.com/i14495907/d2b5aac7d87aaabf.gif)
训练可视化
使用Deeplarming4J用户界面
如果你正在使用deeplearning4j,则可以在训练模型时可视化统计数据。SKIL预先打包了一个ui服务器,该服务器将通过将ui标志传递到skil start脚本来自动启动:
#如果没有设置SKIL_HOME和JAVA_HOME变量,请取消对以下行的注释
# export SKIL_HOME=/opt/skil
# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
# 首先进行授权
$SKIL_HOME/sbin/skil login --userId admin --password admin # 你可能有不同的用户名和密码,请相应地替换它们。
# 启动
$SKIL_HOME/sbin/skil ui
![](https://img.haomeiwen.com/i14495907/f2a2320aa9e369ed.gif)
对于docker,你需要转发端口9002以访问UI。
# 从Docker启动,确保你映射了端口9002
docker run --rm -it -p 9008:9008 -p 8080:8080 -p 9002:9002 skymindops/skil-ce bash /start-skil.sh
![](https://img.haomeiwen.com/i14495907/ae5fa6f39af72ddc.gif)
稍后,你可以在笔记本中添加一个%sh单元,专门启动UI服务器:
%sh
#如果没有设置SKIL_HOME和JAVA_HOME变量,请取消对以下行的注释
# export SKIL_HOME=/opt/skil
# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
# 首先进行授权
$SKIL_HOME/sbin/skil login --userId admin --password admin # 你可能有不同的用户名和密码,请相应地替换它们。
# 启动
$SKIL_HOME/sbin/skil ui
![](https://img.haomeiwen.com/i14495907/b7d8cb6f508b76c1.gif)
skil ui命令的默认参数及其详细信息如下:
| 参数 | 默认值 | 详情 |
| uiPort | 9002 | 用于用户界面服务器的端口 |
| enableRemote | True | 是否启用远程。它控制是否允许远程连接。 |
上面的命令$SKIL_HOME
/sbin/skil ui将在端口9002启动一个用户界面服务器,默认情况下允许远程连接。你可以进一步提供--uiPort
和--enableMemote参数,以在其他端口启动ui服务器,或者如果你想控制到该服务器的远程连接。
$SKIL_HOME/sbin/skil ui --uiPort 9010 --enableRemote False # 在端口9010启动UI服务器,禁用远程连接
![](https://img.haomeiwen.com/i14495907/585c43e4a82d45c9.gif)
可视化DL4J网络
你需要将StatsListener
路由到UI端口(默认9002)。你可以使用在skil中创建“实验”时创建的默认笔记本来查看DL4J UI的演示,并在第4段中取消对以下行的注释。
//val remoteUIRouter = new RemoteUIStatsStorageRouter("http://localhost:9002")
//model.setListeners(new StatsListener(remoteUIRouter))
![](https://img.haomeiwen.com/i14495907/53c15338e8a2a84e.gif)
在取消对上述行的注释后,运行笔记本的前四段,然后在UI端口上可视化网络(此处,默认情况下,它设置为笔记本中的端口9002),这看起来类似于下面的图像。
![](https://img.haomeiwen.com/i14495907/8fd5247a6dbfc0f0.png)
![](https://img.haomeiwen.com/i14495907/82f970ceb02f8253.gif)
在DL4J UI中可视化模型。
有关更多信息和用法,请参阅Deeplarning4j UI文档。
Tensorboard中TensorFlow模型的可视化
SKIL预先打包了TensorBoard,允许你可视化TensorFlow模型的训练。在笔记本中进行训练时,你可以以标准方式使用Tensorboard:
# bare metal installation
tensorboard --logdir=path/to/log-directory
# when using Docker, manually start a TensorBoard instance
docker exec -it skil_container /bin/bash
tensorboard --logdir=path/to/log-directory
![](https://img.haomeiwen.com/i14495907/19575b44d63064bb.gif)
有关完整用法和示例,请参阅Tensorboard文档。
解释器功能
由于笔记本由ApacheZeppelin提供,许多内置可视化功能可用于结构化和非结构化数据。这是一个提供演示的可视化效果的示例笔记本。
使用SQL可以实现最简单的可视化。如果在笔记本中创建一个%sql单元,并对Spark RDD或任何其他缓存数据执行SQL查询,则可以很容易地以原始表格格式查看输出。
%sql
select numPositions, count(1) value
from stats
where numPositions < 65
group by numPositions
order by numPositions
![](https://img.haomeiwen.com/i14495907/6a2f80bc5963d67c.gif)
![](https://img.haomeiwen.com/i14495907/a810a86db7a04b70.png)
![](https://img.haomeiwen.com/i14495907/ba8257c0b878ad89.gif)
如果你喜欢手动使用内置可视化功能,还可以通过使输出以%table 开头
并用\t 分隔每行数据来打印表。
%spark
println("%table\nx\ty")
(1 to 340).map(i => i.toDouble / 50).map(x => (x, Math.sin(x))).foreach{case (x,y) => println(x + "\t" + y)}
![](https://img.haomeiwen.com/i14495907/7430f2d6a3ab5c3c.gif)
![](https://img.haomeiwen.com/i14495907/4e871ad51df3862c.png)
![](https://img.haomeiwen.com/i14495907/f2966d888e0c4e52.gif)
数据摘要
除了Zeppelin支持的内置功能外,SKIL还允许你对输入数据进行DataVec分析,并计算数据集的统计信息。你可以以内联方式呈现结果,也可以查看端口9508。如果使用docker,请记住在运行你的SKIL容器之前添加-p 9508:9508。
%spark
import org.datavec.spark.transform.AnalyzeSpark
import org.datavec.api.transform.ui.HtmlAnalysis
import java.io.File
val dataAnalysis = AnalyzeSpark.analyze(tp.getFinalSchema(), processedData, 10)
// 提交到文件
HtmlAnalysis.createHtmlAnalysisFile(dataAnalysis, new File("/opt/skil/plugins/files/sf-analysis.html"))
// 提交内联
print("%html <iframe src=\"http://localhost:9508/files/sf-analysis.html\"></iframe>")
![](https://img.haomeiwen.com/i14495907/5f180938869b1a46.gif)
结果将像一个常规的HTML页面,其中包含列和数据集统计信息。
![](https://img.haomeiwen.com/i14495907/36f8aa820c58fffb.png)
![](https://img.haomeiwen.com/i14495907/226b86b71c4f7058.gif)
网友评论