赞
踩
注意:如果在你的电脑上想要使用MindInsight光pip install MindInsight是不行的,还要改一个host文件里面的服务端口号改成你电脑的,具体操作流程我忘了,安装教程参考:mindinsight: A visual dashboard for model tuning. (gitee.com)
其他框架比如pytorch可以迁移到minspore通过MindConverter
根据TensorFlow pb/ONNX模型文件生成Mindspore模型定义脚本以及权重文件。
用户只需要传入四个参数,命令示例:
模型之间前端语言的差异是巨大的,但是计算图都是相似的,所以使用模型迁移,而迁移使用的中间转换方式是ONNX。(奥尼克斯)
ONNX定义了开放式模型交互的一种协议,通过ONNX可以统一不同深度学习框架间模型表达,其中有几个关键的概念:
(1)opset:算子集;graph:存储模型的计算图;
用在推理阶段比较多,因为导出ONNX模型时训练阶段算子会丢失(比如,dropout),需要转换后用户手动补回;推荐使用opset11+保存ONNX模型,若ONNX模型版本过低可能导致MindConverter转换失败;MindConverter暂不支持包含控制流节点的模型。
MindSpore调试器是为图(Graph)模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。具体操作流程:
我们上一节不是说过,图模式进行训练过程高效的原因是他的计算图是固定下来的,也就是说用户无法从Python层获取计算图中间节点的结果,使得训练调试变得困难。使用MindSpore调试器就饿可以:
(1)在MindInsight调试器界面结合计算图,查看图节点的输出结果;
(2)设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;
(3) 查看权重参数的变化情况。
红色线的那两个端口号要保持一致。
只能说功能太丰富了。
这视频把我都看晕了,有时间我自己试试吧。
给我整懵逼了,为啥不能直接在for循环里把结果存到数组里然后画出来,有什么区别吗整这个东西。
还是有点用的,能分析每个算子耗能分析哈哈哈
这里要说明一下,训练可视化有两种方法,一种是调用下买你的这些Summary来记录数据,最后使用MindInsight画出来
第二种方法就是自己写回调函数Cellback,可以参考这篇文章我觉得讲的非常好华为云Mindspore实现鸢尾花分类作业_岭南香雪的博客-CSDN博客
一般来说回调函数的代码:
- from mindspore.train.callback import Callback
-
- # Callback function(在原有基础上添加收集了loss和accuracy随epoch的变化数据)
- class StepLossAccInfo(Callback):
- def __init__(self, model, eval_dataset, steps_loss, steps_eval, epoch_loss, epoch_eval): #通过init函数定义self的变量
- self.model = model
- self.eval_dataset = eval_dataset
- self.steps_loss = steps_loss
- self.steps_eval = steps_eval
- self.epoch_loss = epoch_loss
- self.epoch_eval = epoch_eval
-
- def step_end(self, run_context):
- cb_params = run_context.original_args() #Mindspore获取参数的方法
- cur_epoch = cb_params.cur_epoch_num #获取当前训练周期epoch
- cur_step = (cur_epoch - 1) * 1 + cb_params.cur_step_num #计算当前训练步数step
- # 每经过一步(step),添加对应的loss和accuracy
- self.steps_loss["loss_value"].append(str(cb_params.net_outputs))
- self.steps_loss["step"].append(str(cur_step))
- acc = self.model.eval(self.eval_dataset, dataset_sink_mode=False)
- self.steps_eval["step"].append(cur_step)
- self.steps_eval["acc"].append(acc['acc'])
- # 在本代码中,每个epoch包含4个steps,下面这一段的意思即是,每经过4个steps(1个epoch),添加对应的loss和accuracy
- if cur_step % 3 == 0:
- self.epoch_loss["loss_value"].append(str(cb_params.net_outputs))
- self.epoch_loss["epoch"].append(str(cur_epoch))
- acc = self.model.eval(self.eval_dataset, dataset_sink_mode=False)
- self.epoch_eval["epoch"].append(cur_epoch)
- self.epoch_eval["acc"].append(acc['acc'])
定义好回调函数后,获得需要保存的参数(训练损失、测试准确率)之后,开始训练步骤,将回调函数带入train方法里面
- steps_loss = {"step": [], "loss_value": []}
- steps_eval = {"step": [], "acc": []}
- epoch_loss = {"epoch": [], "loss_value": []}
- epoch_eval = {"epoch": [], "acc": []}
- model = ms.train.Model(net, loss, opt, metrics={'acc', 'loss'})
- # collect the steps, epoch, loss and accuracy information
- step_loss_acc_info = StepLossAccInfo(model, ds_test, steps_loss, steps_eval, epoch_loss, epoch_eval)
- model.train(200, ds_train, callbacks=[LossMonitor(per_print_times=ds_train.get_dataset_size()), step_loss_acc_info], dataset_sink_mode=False)
- metrics = model.eval(ds_test)
- print(metrics)
可视化出来:
- #损失值随训练每一步(step)的变化曲线
- steps = steps_loss["step"]
- loss_value = steps_loss["loss_value"]
- steps = list(map(int, steps))
- loss_value = list(map(float, loss_value))
- plt.plot(steps, loss_value)
- plt.xlabel("Steps")
- plt.ylabel("Loss_value")
- plt.title("Change chart of model loss value")
- plt.show()
-
- #损失值随训练周期数epoch的变化曲线
- epoch = epoch_loss["epoch"]
- loss_value = epoch_loss["loss_value"]
- epoch = list(map(int, epoch))
- loss_value = list(map(float, loss_value))
- plt.plot(epoch, loss_value)
- plt.xlabel("Epochs")
- plt.ylabel("Loss_value")
- plt.title("Change chart of model loss value")
- plt.show()
MindSpore模型快速调优攻略-昇腾社区 (hiascend.com)
按照这个步骤来就差不多,先到自己的个人主页获得个人密钥:
搜索OBS,并且创建OPS桶,可以往里面传入一些数据,预训练的模型等等:
MindSpore IDE插件,通过插件还能访问MindInight
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。