技术背景

在深度学习或者其他参数优化领域中,对于结果的可视化以及中间网络结构的可视化,也是一个非常重要的工作。一个好的可视化工具,可以更加直观的展示计算结果,可以帮助人们更快的发掘大量的数据中最有用的信息。而一般的深度学习框架或者是一些开源软件会支持这种可视化工具的接口。常见的可视化工具有TensorBoard和MindSpore的MindInsight,本文主要介绍MindInsight的安装与基本使用方法。

环境准备

MindInsight工具依赖于npm和nodejs,这里我们用Ubuntu的包管理工具apt来直接安装,首先需要更新apt的源和软件:

(base) dechin@ubuntu2004:~/projects/gitee$ sudo apt update
获取:1 file:/var/nccl-repo-2.7.6-ga-cuda11.0 InRelease
忽略:1 file:/var/nccl-repo-2.7.6-ga-cuda11.0 InRelease
获取:2 file:/var/nccl-repo-2.7.6-ga-cuda11.0 Release [574 B]
获取:2 file:/var/nccl-repo-2.7.6-ga-cuda11.0 Release [574 B]
命中:3 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease
命中:4 https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64 InRelease
命中:5 https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 InRelease
命中:6 http://dl.google.com/linux/chrome/deb stable InRelease
命中:8 http://repo.huaweicloud.com/ubuntu focal InRelease
命中:10 http://repo.huaweicloud.com/ubuntu focal-updates InRelease
命中:11 http://repo.huaweicloud.com/ubuntu focal-backports InRelease
命中:12 http://repo.huaweicloud.com/ubuntu focal-security InRelease
获取:13 https://dl.cloudsmith.io/public/asbru-cm/release/deb/ubuntu focal InRelease [4,960 B]
忽略:9 https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease
命中:14 https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu1804/x86_64 Release
已下载 4,960 B,耗时 2秒 (2,625 B/s)
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有 13 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。

然后就可以直接用apt install来安装,这里如果加上-y的选项,在软件安装的过程中就不需要再手动的输入Y去确认是否要继续安装等:

(base) dechin@ubuntu2004:~/projects/gitee$ sudo apt install -y nodejs npm
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
linux-headers-5.8.0-50-generic linux-hwe-5.8-headers-5.8.0-50
linux-image-5.8.0-50-generic linux-modules-5.8.0-50-generic
linux-modules-extra-5.8.0-50-generic
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
...

安装完成后可以用查看版本号的指令验证两者是否被安装成功:

(base) dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ nodejs --version
v10.19.0
(base) dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ npm --version
6.14.4

源码安装MindInsight

首先从gitee仓库下载源代码:

git clone https://gitee.com/mindspore/mindinsight.git

然后进入目录,使用pip递归的安装requirements中所要求的依赖包:

(base) dechin@ubuntu2004:~/projects/gitee$ cd mindinsight/
(base) dechin@ubuntu2004:~/projects/gitee/mindinsight$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: Click>=7.0 in /home/dechin/.local/lib/python3.8/site-packages (from -r requirements.txt (line 1)) (8.0.1)
Requirement already satisfied: Flask>=1.1.1 in /home/dechin/anaconda3/lib/python3.8/site-packages (from -r requirements.txt (line 2)) (1.1.2)
...
Successfully installed Flask-Cors-3.0.10 google-pasta-0.2.0 grpcio-1.36.0 gunicorn-20.1.0 marshmallow-3.12.1 treelib-1.6.1

最后在主目录下使用python setup.py install的方式来安装这个python库:

(base) dechin@ubuntu2004:~/projects/gitee/mindinsight$ python3 setup.py install
running install
running build
running build_py
creating build/lib/mindinsight
copying mindinsight/__main__.py -> build/lib/mindinsight
copying mindinsight/__init__.py -> build/lib/mindinsight
copying mindinsight/_version.py -> build/lib/mindinsight
running egg_info
building ui ... > core-js@2.6.12 postinstall /home/dechin/projects/gitee/mindinsight/mindinsight/ui/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

基本使用与案例演示

MindInsight与我们所常用的python库有所不同,MindInsight更像是一种微服务,形式上与jupyter notebook有些类似。在使用前需要用mindinsight start来启动服务,使用完成后,再使用mindinsight stop来关闭服务:

(base) dechin@ubuntu2004:~/projects/gitee/mindinsight$ mindinsight start
Workspace: /home/dechin/mindinsight
Summary base dir: /home/dechin/projects/gitee/mindinsight
Web address: http://127.0.0.1:8080
service start state: success
(base) dechin@ubuntu2004:~/projects/gitee/mindinsight$ mindinsight stop
Stop mindinsight service successfully

这里我们来看一个案例,使用的案例是之前一篇博客中所用到的用线性神经网络拟合非线性函数的python代码:

# test_nonlinear.py

from mindspore import context
context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
import numpy as np
from mindspore import dataset as ds
from mindspore import nn, Tensor, Model
import time
from mindspore.train.callback import Callback, LossMonitor, SummaryCollector def get_data(num, a=2.0, b=3.0):
for _ in range(num):
x = np.random.uniform(-1.0, 1.0)
noise = np.random.normal(0, 0.03)
z = a * x ** 2 + b + noise
# 返回数据的时候就返回数据的平方
yield np.array([x**2]).astype(np.float32), np.array([z]).astype(np.float32) def create_dataset(num_data, batch_size=16, repeat_size=1):
input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['x','z'])
input_data = input_data.batch(batch_size)
input_data = input_data.repeat(repeat_size)
return input_data if __name__ == '__main__':
data_number = 1600 # 一共产生1600组数据
batch_number = 16 # 分为16组分别进行优化
repeat_number = 2 # 重复2次,可以取到更低的损失函数值 ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)
dict_datasets = next(ds_train.create_dict_iterator()) class LinearNet(nn.Cell):
def __init__(self):
super(LinearNet, self).__init__()
self.fc = nn.Dense(1, 1, 0.02, 0.02) def construct(self, x):
x = self.fc(x)
return x net = LinearNet()
model_params = net.trainable_params()
print ('Param Shape is: {}'.format(len(model_params)))
for net_param in net.trainable_params():
print(net_param, net_param.asnumpy())
net_loss = nn.loss.MSELoss() # 设定优化算法,常用的是Momentum和ADAM
optim = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9)
model = Model(net, net_loss, optim) epoch = 1
# 设定每8个batch训练完成后就播报一次,这里一共播报25次
summary_collector = SummaryCollector(summary_dir='./summary_dir')
model.train(epoch, ds_train, callbacks=[LossMonitor(8), summary_collector], dataset_sink_mode=False) for net_param in net.trainable_params():
print(net_param, net_param.asnumpy())

因为要使用MindInsight来展示结果,我们所需要执行的更改,只需要增加一个SummaryCollector的callback即可。执行上述python代码之后,可以看到在summary_dir目录下生成了两个文件:

dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ ll summary_dir/
总用量 24
drwxrwxr-x 2 dechin dechin 4096 7月 6 10:48 ./
drwxrwxr-x 7 dechin dechin 4096 7月 6 10:47 ../
-r-------- 1 dechin dechin 319 7月 6 10:48 events.out.events.summary.1625539702.0.ubuntu2004_lineage
-r-------- 1 dechin dechin 10064 7月 6 10:48 events.out.events.summary.1625539702.0.ubuntu2004_MS

最后在浏览器中输入http://127.0.0.1:8080即可打开训练数据的可视化面板:



包含有中间训练的Loss Function趋势:



还有参数配置详情等:

总结概要

可视化可以说在所有的研究领域中都是要仔细斟酌的问题,一个好的可视化工具不仅可以为工作的开展带来极大的便捷,在一些特殊的场景下还可以辅助人们进行一些重要的决策。比如在物理学领域中,最开始寻找相变点的技巧其实也是依赖于实验数据的可视化来实现的。而在深度学习领域,可视化模型、可视化训练过程、可视化参数以及可视化的总结,可以让我们迅速的得到模型好坏的结论,这一点我们在本文中通过研究MindInsight的一些安装与使用技巧来进行实现。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/msinsight.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

参考链接

  1. https://www.cnblogs.com/dechinphy/p/nonlinear.html

MindInsight:一款基于MindSpore框架的训练可视化插件的更多相关文章

  1. 基于MIndSpore框架的道路场景语义分割方法研究

    基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...

  2. 分享一款基于aui框架的图文发布界面

    本文出自APICloud官方论坛, 感谢论坛版主 川哥哥 的分享. 分享一款基于aui框架的图文发布界面,可以添加多张图可以删除,类似qq空间发布说说,没做服务器后端,只演示前端操作.需要用到UIMe ...

  3. SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器

    SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...

  4. rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台

    rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...

  5. 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

    概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...

  6. 推荐20款基于 jQuery & CSS 的文本效果插件

    jQuery 和 CSS 可以说是设计和开发行业的一次革命.这一切如此简单,快捷的一站式服务.jQuery 允许你在你的网页中添加一些真正令人惊叹的东西而不用付出很大的努力,要感谢那些优秀的 jQue ...

  7. 一款基于jQuery带事件记录的日历插件

    之前我们也已经分享过不少jQuery日历插件,有些应用了CSS3的特性,外观就特别漂亮.今天要分享的这款jQuery日历插件不仅有着绚丽的外观,而且带有日期事件记录功能,点击日期即可展开事件记录窗口, ...

  8. 一款基于bootstrap的文件上传插件,现在很多手机webapp都在用

    官网:http://plugins.krajee.com/file-input

  9. 基于World Wind的数据可视化插件

    基于开源数据可视化类库(MSChart.VTK.D3)实现的组件样例,并基于World Wind实现调用上述组件的功能插件. GitHub下载地址:https://github.com/hujiuli ...

随机推荐

  1. STM32关于多线程运行的疑问

    我有一个疑问,如果 STM32在操作系统环境下 能够一个线程串口中断接收数据 另一个线程 继续进行其他的操作

  2. element-ui 的el-select如何不显示value,显示value对应的label值

    有时根据需要,我们根据v-model的值绑定option, 想要的效果: 实际的效果: 原因: value的格式存在问题,数据库读取到的数据不一定为number类型,需要手动转换. 第一种 <t ...

  3. 针对spring mvc的controller内存马-学习和实验

    1 基础 实际上java内存马的注入已经有很多方式了,这里在学习中动手研究并写了一款spring mvc应用的内存马.一般来说实现无文件落地的java内存马注入,通常是利用反序列化漏洞,所以动手写了一 ...

  4. MongoDB(7)- 文档插入操作

    插入方法 db.collection.insertOne() 插入单条文档到集合中 db.collection.insertMany() 插入多条文档到集合中 db.collection.insert ...

  5. [LeetCode] 231. 2 的幂

    位运算 231. 2 的幂 ``` class Solution { public boolean isPowerOfTwo(int n) { int cnt = 0; while (n>0) ...

  6. Mask-RCNN技术解析

    Mask-RCNN技术解析 MaskR-CNN 论文链接:https://arxiv.org/pdf/1703.06870.pdf 代码链接:https://github.com/CharlesSha ...

  7. NVIDIA GPUs上深度学习推荐模型的优化

    NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...

  8. the rust book 的简单入门笔记

    rust learning day 1 (2021/05/27) 学了常量,变量,数据类型,控制流,所有权 char 的宽度是4字节,一个 unicode 的宽度 控制流条件都不要括号 rust 中的 ...

  9. SpringAOP 原理解析

    什么是AOP? 1: 传统的OOP编程他的代码逻辑是一种自上向下, 而在这些自上而下的过程中会产生一些横切性的问题,比如说:日志信息,权限校验认证,事务等, 2: 这些横切性问题,往往与我们的主业务逻 ...

  10. 数据结构-几种Tree

    1.二叉查找树 或 二叉排序树 (BST) 性质:左子树的键值小于根的键值,右子树的键值大于根的键值. 2.平衡二叉树(AVL Tree) 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且 ...