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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21251.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上位機圖像處理和嵌入式模塊部署(f407 mcu中fatfs中間件使用)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 前面我們已經實現了spi norflash的驅動&#xff0c;理論上這已經可以實現數據的持久化保存了。為什么還需要一個文件系統呢&#xff1f;主要原因還…

在 Win系統安裝 Ubuntu20.04子系統 WSL2 (默認是C盤,第7步開始遷移到D盤,也可以不遷移)

1、簡介 WSL在Windows 10上原生運行Linux二進制可執行文件&#xff0c;不用單獨安裝虛擬機。 WSL2是WSL的第二個版本&#xff0c;提供了與WSL相比的顯著性能改進和完全的系統呼叫兼容性。通過運行Linux內核在一個輕量級虛擬機&#xff08;VM&#xff09;中實現。 2、安裝 電…

ThingsBoard MQTT 連接認證過程 源碼分析+圖例

整個連接過程如圖所示&#xff1a; 高清圖片鏈接 1、環境準備 thingsboard3.5.1 源碼啟動。&#xff08;不懂怎么啟動的&#xff0c;大家可以看我的博文ThingsBoard3.5.1源碼啟動&#xff09;MQTTX 客戶端&#xff08;用來連接 thingsboard MQTT&#xff09;默認配置。queue.…

7-15 位模式(dump_bits)---PTA實驗C++

一、題目描述 為方便調試位運算相關程序&#xff0c;先做個展現位模式的小工具。 建議參照以下接口實現&#xff1a; // 利用函數重載特性&#xff1a;string dump_bits(char x);string dump_bits(short x);string dump_bits(int x);string dump_bits(long long x);// 或用函…

JVM類加載過程

在Java虛擬機規范中&#xff0c;把描述類的數據從class文件加載到內存&#xff0c;并對數據進行校驗、轉換解析和初始化&#xff0c;最終形成可以被虛擬機直接使用的java.lang.Class對象&#xff0c;這個過程被稱作類加載過程。一個類在整個虛擬機周期內會經歷如下圖的階段&…

C++編程法則365天一天一條(323)main函數執行之前和之后的動作

在C和C程序中&#xff0c;main 函數之前和之后執行的函數是由編譯器、鏈接器和運行時環境共同決定的。以下是一些通常會在這些階段執行的關鍵函數&#xff1a; 在 main 函數之前執行的函數 啟動代碼&#xff08;Start-up Code&#xff09;: 這是由編譯器提供的一段代碼&#…

DIYP對接駱駝后臺IPTV管理,退出菜單中顯示用戶名已經網絡信息,MAC,剩余天數,套餐名稱等

演示&#xff1a;https://url03.ctfile.com/f/1779803-1042599473-4dc000?p8976 (訪問密碼: 8976) 后臺加上EPG&#xff0c;增加一些播放源的動態端口替換。 前臺app上&#xff0c;退出菜單中顯示用戶名已經網絡信息&#xff0c;MAC&#xff0c;剩余天數&#xff0c;套餐名稱…

Python知識點17---包

提前說一點&#xff1a;如果你是專注于Python開發&#xff0c;那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了&#xff0c;而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python的包&#xff0c;你可以把它看成是一個大的模塊&#xff0c;它…

JAVA基礎|多線程

什么是線程&#xff1f; 線程&#xff08;Thread&#xff09;是一個程序內部的一條執行流程。 多線程是什么&#xff1f; 多線程是指從軟硬件上實現的多條執行流程的技術&#xff08;多條線程由CPU負責調度執行&#xff09; 一. 如何在程序中創建出多條線程&#xff1f; Ja…

新接手業務的線上Bug特別多怎么辦?

文章目錄 接手&#xff1a;保證質量順利過渡緊急質量審計臨時增加測試頻次灰度發布加強監控與預警建立快速反饋機制 打補丁&#xff1a;針對性解決質量問題Bug 分析與分類測試策略優化環境一致性 搞基建&#xff1a;全流程質量控制需求分析與評審設計階段的評審與驗證代碼質量控…

Windows10系統中安裝與配置PyTorch(無GPU版本)

文章目錄 1. 什么是PyTorch2. PyTorch的安裝與配置&#xff08;無GPU&#xff09;2.1 創建環境2.2 安裝pytorch庫&#xff08;無GPU&#xff09;2.3 驗證安裝結果 1. 什么是PyTorch PyTorch 是一種用于構建深度學習模型且功能完備的開源框架&#xff0c;通常用于處理圖像識別和…

JVM學習-自定義類加載器

為什么要自定義類加載器 隔離加載類 在某些框架內進行中間件與應用的模塊隔離&#xff0c;把類加載到不同的環境&#xff0c;如Tomcat這類Web應用服務器&#xff0c;內部自定義了好幾種類加載器&#xff0c;用于隔離同一個Web應用服務器上的不同應用程序 修改類加載的方式 …

OpenCV 的幾種查找圖像中輪廓邊緣的方法

原始圖片&#xff1a; 1、Sobel() Sobel 算子結合了高斯平滑和微分&#xff0c;用于計算圖像的梯度&#xff0c;從而突出顯示邊緣。 import cv2# 讀取圖像 image cv2.imread(image.png, cv2.IMREAD_GRAYSCALE)# 使用 Sobel 算子查找水平和垂直邊緣 sobel_x cv2.Sobel(image…

建筑企業有閑置資質怎么辦?

如果建筑企業擁有閑置資質&#xff0c;可以考慮以下幾種方式來充分利用這些資質&#xff1a; 1. 租賃或轉讓資質&#xff1a; 將閑置的建筑資質租賃給其他企業或個人使用&#xff0c;或者通過轉讓的方式將資質出售給有需要的企業或個人。 2. 提供咨詢服務&#xff1a; 利用建…

git分布式版本控制系統(四)

目前世界上最先進的分布式版本控制系統 官方網址&#xff1a;https://git-scm.com 學習目標&#xff1a; 1 了解 git 前世今生 2 掌握 git 基礎概念、基礎操作 3 各種 git 問題處理 4 互聯網常用 gitflow(工作流程規范) 5 git 代碼提交規范 6 git 分支管理及命名規范 常見問…

OneForall工具的下載安裝和使用(Windows和Linux)

目錄 OneForall的介紹 OneForall的下載 OneForall的安裝 安裝要求 安裝步驟&#xff08;git 版&#xff09; 安裝&#xff08;kali&#xff09; OneForall的使用命令 在Windows 在Linux&#xff08;kali&#xff09; OneForall的結果說明 免責聲明 本文所提供的文字和…

車輛前向碰撞預警系統性能要求和測試規程

前言 本文整理《GB/T 33577-2017 智能運輸系統-車輛前向碰撞預警系統性能要求和測試規程》國標文件關鍵信息,FCW系統性能和測試右給深層次的認識。 術語和定義 車輛前向碰撞預警系統 forward vehicle collision warning system自車 subject vehicle(SV)目標車輛 target ve…

【Linux】查找和壓縮

一、文件查找 1、命令查找 which 2、文件查找、依賴數據庫 locate 3、文件查找 find 語法&#xff1a;find [path] [options] [expression] [action] ①按文件名 -name按名 -iname可不區分大小寫 ②按文件大小 5M&#xff1a;5M以上文件 5M&#xff1a;5M文件 -…

高中數學:解三角形相關公式總結及用法總結

一、正弦定理 二、余弦定理 三、三角形面積公式 由正弦定理&#xff0c;可以推出三角形的面積公式&#xff1a; S*ab*sinC S*ac*sinB S*bc*sinA 四、使用方法總結 五、練習 例題1 解析 對條件等式進行變形&#xff0c;結合余弦定理&#xff0c;求出∠A的度數&#xff0c;從而…

【面經分享-CPP篇】[建議收藏!!] C++基礎20問-01

&#x1f36d; 大家好這里是清隆學長 &#xff0c;一枚熱愛算法的程序員 ? 本系列打算持續跟新c面試基礎 &#x1f44f; 感謝大家的訂閱? 和 喜歡&#x1f497; 文章目錄 1.題目&#xff1a;解釋C中的RAII機制。2.題目&#xff1a;解釋C中的智能指針及其類型。3.題目&#xf…