wandb安装与使用 —— 用于跟踪、可视化和协作机器学习实验的工具

本文主要是介绍wandb安装与使用 —— 用于跟踪、可视化和协作机器学习实验的工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、wandb简介
  • 二、wandb注册与登陆(网页) —— 若登录,则支持在线功能
  • 三、wandb安装与登陆(命令行) —— 若不登录,则只保留离线功能
  • 四、函数详解
    • 4.1、wandb.init() —— 初始化一个新的 wandb 实验,并开始记录实验的信息和结果。
    • 4.2、wandb.config.update() —— 更新实验的配置参数
    • 4.3、wandb.log() —— 记录实验指标和日志信息。
    • 4.4、wandb.finish() —— 结束实验记录。
  • 五、项目实战
    • 5.1、入门教程
      • 5.1.1、在Pycharm中可视化结果
      • 5.1.2、在仪表盘中可视化结果(网页)
    • 5.2、简单的 Pytorch 神经网络


wandb指南(视频教程 - 入门必看):https://docs.wandb.ai/guides
wandb教程(示例代码):W&B Tutorials
wandb教程(示例代码 - Jupyter):Intro_to_Weights_&_Biases.ipynb

一、wandb简介

wandb(Weights&Biases, W&B)用于跟踪、可视化和协作机器学习实验的工具,支持在线和离线。它提供了一个简单的 Python API,可以轻松地将实验数据发送到云端,并通过 Web 应用程序进行访问和可视化。

  • 实验跟踪和记录:自动跟踪机器学习实验,包括超参数、指标、模型架构等,并将这些信息保存在云端,以便后续查看和比较。
  • 结果可视化:提供丰富的可视化功能,包括曲线图、散点图、直方图等,以帮助用户更好地理解实验结果和模型性能。
  • 模型检查点和版本控制:可以保存模型检查点,并生成唯一的版本号,以便回溯和比较不同的实验结果。
  • 协作和共享:可以邀请团队成员参与实验、查看结果,并进行讨论和反馈。还可以将实验和结果与其他人共享,使其可以在不同的环境中重现和使用您的工作。
  • 集成多种框架:支持与各种机器学习框架(如 TensorFlow、PyTorch、Keras 等)和机器学习工具(如 scikit-learn)集成,并提供了方便的 API,方便进行实验管理和结果跟踪。

备注:若登陆(在线版本)则在个人主页的Profile - Projects中保存实验记录,且每运行一次都将新增一条可视化数据,而不是只保留最近一次的运行结果。
备注:若不登陆(离线版本);
备注:无论是否登录,都将在当前路径下自动新建一个wandb文件夹,且每运行一次都将新增一个保存实验记录的文件夹。

二、wandb注册与登陆(网页) —— 若登录,则支持在线功能

若需要wandb在线功能,则执行以下步骤。

  • 账号注册(SING UP):https://wandb.ai/site
  • 注册并登陆账号后,将获取一个与账号绑定的的身份码(API key)。
  • 在 Python 项目中,可以绑定指定的项目名称用于保存实验数据。若项目不存在,则自动创建。
    • 新建项目:(在跳转界面的左上角)create a new project,该项目可以选择私有(Private)、公开(Public)、开放(Open)。

在这里插入图片描述

三、wandb安装与登陆(命令行) —— 若不登录,则只保留离线功能

  • wandb安装:pip install wandb。安装成功之后,将在当前虚拟环境下(py39)显示安装包如下:

在这里插入图片描述

若需要wandb在线功能,则执行以下步骤。

  • wandb登录:wandb login
1)若显示如下,则输入命令行:wandb login --relogin。用于更换账号
"""
wandb: Currently logged in as: anony-moose-837920374001732497. Use `wandb login --relogin` to force relogin
"""2)若显示如下,则点击第二个链接获取API key(在个人主页的User settings中也可以获取),复制后并在命令行中粘贴(此时命令行没有显示),无需理会直接回车。
"""
wandb: Logging into wandb.ai. (Learn how to deploy a W&B server locally: https://wandb.me/wandb-server)
wandb: You can find your API key in your browser here: https://wandb.ai/authorize
wandb: Paste an API key from your profile and hit enter, or press ctrl+c to quit: 
"""3)若显示如下,登录成功(在C:\Users\Administrator\.netrc路径下可以查看或添加API key)。
"""
wandb: Appending key for api.wandb.ai to your netrc file: C:\Users\Administrator\.netrc
"""4)若显示如下,是由于API key失效或丢失,需重新登录。
"""
wandb: W&B API key is configured. Use `wandb login --relogin` to force relogin
wandb: ERROR Error while calling W&B API: user is not logged in (<Response [401]>)
wandb: ERROR The API key you provided is either invalid or missing.  If the `WANDB_API_KEY` environment variable is set, make sure it is correct. Otherwise, to resolve this issue, you may try running the 'wandb login --relogin' command. If you are using a local server, make sure that you're using the correct hostname. If you're not sure, you can try logging in again using the 'wandb login --relogin --host [hostname]' command.(Error 401: Unauthorized)
"""

在这里插入图片描述

四、函数详解

wandb - Python Library(函数详解 + 参数详解) —— https://docs.wandb.ai/ref/python/
最常用的函数/对象:wandb.init + wandb.config.update() + wandb.log + wandb.finish()。

wandb.init()			:初始化一个新的 wandb 实验,并开始记录实验的信息和结果。
wandb.config.update()	:更新实验的配置参数。
wandb.log()				:记录实验指标和日志信息。
wandb.finish()			:结束实验记录。wandb.save()			:保存实验结果和模型文件。
wandb.restore	 		:从 wandb 云存储中恢复实验记录的模型参数或文件。wandb.watch()			:监视模型的梯度和参数。
wandb.Api()				:访问 wandb 云服务的 API。
wandb.Table()			:创建一个表格对象,用于显示数据。
wandb.plot()			:创建并显示图表。
wandb.Image()			:创建并显示图像。
wandb.Video()			:创建并显示视频。
wandb.Audio()			:创建并播放音频。

4.1、wandb.init() —— 初始化一个新的 wandb 实验,并开始记录实验的信息和结果。

"""#########################################################################
函数功能:用于初始化一个新的 wandb 实验,并开始记录实验的信息和结果。
函数说明:wandb.init(project=None, entity=None, group=None, job_type=None, config=None,tags=None, resume=False, dir=None, name=None, notes=None, id=None,magic=None, anonymous=None, allow_val_change=False, reinit=False, settings=None,)
参数说明:project:实验所属的项目名称。entity:实验所属的实体(例如,团队或用户)。group:实验的分组名称。job_type:实验的类型(例如,训练、评估等)。config:实验的配置参数,可以是一个字典或 Namespace 对象。tags:实验的标签,可以是一个字符串列表。resume:如果为 True,则尝试恢复先前的实验。默认为 False。dir:存储实验数据和日志的目录路径。name:实验的名称。notes:实验的说明或注释。id:实验的唯一标识符。magic:用于指定特殊功能的魔法命令。anonymous:如果为 True,则匿名上传实验结果。默认为 False。allow_val_change:如果为 True,则允许修改已存在的配置参数。默认为 False。reinit:如果为 True,则重新初始化实验,忽略先前的配置。默认为 False。settings:一个字典,用于设置实验的其他参数。
返回参数:一个 wandb.Run 对象,代表当前的实验运行。
#########################################################################"""

4.2、wandb.config.update() —— 更新实验的配置参数

"""#########################################################################
函数功能:用于更新当前实验的配置参数。 ———— 配置参数是在 wandb.init() 函数中指定的,并且可以在实验的整个运行过程中进行更新。
函数说明:wandb.config.update(new_config=None, allow_val_change=None, **kwargs)
参数说明:new_config:一个字典或 Namespace 对象,包含要更新的配置参数。allow_val_change:如果为 True,则允许修改已存在的配置参数。默认为 False。**kwargs:关键字参数,用于更新配置参数。
#########################################################################"""

4.3、wandb.log() —— 记录实验指标和日志信息。

"""#########################################################################
函数功能:用于记录实验中的指标、损失、评估结果、日志信息等,并将它们保存到 Weights & Biases(wandb)平台上,以便后续分析和可视化。
函数说明:wandb.log(data, step=None, commit=True, sync=True)
参数说明:data:要记录的数据,可以是一个字典、列表、数字、字符串等。通常用于记录指标、损失等信息。step:可选参数,表示记录的步骤或轮数。如果不提供,则默认为当前步骤或轮数。commit:可选参数,表示是否立即提交记录。默认为 True,表示立即提交。sync:可选参数,表示是否同步记录到云端。默认为 True,表示同步记录。
#########################################################################"""

4.4、wandb.finish() —— 结束实验记录。

"""#########################################################################
函数功能:用于结束当前的实验记录,并将记录的数据保存到 wandb平台上。
函数说明:wandb.finish(exit_code: Optional[int] = None, quiet: Optional[bool] = None)
参数说明:exit_code	设置为 0 以外的值将运行标记为失败quiet	    设置为 true 以最小化日志输出
#########################################################################"""

五、项目实战

wandb教程(示例代码):W&B Tutorials
wandb教程(示例代码 - Jupyter):Intro_to_Weights_&_Biases.ipynb

5.1、入门教程

5.1.1、在Pycharm中可视化结果

在这里插入图片描述

import wandb
import random# 🐝 1️⃣ Start a new run to track this script
wandb.init(# Set the project where this run will be loggedproject="basic-intro",# We pass a run name (otherwise it’ll be randomly assigned, like sunshine-lollypop-10)name=f"experiment",# Track hyperparameters and run metadataconfig={"learning_rate": 0.02,"architecture": "CNN","dataset": "CIFAR-100","epochs": 10,})# This simple block simulates a training loop logging metrics
epochs = 10
offset = random.random() / 5
for epoch in range(2, epochs):acc = 1 - 2 ** -epoch - random.random() / epoch - offsetloss = 2 ** -epoch + random.random() / epoch + offset# 🐝 2️⃣ Log metrics from your script to W&Bwandb.log({"acc": acc, "loss": loss})# Mark the run as finished
wandb.finish()

5.1.2、在仪表盘中可视化结果(网页)

仪表盘(Dashboard):是 wandb 提供的一个可视化界面,用户可以在网页浏览器中访问,并通过它查看、分析和管理实验结果。在仪表盘上,用户可以看到实验的指标、损失曲线、模型参数、日志信息等,并可以进行比较、筛选、筛选和导出等操作。

  • 备注:若登陆(在线版本)则在个人主页的Profile - Projects中保存实验记录,且每运行一次都将新增一条可视化数据,而不是只保留最近一次的运行结果。
  • 备注:若不登陆(离线版本);
  • 备注:无论是否登录,都将在当前路径下自动新建一个wandb文件夹,且每运行一次都将新增一个保存实验记录的文件夹。

运行三次后的显示结果如下:
在这里插入图片描述

5.2、简单的 Pytorch 神经网络

wandb教程(示例代码):W&B Tutorials
wandb教程(示例代码 - Jupyter):Intro_to_Weights_&_Biases.ipynb

在这里插入图片描述

import wandb
import math
import random
import torch, torchvision
import torch.nn as nn
import torchvision.transforms as Tdevice = "cuda:0" if torch.cuda.is_available() else "cpu"def get_dataloader(is_train, batch_size, slice=5):"Get a training dataloader"full_dataset = torchvision.datasets.MNIST(root=".", train=is_train, transform=T.ToTensor(), download=True)sub_dataset = torch.utils.data.Subset(full_dataset, indices=range(0, len(full_dataset), slice))loader = torch.utils.data.DataLoader(dataset=sub_dataset,batch_size=batch_size,shuffle=True if is_train else False,pin_memory=True, num_workers=2)return loaderdef get_model(dropout):"A simple model"model = nn.Sequential(nn.Flatten(),nn.Linear(28*28, 256),nn.BatchNorm1d(256),nn.ReLU(),nn.Dropout(dropout),nn.Linear(256,10)).to(device)return modeldef validate_model(model, valid_dl, loss_func, log_images=False, batch_idx=0):"Compute performance of the model on the validation dataset and log a wandb.Table"model.eval()val_loss = 0.with torch.inference_mode():correct = 0for i, (images, labels) in enumerate(valid_dl):images, labels = images.to(device), labels.to(device)# Forward pass ➡outputs = model(images)val_loss += loss_func(outputs, labels)*labels.size(0)# Compute accuracy and accumulate_, predicted = torch.max(outputs.data, 1)correct += (predicted == labels).sum().item()# Log one batch of images to the dashboard, always same batch_idx.if i==batch_idx and log_images:log_image_table(images, predicted, labels, outputs.softmax(dim=1))return val_loss / len(valid_dl.dataset), correct / len(valid_dl.dataset)def log_image_table(images, predicted, labels, probs):"Log a wandb.Table with (img, pred, target, scores)"# 🐝 Create a wandb Table to log images, labels and predictions totable = wandb.Table(columns=["image", "pred", "target"]+[f"score_{i}" for i in range(10)])for img, pred, targ, prob in zip(images.to("cpu"), predicted.to("cpu"), labels.to("cpu"), probs.to("cpu")):table.add_data(wandb.Image(img[0].numpy()*255), pred, targ, *prob.numpy())wandb.log({"predictions_table":table}, commit=False)if __name__ == "__main__":# Launch 5 experiments, trying different dropout ratesfor _ in range(5):# 🐝 initialise a wandb runwandb.init(project="pytorch-intro",config={"epochs": 10,"batch_size": 128,"lr": 1e-3,"dropout": random.uniform(0.01, 0.80),})# Copy your configconfig = wandb.config# Get the datatrain_dl = get_dataloader(is_train=True, batch_size=config.batch_size)valid_dl = get_dataloader(is_train=False, batch_size=2 * config.batch_size)n_steps_per_epoch = math.ceil(len(train_dl.dataset) / config.batch_size)# A simple MLP modelmodel = get_model(config.dropout)# Make the loss and optimizerloss_func = nn.CrossEntropyLoss()optimizer = torch.optim.Adam(model.parameters(), lr=config.lr)# Trainingexample_ct = 0step_ct = 0for epoch in range(config.epochs):model.train()for step, (images, labels) in enumerate(train_dl):images, labels = images.to(device), labels.to(device)outputs = model(images)train_loss = loss_func(outputs, labels)optimizer.zero_grad()train_loss.backward()optimizer.step()example_ct += len(images)metrics = {"train/train_loss": train_loss,"train/epoch": (step + 1 + (n_steps_per_epoch * epoch)) / n_steps_per_epoch,"train/example_ct": example_ct}if step + 1 < n_steps_per_epoch:# 🐝 Log train metrics to wandbwandb.log(metrics)step_ct += 1val_loss, accuracy = validate_model(model, valid_dl, loss_func, log_images=(epoch == (config.epochs - 1)))# 🐝 Log train and validation metrics to wandbval_metrics = {"val/val_loss": val_loss,"val/val_accuracy": accuracy}wandb.log({**metrics, **val_metrics})print(f"Train Loss: {train_loss:.3f}, Valid Loss: {val_loss:3f}, Accuracy: {accuracy:.2f}")# If you had a test set, this is how you could log it as a Summary metricwandb.summary['test_accuracy'] = 0.8# 🐝 Close your wandb runwandb.finish()

这篇关于wandb安装与使用 —— 用于跟踪、可视化和协作机器学习实验的工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025485

相关文章

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni