30分钟吃掉wandb可视化自动调参

Wandb:深度神经网络可视化工具介绍及本地部署方式 Wandb的使用手册 阅读详情
AI摘要

wandb.sweep是一个用于自动化超参数调优的工具,特点包括低代码配置、实时可视化和分布式执行。它支持随机搜索、网格搜索和贝叶斯搜索等调优算法。用户通过配置sweep.yaml文件,定义调优目标和超参数空间,然后启动sweep控制器和代理进行分布式搜索。wandb的界面可以展示调参过程和结果,帮助分析最优超参数组合。文章还提供了一个使用wandb.sweep进行PyTorch模型训练的例子。

wandb.sweep: 低代码,可视化,分布式 自动调参工具。

使用wandb 的 sweep 进行超参调优,具有以下优点。

(1)低代码:只需配置一个sweep.yaml配置文件,或者定义一个配置dict,几乎不用编写调参相关代码。

(2)可视化:在wandb网页中可以实时监控调参过程中每次尝试,并可视化地分析调参任务的目标值分布,超参重要性等。

(3)分布式:sweep采用类似master-workers的controller-agents架构,controller在wandb的服务器机器上运行,agents在用户机器上运行,controller和agents之间通过互联网进行通信。同时启动多个agents即可轻松实现分布式超参搜索。

公众号后台回复关键词:wandb,获取本文notebook代码和B站视频演示。

使用 wandb 的sweep 调参的缺点:

需要联网:由于wandb的controller位于wandb的服务器机器上,wandb日志也需要联网上传,在没有互联网的环境下无法正常使用wandb 进行模型跟踪 以及 wandb sweep 可视化调参。

d6731f3afe349a385fa50a5eb394b50a.png

〇,使用Sweep的3步骤

  1. 配置 sweep_config

配置调优算法,调优目标,需要优化的超参数列表 等等。
  1. 初始化 sweep controller:

sweep_id = wandb.sweep(sweep_config,project)
  1. 启动 sweep agents:

wandb.agent(sweep_id, function=train)
import os,PIL 
import numpy as np
from torch.utils.data import DataLoader, Dataset
import torch 
from torch import nn 
import torchvision 
from torchvision import transforms
import datetime
import wandb 

wandb.login()
from argparse import Namespace

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

#初始化参数配置
config = Namespace(
    project_name = 'wandb_demo',
    
    batch_size = 512,
    
    hidden_layer_width = 64,
    dropout_p = 0.1,
    
    lr = 1e-4,
    optim_type = 'Adam',
    
    epochs = 15,
    ckpt_path = 'checkpoint.pt'
)

一. 配置 Sweep config

详细配置文档可以参考:https://docs.wandb.ai/guides/sweeps/define-sweep-configuration

1,选择一个调优算法

Sweep支持如下3种调优算法:

(1)网格搜索:grid. 遍历所有可能得超参组合,只在超参空间不大的时候使用,否则会非常慢。

(2)随机搜索:random. 每个超参数都选择一个随机值,非常有效,一般情况下建议使用。

(3)贝叶斯搜索:bayes. 创建一个概率模型估计不同超参数组合的效果,采样有更高概率提升优化目标的超参数组合。对连续型的超参数特别有效,但扩展到非常高维度的超参数时效果不好。

sweep_config = {
    'method': 'random'
    }

2,定义调优目标

设置优化指标,以及优化方向。

sweep agents 通过 wandb.log 的形式向 sweep controller 传递优化目标的值。

metric = {
    'name': 'val_acc',
    'goal': 'maximize'   
    }
sweep_config['metric'] = metric

3,定义超参空间

超参空间可以分成 固定型,离散型和连续型。

  • 固定型:指定 value

  • 离散型:指定 values,列出全部候选取值。

  • 连续性:需要指定 分布类型 distribution, 和范围 min, max。用于 random 或者 bayes采样。

sweep_config['parameters'] = {}

# 固定不变的超参
sweep_config['parameters'].update({
    'project_name':{'value':'wandb_demo'},
    'epochs': {'value': 10},
    'ckpt_path': {'value':'checkpoint.pt'}})

# 离散型分布超参
sweep_config['parameters'].update({
    'optim_type': {
        'values': ['Adam', 'SGD','AdamW']
        },
    'hidden_layer_width': {
        'values': [16,32,48,64,80,96,112,128]
        }
    })

# 连续型分布超参
sweep_config['parameters'].update({
    
    'lr': {
        'distribution': 'log_uniform_values',
        'min': 1e-6,
        'max': 0.1
      },
    
    'batch_size': {
        'distribution': 'q_uniform',
        'q': 8,
        'min': 32,
        'max': 256,
      },
    
    'dropout_p': {
        'distribution': 'uniform',
        'min': 0,
        'max': 0.6,
      }
})

4,定义剪枝策略 (可选)

可以定义剪枝策略,提前终止那些没有希望的任务。

sweep_config['early_terminate'] = {
    'type':'hyperband',
    'min_iter':3,
    'eta':2,
    's':3
} #在step=3, 6, 12 时考虑是否剪枝
from pprint import pprint
pprint(sweep_config)

二. 初始化 sweep controller

sweep_id = wandb.sweep(sweep_config, project=config.project_name)

三, 启动 Sweep agent

我们需要把模型训练相关的全部代码整理成一个 train函数。

def create_dataloaders(config):
    transform = transforms.Compose([transforms.ToTensor()])
    ds_train = torchvision.datasets.MNIST(root="./mnist/",train=True,download=True,transform=transform)
    ds_val = torchvision.datasets.MNIST(root="./mnist/",train=False,download=True,transform=transform)

    ds_train_sub = torch.utils.data.Subset(ds_train, indices=range(0, len(ds_train), 5))
    dl_train =  torch.utils.data.DataLoader(ds_train_sub, batch_size=config.batch_size, shuffle=True,
                                            num_workers=2,drop_last=True)
    dl_val =  torch.utils.data.DataLoader(ds_val, batch_size=config.batch_size, shuffle=False, 
                                          num_workers=2,drop_last=True)
    return dl_train,dl_val
def create_net(config):
    net = nn.Sequential()
    net.add_module("conv1",nn.Conv2d(in_channels=1,out_channels=config.hidden_layer_width,kernel_size = 3))
    net.add_module("pool1",nn.MaxPool2d(kernel_size = 2,stride = 2)) 
    net.add_module("conv2",nn.Conv2d(in_channels=config.hidden_layer_width,
                                     out_channels=config.hidden_layer_width,kernel_size = 5))
    net.add_module("pool2",nn.MaxPool2d(kernel_size = 2,stride = 2))
    net.add_module("dropout",nn.Dropout2d(p = config.dropout_p))
    net.add_module("adaptive_pool",nn.AdaptiveMaxPool2d((1,1)))
    net.add_module("flatten",nn.Flatten())
    net.add_module("linear1",nn.Linear(config.hidden_layer_width,config.hidden_layer_width))
    net.add_module("relu",nn.ReLU())
    net.add_module("linear2",nn.Linear(config.hidden_layer_width,10))
    return net
def train_epoch(model,dl_train,optimizer):
    model.train()
    for step, batch in enumerate(dl_train):
        features,labels = batch
        features,labels = features.to(device),labels.to(device)

        preds = model(features)
        loss = nn.CrossEntropyLoss()(preds,labels)
        loss.backward()

        optimizer.step()
        optimizer.zero_grad()
    return model
def eval_epoch(model,dl_val):
    model.eval()
    accurate = 0
    num_elems = 0
    for batch in dl_val:
        features,labels = batch
        features,labels = features.to(device),labels.to(device)
        with torch.no_grad():
            preds = model(features)
        predictions = preds.argmax(dim=-1)
        accurate_preds =  (predictions==labels)
        num_elems += accurate_preds.shape[0]
        accurate += accurate_preds.long().sum()

    val_acc = accurate.item() / num_elems
    return val_acc
def train(config = config):
    dl_train, dl_val = create_dataloaders(config)
    model = create_net(config); 
    optimizer = torch.optim.__dict__[config.optim_type](params=model.parameters(), lr=config.lr)
    #======================================================================
    nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    wandb.init(project=config.project_name, config = config.__dict__, name = nowtime, save_code=True)
    model.run_id = wandb.run.id
    #======================================================================
    model.best_metric = -1.0
    for epoch in range(1,config.epochs+1):
        model = train_epoch(model,dl_train,optimizer)
        val_acc = eval_epoch(model,dl_val)
        if val_acc>model.best_metric:
            model.best_metric = val_acc
            torch.save(model.state_dict(),config.ckpt_path)   
        nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        print(f"epoch【{epoch}】@{nowtime} --> val_acc= {100 * val_acc:.2f}%")
        #======================================================================
        wandb.log({'epoch':epoch, 'val_acc': val_acc, 'best_val_acc':model.best_metric})
        #======================================================================        
    #======================================================================
    wandb.finish()
    #======================================================================
    return model   

#model = train(config)

一切准备妥当,点火🔥🔥。

# 该agent 随机搜索 尝试5次
wandb.agent(sweep_id, train, count=5)

四,调参可视化和跟踪

1,平行坐标系图

可以直观展示哪些超参数组合更加容易获取更好的结果。

7366fd427d9e456030174fd9764948ec.png

 

2,超参数重要性图

可以显示超参数和优化目标最终取值的重要性,和相关性方向。

79447d4928b8ac70a543e57a9c7141f7.png

 

3分钟搞定wandb实验可视化:从安装到调参全流程指南(附常见报错解决) 本文提供了一份快速上手指南,帮助用户在3分钟内掌握wandb实验可视化的核心流程。内容涵盖从安装、登录、初始化项目,到使用wandb.log记录训练指标、媒体文件和模型,并重点介绍了利用wandb的Sweep功能进行自动超参数搜索的完整步骤。指南还附带了常见网络连接、数据同步等问题的解决方案,旨在让机器学习实验管理变得高效、井井有条。 阅读详情

相关推荐

Weight&Biases教程

Weights & Biases 可以帮助跟踪你的机器学习项目。使用工具记录运行中的超参数和输出指标(Metric),然后对结果进行可视化和比较,并快速与同事分享你的发现。

Alex抱着爆米花的博客 9386

Wandb使用文档-Sweep(一)

wandb调参工具中的sweep方法的配置使用说明

qq_34424944的博客 2730

GANs实战指南:原理、避坑与工业级应用

生成对抗网络(GANs)是生成式AI中聚焦数据分布建模与高保真合成的核心技术,其本质是通过生成器与判别器的对抗博弈实现隐空间的结构化学习。相比VAE的模糊重建与扩散模型的高延迟采样,GAN凭借锐利细节生成、小样本泛化能力及毫秒级推理效率,在医疗影像合成、工业缺陷生成和芯片版图设计等强约束场景中仍具不可替代性。本文深入解析模式坍缩、训练不稳定、伪影生成等典型问题的技术成因,并基于真实GPU小时验证给出R1正则、MinibatchStd、beta1=0.0等关键实操参数,覆盖从数据清洗、架构选型到FID/LPI

ama7449的博客 514

【炼丹神器】wandb实践之sweep超参扫描工具

训练之奇淫巧技sweep训练自动化搜索超参

Thomas_Cai的记忆殿堂 4031

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 235

AI辅助专利撰写实战:30分钟高效产出发明专利初稿

在技术创新的浪潮中,专利撰写常常是开发者将创意转化为知识产权保护壁垒的关键一步,但这个过程往往耗时费力,需要兼顾技术深度与法律文书规范。近期,借助AI辅助工具来提升专利撰写效率已成为一个热门探索方向。本文将围绕如何利用AI工具,在30分钟内高效完成一篇具备授权潜力的发明专利初稿,进行一场从0到1的实战演练。无论你是独立开发者、初创团队的技术负责人,还是希望保护自己研究成果的学生,这套方法都能帮助你快速梳理技术方案,形成结构严谨、逻辑清晰的专利申请文档。 1. 背景与核心概念:AI辅助专利撰写的价值与边界 在

weixin_34253126的博客 495

30分钟吃掉wandb模型训练可视化

wandb是"我爱你,大baby"首字母的缩写。顾名思义,她是炼丹师的大宝贝,是炼丹师最爱的炼丹伴侣。公众号算法美食屋后台回复关键词:wandb,获取本教程 notebook源码和 B站视频演示。just kidding, 开个玩笑!wandb全称weights&bias,是一款类似TensorBoard的机器学习可视化分析工具。相比TensorBoard,wandb具有如下主要优势:日...

Python_Ai_Road的博客 2534

PyTorch模型生产部署:ONNX/Triton导出与高可用架构实战

机器学习模型部署本质是训练环境与生产环境之间的运行时契约建立过程,涉及序列化协议、推理引擎兼容性、动态批处理及资源隔离等核心问题。ONNX凭借标准化算子集和跨框架支持,成为平衡兼容性、性能与可维护性的首选导出格式;Triton Inference Server则通过原生多框架支持、动态batching和热加载能力,显著提升GPU利用率与服务SLA保障水平。在金融风控、电商推荐等高要求场景中,基于ONNX+Triton+K8s的分层架构可稳定支撑千级QPS与毫秒级P95延迟,同时满足模型热更新、可观测性与版本

weixin_33857679的博客 448

【深度学习】wandb模型训练可视化工具使用方法

Wandb(Weights & Biases)是一款专为机器学习和深度学习设计的可视化工具,旨在帮助开发者更高效地跟踪、可视化和共享实验结果提供在线平台,可以轻松记录实验的超参数、输出指标以及模型的变化,并通过直观的仪表盘展示这些信息与tensorboard类似,均是机器学习可视化分析工具wandb相较于Tensorboard的优势:1.wandb的日志文件上传云端存储,可永久保存,tensorboard存储在本地2.wandb存储代码,数据集,模型,

几度热忱的博客 1万+

紫光同创国产FPGA学习之Fabric Debugger

文章从紫光同创参考书拷贝过来的。因为我用的时候,看了一下就会用了(纯粹只是会用了,默认和xilinx的一样),没有看教程。先更新点文本,后面在写程序。 一、      软件简介 Fabric Debugger是一款界面化的FPGA芯片调试工具,能够针对公司目前以及未来的FPGA芯片进行在线调试。本软件直接与JtagHub、DebugCore交互,能够实时的配置目标FPGA、设置触发条件并且观测结...

my_share的专栏 6397

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 464

Slick 移动端触摸滑动避坑指南:3 个参数语义 + 2 段代码,让真机轮播行为符合直觉

给 Slick 轮播调移动端触摸时,真机上最先翻车的往往不是样式,而是参数语义:`touchThreshold` 方向是反的,`swipeToSlide` 会偷偷改写 `slidesToScroll`,`edgeFriction` 的默认值文档和源码还对不上。这篇文章基于源码把 Slick 触摸滑动的判定链路拆清楚,给出两套可直接抄的处理写法,让手机轮播做到滑得翻、停得稳、点不误。 ## 结论先

gitblog_00810的博客 68

【滚雪球学数学建模】第1节·建模入门+三步法+案例

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 6413

机器学习研究员的真实工作流:数据工程、工具链与职业生存指南

机器学习研究员的核心能力远不止模型设计与论文写作,而是扎根于数据工程、系统调试与跨领域协作等基础技术实践。从数据清洗、基线复现到分布式训练排障,真实工作80%时间消耗在数据管道构建、工具链适配与生产环境落地等‘脏活’上。这些环节直接受限于数据质量、框架版本兼容性、硬件拓扑与部署算子支持度等底层因素。掌握数据血缘追踪、梯度流可视化、混合精度通信优化等硬技能,不仅能提升实验效率,更是保障模型从实验室走向工业场景的关键。本文聚焦ML研究员在实际项目中高频遭遇的数据加载瓶颈、DDP同步失效、Triton部署崩溃等典

weixin_34228387的博客 428

华为海思:大小海思的双轮驱动战略分析

大海思的定位清晰明确,即专注于为华为内部提供高性能、高集成度的芯片解决方案,以支持华为终端、服务器等业务的快速发展。小海思的产品线广泛,涵盖了广域物联、短距物联、手机穿戴、显示交互、智慧视觉、智慧媒体、MCU、模拟以及光模块等多个领域。通过提供多样化的芯片解决方案,小海思旨在满足外部客户的不同需求,拓展华为海思在芯片市场的份额和影响力。大海思的产品布局主要围绕华为的内部需求展开。在智能手机应用处理器方面,大海思的麒麟系列芯片已经成为华为手机的标志性产品,以其出色的性能和能效比赢得了市场的广泛认可。

dream it possible 2926

猿创征文|SfM(Structure from Motion)学习之路

SfM全称Structure from Motion,译为运动恢复结构,是三维重建pipeline的一部分,又称稀疏重建,在摄影测量领域则称为空三(空中三角测量)。SfM的任务是,给定一系列具有一定重叠度的图像,去同时估计出拍摄每张图像时相机的的位姿(位置t和姿态R)和被拍摄物体或场景的稀疏点云。...............

zeeq的博客 1万+

中文情感分类模型选型实战:Word2Vec/CNN/LSTM/BERT四方案工程对比

文本情感分类是自然语言处理中最基础且高频的工业级任务,其核心挑战在于平衡表征能力、计算开销与交付时效。从词向量静态映射(Word2Vec)到局部模式识别(CNN),再到序列依赖建模(LSTM)和上下文动态表征(BERT),不同模型代表了NLP分类能力演进的关键断层。技术选型不应追求SOTA指标,而需聚焦显存占用、训练时长、推理延迟、小样本鲁棒性等可部署指标。本文基于ChnSentiCorp中文评论数据集,在统一硬件(RTX 3090)、预处理与评估标准下,实测四类主流方案在Macro-F1、单条耗时、模型体

weixin_34234829的博客 357

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

UQ-Loc:面向LiDAR定位的带不确定性场景坐标回归

在自动驾驶与机器人定位中,位姿估计的可靠性往往比单值精度更重要。场景坐标回归(Scene Coordinate Regression)作为一种从观测直接映射全局坐标的技术,相比传统点云配准,具备更强的全局定位能力,而结合不确定性估计后,模型能够同时输出“位置”与“置信度”,为下游融合提供关键质量信号。这类方法通过3D特征网络回归逐点场景坐标,并预测对数方差作为不确定度,再经加权PnP或RANSAC求解位姿。其技术价值在于,系统可据此过滤动态物体干扰、调整融合权重、提前预警退化场景,从而显著提升LiDAR定位

weixin_34269583的博客 325

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Unsloth加速LLaMA-3微调:单卡A10上4小时完成8B模型LoRA训练

大语言模型(LLM)微调是落地应用的关键环节,其核心挑战在于计算效率与显存占用的平衡。LoRA作为一种高效参数微调技术,虽降低参数量,但传统实现(如HuggingFace PEFT)因Python层hook开销、中间张量冗余分配及未优化的CUDA kernel,导致实际训练速度受限、显存碎片严重。Unsloth通过深度内联LoRA计算至Linear层原生forward,融合x@W_base与x@A@B为单kernel执行,消除临时显存分配并适配Tensor Core指令,在A10等消费级GPU上实现训练速度

weixin_30376083的博客 460

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

wandb可视化自动调参

详解使用wandb的sweep进行超参调优的步骤wandb.sweep: 低代码,可视化,分布式 自动调参工具。使用wandb 的 sweep 进行超参调优,具有以下优点。(1)低代码:只需配置一个sweep.yaml配置文件,或者定义一个配置dict,几乎不用编写调参相关代码。(2)可视化:在wandb网页中可以实时监控...

weixin_41083849的博客 399

科研工具:实验结果实时可视化,自动调参工具-wandb

wandb是tensorboard plus版,它有几个优点:1.代码量少,几行代码就能把你想记录的各个实验数据全部变成图表形式2.只要代码在跑,不管你在哪。登录网站就能看到实时更新的实验结果3.自动调参。可以自己设定想调的参数范围,内置搜索方法可以帮你找到优秀的解。而且支持多进程,很多机器一起跑,效率拉满。

qq_48342932的博客 2538

wandb自动化调参Sweep踩坑记录 - windows

windows跑wandb sweep自动化调参踩坑

weixin_44645774的博客 617

Wandb.init和wandb.sweep的使用准则

当你使用 wandb.init() 初始化实验时,如果指定的项目名称在你的 WandB 项目中不存在,WandB 会自动创建一个新的项目,并将你的实验与该项目关联。如果你希望将你的记录归档在一个特定的项目中,并与该项目的其他记录一起展示和分析,你应该在 wandb.init() 中提供项目名称,以便将记录与指定的项目关联起来。如果指定的项目名称在你的 WandB 项目中已经存在,wandb.init() 将使用已有的项目,将你的实验与该项目关联起来。可以是单个标签或标签列表。默认情况下,实体为你的用户名。

virus111222的博客 3577

深度学习模型训练神器之wandb

还不知道怎么调参吗?wandb帮你解决!本文详解wandb的使用,包括常见的命令,各种需求的实现等~

说文科技,做有态度的研究。 9487
上一篇: 30分钟吃掉wandb模型训练可视化
下一篇: Stable Diffusion绘画入门
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值