参考:Wandb——Pytorch模型指标可视化及超参搜索_鹿枫的博客-CSDN博客_pytorch 超参数搜索

Wandb:模型训练最强辅助 - 知乎

自己做记录使用,打字一遍,更容易理解~ 希望大家去看原作者!

1 介绍

Wandb = "Weight" and "bias" 权重和偏执;

是一款提供给开发人员更好更快的构建机器学习模型的平台;

轻量化、可交互、追踪版本、迭代数据集、评估模型性能、重现性能、可视化结果、点回归;

作用:

保存训练运行中使用的超参数;

搜索、比较和可视化训练的运行;

在运行的同时分析系统硬件的情况如:CPU和GPU使用率;

永远保存可用的实验记录;

在团队中分享训练数据;

Dashboard:记录实验过程、将结果可视化;

Reports:保存和分享可复制的成果/结论;

Sweeps:通过改变超参数来优化模型;

Artifacts:可以自己搭建pipline实现保存储存数据集和模型以及评估结果的流程。

2 相关网址:

wandb官网:https://wandb.ai/site

wandb中文文档:https://docs.wandb.ai/v/zh-hans/

常见报错及解决:https://docs.wandb.ai/guides/sweeps/faq

模型参数可视化colab示例:http://wandb.me/pytorch-colab

超参搜索colab示例:https://colab.research.google.com/github/wandb/examples/blob/master/colabs/pytorch/Organizing_Hyperparameter_Sweeps_in_PyTorch_with_W%26B.ipynb

3 代码使用方法

基本接口:

wandb.init — 在训练脚本开头初始化一个新的运行项;wandb.config — 跟踪超参数;wandb.log — 在训练循环中持续记录变化的指标;wandb.save — 保存运行项相关文件,如模型权值;wandb.restore — 运行指定运行项时,恢复代码状态。

对于Any framework,使用wandb的代码如下:

# Flexible integration for any Python script
# 可灵活集成任何Python脚本
import wandb# 1. Start a W&B run 开始运行
wandb.init(project='gpt3')# 2. Save model inputs and hyperparameters 保存模型输入和超参数
config = wandb.config
config.learning_rate = 0.01# Model training here 模型训练在这里
‍
# 3. Log metrics over time to visualize performance 随着时间的推移记录度量以可视化性能
wandb.log({"loss": loss})

4 结合含有模型的项目步骤

代码大致可分为以下步骤:
①导包;
②初始化一个项目;
③设置参数;
④设定好模型和数据集;
⑤追踪模型参数并记录;
⑥储存模型;

step 0:
引入一些后续需要使用的包并初始化设备是GPU还是CPU:

import os
import randomimport numpy as np
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
from tqdm.notebook import tqdm
import wandb# Device configuration
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

step 1:

初始化模型的一些参数

config = dict(epochs=5,classes=10,kernels=[16, 32],batch_size=128,learning_rate=0.005,dataset="MNIST",architecture="CNN")

step 2:

定义整个流程

def model_pipeline(hyperparameters):# tell wandb to get started 告诉wandb开始with wandb.init(project="pytorch-demo", config=hyperparameters):# access all HPs through wandb.config, so logging matches execution! 通过wandb访问所有配置,以便日志记录匹配执行!config = wandb.config# make the model, data, and optimization problem  制定模型、数据和优化问题model, train_loader, test_loader, criterion, optimizer = make(config)print(model)# and use them to train the model 用它们来训练模型train(model, train_loader, criterion, optimizer, config)# and test its final performance 并测试其最终性能test(model, test_loader)return model

step 3:

定义一些具体的函数

数据集预处理:

def get_data(slice=5, train=True):full_dataset = torchvision.datasets.MNIST(root=".",train=train, transform=transforms.ToTensor(),download=True)#  equiv to slicing with [::slice] sub_dataset = torch.utils.data.Subset(full_dataset, indices=range(0, len(full_dataset), slice))return sub_datasetdef make_loader(dataset, batch_size):loader = torch.utils.data.DataLoader(dataset=dataset,batch_size=batch_size, shuffle=True,pin_memory=True, num_workers=2)return loader

step 4:定义模型类 :

# Conventional and convolutional neural networkclass ConvNet(nn.Module):def __init__(self, kernels, classes=10):super(ConvNet, self).__init__()self.layer1 = nn.Sequential(nn.Conv2d(1, kernels[0], kernel_size=5, stride=1, padding=2),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2))self.layer2 = nn.Sequential(nn.Conv2d(16, kernels[1], kernel_size=5, stride=1, padding=2),nn.ReLU(),nn.MaxPool2d(kernel_size=2, stride=2))self.fc = nn.Linear(7 * 7 * kernels[-1], classes)def forward(self, x):out = self.layer1(x)out = self.layer2(out)out = out.reshape(out.size(0), -1)out = self.fc(out)return out

step 5:定义数据集、模型;

def make(config):# Make the datatrain, test = get_data(train=True), get_data(train=False)train_loader = make_loader(train, batch_size=config.batch_size)test_loader = make_loader(test, batch_size=config.batch_size)# Make the modelmodel = ConvNet(config.kernels, config.classes).to(device)# Make the loss and optimizercriterion = nn.CrossEntropyLoss()optimizer = torch.optim.Adam(model.parameters(), lr=config.learning_rate)return model, train_loader, test_loader, criterion, optimizer

step 6:定义训练记录日志:

def train_log(loss, example_ct, epoch):# Where the magic happenswandb.log({"epoch": epoch, "loss": loss}, step=example_ct)print(f"Loss after " + str(example_ct).zfill(5) + f" examples: {loss:.3f}")

step 7:模型训练:

def train(model, loader, criterion, optimizer, config):# Tell wandb to watch what the model gets up to: gradients, weights, and more!# 告诉wandb观察模型达到了什么:梯度、权重等!wandb.watch(model, criterion, log="all", log_freq=10)# Run training and track with wandb 跑步训练和用wandb跟踪total_batches = len(loader) * config.epochsexample_ct = 0  # number of examples seenbatch_ct = 0for epoch in tqdm(range(config.epochs)):for _, (images, labels) in enumerate(loader):loss = train_batch(images, labels, model, optimizer, criterion)example_ct +=  len(images)batch_ct += 1# Report metrics every 25th batch 每25批次报告指标if ((batch_ct + 1) % 25) == 0:train_log(loss, example_ct, epoch)def train_batch(images, labels, model, optimizer, criterion):images, labels = images.to(device), labels.to(device)# Forward pass ➡outputs = model(images)loss = criterion(outputs, labels)# Backward pass ⬅optimizer.zero_grad()loss.backward()# Step with optimizeroptimizer.step()return loss

step 8:记录测试集上的日志:

def test(model, test_loader):model.eval()# Run the model on some test exampleswith torch.no_grad():correct, total = 0, 0for images, labels in test_loader:images, labels = images.to(device), labels.to(device)outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f"Accuracy of the model on the {total} " +f"test images: {100 * correct / total}%")wandb.log({"test_accuracy": correct / total})# Save the model in the exchangeable ONNX format 将模型保存为可交换的ONNX格式torch.onnx.export(model, images, "model.onnx")wandb.save("model.onnx")

step 9:定义模型训练测试的参数:

config = dict(epochs=5,classes=10,kernels=[16, 32],batch_size=128,learning_rate=0.005,dataset="MNIST",architecture="CNN")

step 10:  运行函数显示所有的记录过的指标

# Build, train and analyze the model with the pipeline
model = model_pipeline(config)

Wandb 记录模型训练情况相关推荐

  1. YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights Biases)

    如有错误,恳请指出. 与其说是yolov5的训练技巧,这篇博客更多的记录如何使用wandb这个在线模型训练可视化工具,感受到了yolov5作者对其的充分喜爱. 所以下面内容更多的记录下如何最简单的使用 ...

  2. DL之Attention-ED:基于TF NMT利用带有Attention的 ED模型训练、测试(中英文平行语料库)实现将英文翻译为中文的LSTM翻译模型过程全记录

    DL之Attention-ED:基于TF NMT利用带有Attention的 ED模型训练(中英文平行语料库)实现将英文翻译为中文的LSTM翻译模型过程全记录 目录 测试输出结果 模型监控 训练过程全 ...

  3. TF学习——TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录

    TF学习--TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录 目 ...

  4. 神经网络学习小记录19——微调VGG分类模型训练自己的数据(猫狗数据集)

    神经网络学习小记录19--微调VGG分类模型训练自己的数据(猫狗数据集) 注意事项 学习前言 什么是VGG16模型 VGG模型的复杂程度 训练前准备 1.数据集处理 2.创建Keras的VGG模型 3 ...

  5. 神经网络学习小记录17——使用AlexNet分类模型训练自己的数据(猫狗数据集)

    神经网络学习小记录17--使用AlexNet分类模型训练自己的数据(猫狗数据集) 学习前言 什么是AlexNet模型 训练前准备 1.数据集处理 2.创建Keras的AlexNet模型 开始训练 1. ...

  6. YOLOv5模型训练可视化wandb使用

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 可视化需求背景 在训练的服务器上安装wandb: 在终端(例如有网的window ...

  7. YOLOv5s的模型训练与使用(纯小白入门)

    YOLOv5s的模型训练与使用(纯小白入门) 文章目录 YOLOv5s的模型训练与使用(纯小白入门) 概要 下载yolov5与安装依赖 训练 检测 检测图片 实时检测视频 概要 本文主要面向第一次使用 ...

  8. 腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验

    整理 | 琥珀 出品 | AI 科技大本营 对腾讯优图的发展历程,吴永坚表示,优图是非常幸运的,幸运的同时也知道优图选对了方向,只要坚持,还是会有收获的. 12 月 15 日,以"新趋势.新 ...

  9. gpu处理信号_在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练

    先进的深度学习模型参数正以指数级速度增长:去年的GPT-2有大约7.5亿个参数,今年的GPT-3有1750亿个参数.虽然GPT是一个比较极端的例子但是各种SOTA模型正在推动越来越大的模型进入生产应用 ...

最新文章

  1. QCOW2 — Overview
  2. I2C 总线原理与架构
  3. 构件图(Component Diagram)
  4. python扩展库安装
  5. 填空题C语言,c语言填空题试卷.doc
  6. 翻动100万级的数据
  7. shell 调用 sqlplus 各种情况示例
  8. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
  9. 笔记:《幸福的方法》
  10. Java并发编程实战~volatile
  11. 32个机械动图,揭秘生活中制造原理
  12. Tyepcho超好看大前端模板
  13. A + B Problem II
  14. 【转】VMware虚拟机三种网络模式超详解
  15. Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别
  16. 有趣的计算机黑科技,6个让你欲罢不能的电脑黑科技软件,我一定要分享出来!...
  17. H5调用摄像头实现视频拍摄及iOS兼容性问题
  18. 直插电阻的分类和区别
  19. pr导入srt字幕显示因文件头错误而不能打开,或pr导入字幕乱码
  20. html加密文件夹,怎么给文件夹加密

热门文章

  1. 开发效率必备之Mac双屏显示
  2. springboot入门项目-用户登录1-持久层/业务层
  3. python题目64:求机器绘图面积
  4. 如果出现电脑开机没反应,鼠标键盘的灯都没亮时,但是显卡是亮着时
  5. 安卓应用使用QQ登录的申请流程
  6. 销售易曾参加2020华东CIO大会(ECIO)中国数字化转型展
  7. Java代码三种方式实现定时执行某个方法
  8. 平壤的表情:你不知道的朝鲜
  9. [小说连载]张小庆,在路上(4)-从哪里开始呢
  10. customErrors 元素(ASP.NET 设置架构)