python可视化记录训练过程

news2024/11/25 2:20:44

可视化训练曲线

    • wandb
      • 基本流程
      • 离线运行wandb
      • 保存最佳结果及模型
      • 界面
    • tensorboard
      • 基本流程
      • SummaryWriter 所提供的其他方法

wandb

基本流程

  1. 安装wandb

    pip install wandb
    
  2. 注册wandb账号
    然后在wandb官网注册一个账号,然后获取该账号的私钥。然后在命令行执行:

    wandb login
    

    然后根据提示输入私钥即可。

  3. 导入必要的库

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import wandb
    
  4. 初始化wandb
    在脚本开始部分,需要调用 wandb.init() 来初始化一个新的wandb运行,基础的调用:

    wandb.init(project="my_project", name="my_custom_run_name")
    

    可以通过name来自定义本次运行保存的子目录名称,project名称相同的运行结果会在Weights & Biases服务器自动被分在同一个project下,

  5. 记录变量
    在训练循环的每个epoch或每个batch后,使用 wandb.log 记录相应的loss或其他任何你想跟踪的metrics。简单的例子如下:

    for epoch in range(epochs):
        for batch in dataloader:
            # 进行你的模型训练和计算
            # ...
    
            # 假设在某个时刻,你得到了以下的loss和accuracy值
           	loss = ...
        	accuracy = ...
    		
    		# 通过dict记录多个变量
            wandb.log({
            	"loss": loss.item()"accuracy": accuracy
            })
    
  6. 结束
    在训练结束后,调用 wandb.finish() 来通知wandb你的运行已经结束,并将所有日志数据上传到wandb:

    wandb.finish()
    

离线运行wandb

如果服务器网络不佳,或者不想立即上传训练日志到Weights & Biases服务器时,可以使用W&B的离线模式。下面是如何使用W&B进行离线训练的步骤:

  1. 设置W&B为离线模式:
    在你的代码中,初始化W&B之前,设置环境变量或使用settings参数将W&B设置为离线模式:
    (1)使用环境变量:
    import os
    os.environ["WANDB_MODE"] = "dryrun"
    
    (2)使用settings参数:
    import wandb
    wandb.init(project="my_project", settings=wandb.Settings(mode="dryrun"))
    
    在"dryrun"模式下,所有的日志、模型检查点等都会保存在本地wandb目录下的一个新的子目录中,并不会上传到W&B的服务器。
  2. 上传训练结果
    当你准备好上传你的训练结果时(例如,当你再次有互联网连接时),你可以使用命令行工具wandb sync。进入到包含wandb目录的路径,然后执行:
    wandb sync path_to_run_directory
    
    其中path_to_run_directory是你的训练日志被保存的具体目录。在W&B(Weights & Biases)中,当你启动一个新的运行时,它会在本地的wandb目录下创建一个新的子目录来保存该运行的所有日志和相关文件。默认情况下,该子目录的名称是‘run-[DATE]_[TIME]’,例如‘run-20230818_123456’。

保存最佳结果及模型

  1. 使用W&B 的 summary
    如果你只想记录一个最佳的值,比如, best_accuracy,而不是其变化曲线。W&B 提供了一个summary对象,你可以用它来存储训练过程中的最佳结果。这些结果会在W&B dashboard的“Summary”部分显示。
    import wandb
    
    wandb.init(project="my_project")
    
    for epoch in range(epochs):
        # 训练和评估代码
        # ...
        
        # 假设当前 epoch 的准确度是 current_accuracy
        current_accuracy = ...
        
        # 更新最佳准确度
        if current_accuracy > wandb.summary.get("best_accuracy", 0.0):
            wandb.summary["best_accuracy"] = current_accuracy
    
    • wandb.summary.get("best_accuracy", 0.0):表示使用python字典的 get 方法从 wandb.summary 中尝试获取 best_accuracy 的值。如果 best_accuracy 存在,它将返回其值;如果不存在,它将返回默认值 0.0。
  2. 保存最佳模型:
    除了记录最佳准确度,wandb也可以用来保存达到最佳准确度的模型。这样,当你在W&B的web界面查看你的项目时,你不仅可以看到最佳准确度,还可以下载达到最佳准确度的模型。
    import torch
    import wandb
    
    wandb.init(project="my_project")
    
    best_accuracy = 0.0
    model = ...
    
    for epoch in range(epochs):
        # 训练和评估代码
        # ...
        
        # 假设当前 epoch 的准确度是 current_accuracy
        current_accuracy = ...
        
        if current_accuracy > best_accuracy:
            best_accuracy = current_accuracy
            torch.save(model.state_dict(), "best_model.pth")
            wandb.save("best_model.pth")
    
  3. 使用W&B 的Artifacts
    如果想要更全面地保存与最佳准确度对应的模型状态或其他相关信息,可以使用W&B的Artifacts功能:
    import wandb
    
    # 初始化W&B
    wandb.init(project="my_project")
    
    best_accuracy = 0.0
    
    # 假设的训练循环
    for epoch in range(epochs):
        for batch in dataloader:
            # 进行模型训练和计算
            # ...
    
            # 假设在某个时点你得到了这样的准确度
            current_accuracy = ...
    
            # 检查是否是新的最佳准确度
            if current_accuracy > best_accuracy:
                best_accuracy = current_accuracy
                
                # 保存与最佳准确度对应的模型
                torch.save(model.state_dict(), "best_model.pth")
                
                # 创建一个Artifact并保存模型
                artifact = wandb.Artifact(
                        type="model",
                        name="best_model",
                        metadata={"accuracy": best_accuracy})
                artifact.add_file("best_model.pth")
                
                # 上传Artifact
                wandb.log_artifact(artifact)
            
            # 使用wandb.log记录当前准确度
            wandb.log({"current_accuracy": current_accuracy})
    
    

界面

  1. 展示出project和其下的日志:
    在这里插入图片描述
  2. 对应project下的每一个日志会有一个对比
    在这里插入图片描述
  3. 对应的每个日志可以在Charts里看到记录变量的曲线
    在这里插入图片描述
  4. Overview里可以看到具体信息,包含环境信息,运行命令,所记录的超参数以及summary记录的最佳指标等
    在这里插入图片描述
    在这里插入图片描述

tensorboard

基本流程

  1. 安装 TensorBoard
    如果你还没有安装 TensorBoard,可以使用 pip 进行安装:

    pip install tensorboard
    
  2. 在代码中导入必要的库

    import torch
    from torch.utils.tensorboard import SummaryWriter
    
  3. 创建 SummaryWriter
    SummaryWriter 是与 TensorBoard 交互的主要接口。你需要创建一个 SummaryWriter 对象,指定日志目录:

    writer = SummaryWriter('./runs/experiment_name')
    
  4. 记录标量
    在训练循环中,可以使用 writer.add_scalar 方法记录你想要跟踪的标量(如损失和准确率):

    for epoch in range(num_epochs):
        # ... training code ...
        loss = ...
        accuracy = ...
        writer.add_scalar('Loss/train', loss, epoch)
        writer.add_scalar('Accuracy/train', accuracy, epoch)
    

    特别地,名称如果采用下列形式,则3个loss会被自动保存在同一个section,2个accuracy会被保存在同一个section :

    writer.add_scalar('loss/loss1', loss1, epoch)
    writer.add_scalar('loss/loss2', loss2, epoch)
    writer.add_scalar('loss/loss3', loss3, epoch)
    writer.add_scalar('Accuracy/train', accuracy1, epoch)
    writer.add_scalar('Accuracy/valid', accuracy1, epoch)
    
  5. 启动 TensorBoard
    另其一个命令行或终端,在命令行或终端中,运行以下命令:

    tensorboard --logdir=./runs/experiment_name
    
  6. 查看 TensorBoard
    运行上述命令之后,终端会给出一个网址,一般是http://localhost:6006/。打开浏览器并访问 http://localhost:6006/。你应该能够看到 TensorBoard 的界面,并在其中查看你记录的训练曲线。或者你可以自己指定端口号:

    tensorboard --logdir=./runs/experiment_name --port 8888
    

    则打开网站:http://localhost:8888/

  7. 关闭 SummaryWriter
    训练结束后,确保关闭 SummaryWriter 以释放资源:

    writer.close()
    

SummaryWriter 所提供的其他方法

  1. add_scalar(tag, scalar_value, global_step=None, walltime=None):
    • 用于记录单个标量值,如损失或准确率。
    • tag 是标量的名称。
    • scalar_value 是要记录的具体数值。
    • global_step 是当前的步骤或迭代次数。
  2. add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None):
    • 用于记录多个标量值。
    • main_tag 是主标签。
    • tag_scalar_dict 是一个字典,其中键是标签,值是对应的标量值。
  3. add_histogram(tag, values, global_step=None, bins=‘tensorflow’, walltime=None, max_bins=None):
    • 用于记录值的分布,如模型权重或激活的分布。
    • values 是一个张量,包含要记录的值。
  4. add_image(tag, img_tensor, global_step=None, walltime=None, dataformats=‘CHW’):
    • 用于记录图像。
    • img_tensor 是一个表示图像的张量。
  5. add_images(tag, img_tensor, global_step=None, walltime=None, dataformats=‘NCHW’):
    • 用于记录多个图像。
  6. add_figure(tag, figure, global_step=None, close=True, walltime=None):
    • 用于记录 matplotlib 图形。
  7. add_graph(model, input_to_model=None, verbose=False):
    • 用于记录模型的计算图。
    • model 是要记录的模型。
    • input_to_model 是一个输入到模型的张量,用于推断模型的结构。
  8. add_text(tag, text_string, global_step=None, walltime=None):
    • 用于记录文本。
  9. add_embedding(mat, metadata=None, label_img=None, global_step=None, tag=‘default’, metadata_header=None):
    • 用于记录和可视化嵌入。
    • mat 是一个包含嵌入向量的矩阵。
  10. add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None):
    • 用于记录 PR 曲线。
    • labels 和 predictions 分别是真实标签和预测的概率。
  11. add_mesh(tag, vertices, colors=None, faces=None, global_step=None, walltime=None):
    • 用于记录3D网格数据。
  12. add_hparams(hparam_dict=None, metric_dict=None):
    • 用于记录超参数和与之关联的指标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无涯教程-JavaScript - AND函数

描述 如果AND函数的所有参数都为TRUE,则返回TRUE;如果一个或多个参数为FALSE,则返回FALSE。 AND功能的一种常见用法是扩展执行逻辑测试的其他功能的用途。如,IF函数执行逻辑测试,如果测试判断为TRUE,则返回一个值,如果测试判断为FALSE,则返回另一个值。通过将AND函…

SkyWalking安装部署

一、概念 1、什么是 APM 系统? APM(Application Performance Management)即应用性能管理系统,是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用…

网络安全宣传周|这些网络安全知识赶紧get起来~

2023年9月11日至17日是第十个国家网络安全宣传周。今年的国家网络安全宣传周主题是“网络安全为人民,网络安全靠人民”。 网络安全是国家安全的重要组成部分,没有网络安全就没有国家安全,就没有经济社会稳定运行,广大人民群众利益…

工欲善其事,必先利其器,这5款利器推荐你

​ 工欲善其事,必先利其器。要想提升工作效率,除了提升自己的能力以外,好的工具也是必不可少的一环,今天给大家推荐5款办公必备的神器。 1.鼠标手势增强——MouseInc ​ MouseInc 是一款由知名的浏览器优化大神开发的系统全局鼠…

炒期权的资金门槛是多少 ?

期权是一种合约,买方向卖方支付一定费用后有权利在特定的时间,以特定的价格买入或卖出一定数量的特定资产,卖方需履行相应义务,期权开户支持线上和零门槛开头,下文介绍炒期权的资金门槛是多少 ?本文来自:期…

uniapp打包安卓后在安卓屏上实现开机自启动

实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…

uniapp抽取组件绑定事件中箭头函数含花括号无法解析

版本: "dcloudio/uni-ui": "^1.4.27", "vue": "> 2.6.14 < 2.7"... 箭头函数后含有花括号的时候, getData就拿不到val参数 , 解决办法就是去除花括号 // 错误代码: <SearchComp change"(val) > { getData({ val …

记LGSVL Map Annotation(3)利用map annotation生成一个十字路口的opendrive格式地图

参考&#xff1a;b站 1. 创建一个平面 为什么创建平面 2.选择HD map annotaion

ZTMap是如何在相关政策引导下让建筑更加智慧化的?

近几年随着智慧楼宇概念的深入&#xff0c;尤其是在“十四五规划”“新基建”“数字经济”等相关战略和政策的引导下&#xff0c;智慧楼宇也迎来了快速发展期&#xff0c;对推动智慧城市系统的建设越来越重要。那么究竟什么是智慧楼宇呢&#xff1f;智慧楼宇其实就是整合楼宇内…

RabbitMQ常见问题

一、RabbitMQ如何保证消息不丢失&#xff1f; 这是面试时最喜欢问的问题&#xff0c;其实这是个所有MQ的一个共性的问题&#xff0c;大致的解 决思路也是差不多的&#xff0c;但是针对不同的MQ产品会有不同的解决方案。而RabbitMQ 设计之处就是针对企业内部系统之间进行调用设…

实战演练 | Navicat 安全可靠的数据传输功能

数据库数据传输是指将数据库中的数据从一个数据库系统传送到另一个数据库系统的过程。数据传输在数据迁移、数据同步、备份与恢复、数据库整合和数据分发等场景中使用非常广泛。 Navicat 安全可靠的数据传输功能可以让用户方便快捷地实现从一个数据库或模式传输对象到另一个数…

vue 翻页选择导出

框架Vue2.15.14&#xff0c;后台是Aps.net core Api <el-table ref"multipleTable" :data"tableData" tooltip-effect"light" style"width: 100%;text-align: center;"height"400" show-harder selection-change"h…

Android Studio 报错问题记录

工具地址 由于之前手贱不知道点了一个什么东西更新&#xff0c;导致一个code1报错&#xff0c;后来又一通瞎比操作直接吧Android Studio弄得打不开模拟器了&#xff0c;所以我后面就全部卸载重新安装了一下&#xff0c;并把之前遇到的问题做下记录&#xff0c;可能并不适用于每…

朗思科技数字员工通过统信桌面操作系统兼容性互认认证

近日&#xff0c;朗思科技数字员工与统信桌面操作系统V20进行了兼容互认&#xff0c;针对上述产品的功能、兼容性方面&#xff0c;通过共同严格测试表明——朗思科技数字员工在统信桌面操作系统 V20上整体运行稳定&#xff0c;满足功能及兼容性测试要求。 北京朗思智能科技有限…

PostgreSQL 数据定义语言 DDL

文章目录 表创建主键约束非空唯一约束检查约束外键约束默认值约束 触发器表空间构建表空间 视图索引索引的基本概念索引的分类创建索引 物化视图 表创建 PostgreSQL表的构建语句与所有数据库都一样&#xff0c;结构如下&#xff0c;其核心在于构建表时&#xff0c;要指定上一些…

Composition API的优势

1.Options API存在的问题 传统的options api 中&#xff0c;新增或修改一个需求&#xff0c;就需要分别在data,methods,computed里面修改 2.Composition API的优势 我们可以在组织我们的代码&#xff0c;函数。让相关功能的代码更加有序的组织在一起。

openpnp - 设备电源抗干扰部件的选择

文章目录 openpnp - 设备电源抗干扰部件的选择概述END openpnp - 设备电源抗干扰部件的选择 概述 设备电源部分的干扰主要来自伺服和真空泵. 伺服是设备开机期间, 一直供电, 采用滤波器比较好. 型号为 CW4L2-10A-S(004)或者CW4-10A-S(004) CW4L2-10A-S(004)是二级滤波. CW4-1…

Spring的 webFlux 和 webMVC

看到一个测评文章&#xff0c;并发在300的时候webMVC 和 webFlux的处理能力不相上下&#xff0c; 当并发达到3000的时候, webFlux明显优于webMVC, 有图有真相&#xff0c; 我信了. webMVC 是 one-request-one thread 堵塞模式, flux是非阻塞模式&#xff0c; 是spring家族系列…

大神教你期权平仓操作技巧,期权交易规则一网打尽

期权交易主要是看涨开仓和看跌开仓&#xff0c;平仓就是盈亏或亏损平仓。期权的波动较快&#xff0c;所以开仓平仓也一定比较频繁。具体交易和期货的开仓和平仓都是一样的。期货是买涨、卖跌&#xff0c;期权是看涨、看跌。下文介绍期权如何平仓操作&#xff1f;本文来自&#…

系统架构设计师-数据库系统(1)

目录 一、数据库模式 1、集中式数据库 2、分布式数据库 二、数据库设计过程 1、E-R模型 2、概念结构设计 3、逻辑结构设计 三、关系代数 1、并交差 2、投影和选择 3、笛卡尔积 4、自然连接 一、数据库模式 1、集中式数据库 三级模式&#xff1a; &#xff08;1&#xff09;外…