新闻中心

使用pyecharts做自己的visualDL

2025-07-31
浏览次数:
返回列表
本文介绍用pyecharts构建类似visualDL的实时可视化工具,监控模型训练时的LOSS和ACC变化。先安装pyecharts,用paddle.vision的Cifar10数据集和mobilenet_v2模型,配置训练参数与优化器,定义折线图和仪表盘可视化函数,通过定期刷新本地HTML实现实时展示训练状态。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用pyecharts做自己的visualdl -

使用pyecharts做自己的visualDL

使用pyecharts,在本地训练的时候,可以实时刷新训练中的LOSS和ACC变化,做一个自己的visualDL

1. pyecharts引入

 概况

  • Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

 特性

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

参考:https://pyecharts.org/#/zh-cn/intro

In [1]
# 安装pyecharts! pip install -q pyecharts
   

*注

为了减小体积,新版的pyecharts已经不带地图包了,如果有地图服务需求的需要单独安装地图包

# 持久化安装地图包# ! mkdir /home/aistudio/maps# ! pip install echarts-countries-pypkg -t /home/aistudio/maps# ! pip install echarts-china-provinces-pypkg -t /home/aistudio/maps# ! pip install echarts-china-cities-pypkg -t /home/aistudio/maps# ! pip install echarts-china-counties-pypkg -t /home/aistudio/maps# ! pip install echarts-china-misc-pypkg -t /home/aistudio/maps# ! pip install echarts-cities-pypkg -t /home/aistudio/maps# import sys # sys.path.append('/home/aistudio/maps')
   

2. 模型训练准备

主要使用paddle.vision里面的分类模型和数据

In [2]
import numpy as npimport paddlefrom paddle.vision.datasets import Cifar10import paddle.vision.transforms as Tfrom paddle.io import DataLoaderfrom paddle.nn.functional import cross_entropyfrom paddle.metric import accuracyfrom paddle.vision.models import mobilenet_v2from paddle.optimizer import Adam
   

2.1 配置训练参数

数据集的图像较小,在32G的GPU环境下,可以使用大的batch_size。这里我们训练10轮,每轮都评估一次

In [3]
# 配置batch_size = 2048learning_rate = 2e-6epoch_num = 10eval_epoch = 1  # 多少轮评估一次
   

2.2 准备数据、模型以及优化器

  • 数据集为paddle.vision.datasets带的cifar10数据集

该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图

  • 模型使用paddle.vision.models带的mobilenet_v2模型

MobileNetV2 基于 MobileNetV1的基本概念构建,并使用在深度上可分离的卷积作为高效的构建块。此外,MobileNetV2 引入了两种新的架构特性:1)层之间的线性瓶颈层;2)瓶颈层之间的连接捷径

  • 优化器使用Adam优化器

Adam是一种自适应优化器,结合AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(梯度的均值)和二阶矩估计(梯度的未中心化的方差)进行综合考虑,计算出更新步长

WeWedding婚纱影楼小程序 WeWedding婚纱影楼小程序

婚纱影楼小程序提供了一个连接用户与影楼的平台,相当于影楼在微信的官网。它能帮助影楼展示拍摄实力,记录访客数据,宣传优惠活动。使用频率高,方便传播,是影楼在微信端宣传营销的得力助手。功能特点:样片页是影楼展示优秀摄影样片提供给用户欣赏并且吸引客户的。套系页是影楼根据市场需求推出的不同套餐,用户可以按照自己的喜好预定套系。个人中心可以查看用户预约的拍摄计划,也可以获取到影楼的联系方式。

WeWedding婚纱影楼小程序 0 查看详情 WeWedding婚纱影楼小程序
In [4]
# 数据normalize = T.ToTensor()  # 据大佬发现,totensor带有简单的normalize的功能train_data = Cifar10(mode='train', transform=normalize)
eval_data = Cifar10(mode='test', transform=normalize)
train_reader = DataLoader(train_data, batch_size=batch_size, shuffle=True, drop_last=True)
eval_reader = DataLoader(eval_data, batch_size=batch_size, shuffle=True, drop_last=True)# 模型model = mobilenet_v2(pretrained=True, num_classes=10)# 优化器opt = Adam(learning_rate=learning_rate, parameters=model.parameters())
       
Cache file /home/aistudio/.cache/paddle/dataset/cifar/cifar-10-python.tar.gz not found, downloading https://dataset.bj.bcebos.com/cifar/cifar-10-python.tar.gz 
Begin to download

Download finished
100%|██████████| 20795/20795 [00:00<00:00, 56851.54it/s]
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1263: UserWarning: Skip loading for classifier.1.weight. classifier.1.weight receives a shape [1280, 1000], but the expected shape is [1280, 10].
  warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1263: UserWarning: Skip loading for classifier.1.bias. classifier.1.bias receives a shape [1000], but the expected shape is [10].
  warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
       

3. 可视化准备

具体pyecharts的使用可以参考官方文档,这里使用了折线图表示训练时的LOSS和ACC,用仪表盘表示评估的ACC

使用pyecharts做自己的visualDL -        

使用pyecharts做自己的visualDL -        

In [5]
from pyecharts import options as optsfrom pyecharts.charts import Line, Gauge  # 折线图和仪表图
   

3.1 可视化函数定义

将画图封装为函数

In [6]
# 训练Loss和Accdef show_train_laa(iters, loss, acc):
    c = (
        Line(init_opts=opts.InitOpts(width="512px", height="512px"))
        .add_xaxis(xaxis_data=list(range(iters)))
        .add_yaxis(
            series_name="TRAIN_LOSS",
            y_axis=list(loss),
            label_opts=opts.LabelOpts(is_show=False),
            yaxis_index=0,
            color="#d14a61"
        )
        .add_yaxis(
            series_name="TRAIN_ACC",
            y_axis=list(acc),
            label_opts=opts.LabelOpts(is_show=False),
            yaxis_index=1,
            color="#000000"
        )
        .extend_axis(
            yaxis=opts.AxisOpts(
                name="ACC",
                type_="value",
                position="right",
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color="#d14a61")
                ),
            )
        )
        .extend_axis(
            yaxis=opts.AxisOpts(
                name="LOSS",
                type_="value",
                position="left",
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color="#000000")
                ),
            )
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="TRAIN_STATE"),
            tooltip_opts=opts.TooltipOpts(trigger="axis"),
            xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
        )
    )    return c# 评估Accdef show_eval_acc(eval_acc):
    c = (
        Gauge(init_opts=opts.InitOpts(width="512px", height="512px"))
        .add("", [("", (100 * eval_acc))])
        .set_global_opts(title_opts=opts.TitleOpts(title="EVAL_ACC"))
    )    return c
   

3.2 效果测试

使用虚构的数据进行测试显示,这里需要自己运行之后才能看到。还能交互哦~

In [7]
iters = 9loss = [45, 14, 7.2, 5.4, 2.2, 1, 0.99, 0.95, 0.75]
acc = [0.2, 0.41, 0.61, 0.66, 0.57, 0.68, 0.69, 0.71, 0.55]
show_train_laa(iters, loss, acc).render_notebook()  # 需要自己运行才能看到
       
<pyecharts.render.display.HTML at 0x7fb4c464e250>
                In [8]
eval_acc = 0.782show_eval_acc(eval_acc).render_notebook()  # render_notebook可以在notebook环境显示
       
<pyecharts.render.display.HTML at 0x7fb4dcf69490>
               

3.3 刷新html

在notebook环境好像不能实时刷新显示,于是只能在本地每次保存新的html,然后每隔一段时间刷新html,以达到实时显示的效果

In [9]
# 刷新htmldef f5_html(html_path):
    with open(html_path, 'a+') as f:
        refesh = '<meta http-equiv="Refresh" content="3";/>'  # 每3秒钟刷新一次
        f.write(refesh)
   

4. 模型训练

简单训练模型,没有调整训练参数,主要是为了查看训练过程

In [ ]
losses = []
acces = []for e in range(epoch_num):    for i, (image, label) in enumerate(train_reader()):
        out = model(image)
        loss = cross_entropy(out, label)
        *g_loss = paddle.mean(loss)
        lab = paddle.reshape(label, (-1, 1))  # accuracy需要label是[*, 1]大小的
        acc = accuracy(out, lab)
        *g_loss.backward()
        opt.minimize(*g_loss)
        model.clear_gradients()
        losses.append(float(loss.numpy()[0]))
        acces.append(float(acc.numpy()[0]))
        show_train_laa(len(losses), losses, acces).render('train.html')  # 存入html
        f5_html('train.html')  # 刷新html
        # print("[train] Epoch {} batch {}: loss = {} acc = {}".format(e, i, np.mean(loss.numpy()), acc.numpy()[0]))
        if e % eval_epoch == 0 and i == ((50000 // batch_size) - 1):
            eval_accs = []            for ee, (eimage, elabel) in enumerate(eval_reader()):
                eout = model(eimage)
                elab = paddle.reshape(elabel, (-1, 1))
                eacc = accuracy(eout, elab).numpy()[0]
                eval_accs.append(float(eacc))                # print("[Eval] batch {}: acc = {}".format(ee, eacc))
            eval_acc = np.mean(eval_accs)
            show_eval_acc(eval_acc).render('eval.html')
            f5_html('eval.html')
   

5. 本地结果

因为在notebook中不知道如何实时刷新数据,所以在本地3秒刷新一次html,实时显示训练过程(gif加速1000倍)

使用pyecharts做自己的visualDL -        

为了在1M一下,有点花,截图如下

使用pyecharts做自己的visualDL -        

以上就是使用pyecharts做自己的visualDL的详细内容,更多请关注其它相关文章!


# 工具  # python  # 酒吧营销宣传推广语术语  # 招远智能营销网站优化  # seo怎么合理布局  # 网站seo到9火星软件  # 大连网站seo找行者SEO  # 中材建设网站  # 阳曲关键词排名计划方案  # 短视频seo分析  # 东莞网络营销推广与策划  # 服装师营销推广文案图片  # 文档  # 是一个  # 大佬  # 折线图  # 链式  # 两种  # 官网  # 一言  # 中文网  # 自己的  # play.ht  # type  # udio  # 排列  # c#  # 百度  # ai 


相关栏目: 【 行业资讯67740 】 【 技术百科0 】 【 网络运营39195


相关推荐: 三星 nfc什么功能是什么意思  电瓶车屏幕上显示power是什么意思  如何使用命令行界面  单片机怎么做组合  win10windows资源管理器在哪里打开  得物怎样不扣手续费 如何通过得物不支付手续费  按键精灵datediff函数怎么用 如何使用按键精灵中的Datediff函数教程  油烟机上的power是什么意思  苹果16改进了哪些  怎么打印数组j*a  固态硬盘如何判断大小  a股等权平均市盈率是什么意思  j*a数组元素怎么用  5G类似微信的聊天软件有哪些  苹果16适合哪些机升级  手机如何运行ping命令  冰柜power是什么意思这个黄灯怎么不亮  access中如何使用常用宏命令  苹果16将会带来哪些升级  苹果16系统有哪些问题  光猫power和pon常亮是什么意思  如何显示固态硬盘  苹果16有哪些bug  哪个品牌有折叠屏手机卖  路由器上的power按钮是什么意思  电动车仪表盘上的power是什么意思  春运抢票如何抢连坐的票  汽车上power是什么意思  power在充电器上是什么意思  typescript的语法格式是什么  33000日元等于多少人民币  ai文件里无法找到链接文件要怎么解决步骤  电动车power灯亮红灯是什么意思  2026年将会大爆发的15个新科技  如何用dos命令启动u盘  春运车票啥时候可以抢票  春运哪天抢票最好  怎么自学typescript  春运抢票如何快速抢到票  夸克转存中是什么意思  如何找出命令行  react怎么用typescript  高市盈率是什么意思  电焊机power灯亮是什么意思  手机拍显示屏有条纹怎么去除  一帧是多少秒  如何查看bash内置的命令  怎么确定手机是5g  市盈率高是什么意思  typescript接口有什么用 

搜索