Wandb 记录模型训练情况
参考: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 记录模型训练情况相关推荐
- YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights Biases)
如有错误,恳请指出. 与其说是yolov5的训练技巧,这篇博客更多的记录如何使用wandb这个在线模型训练可视化工具,感受到了yolov5作者对其的充分喜爱. 所以下面内容更多的记录下如何最简单的使用 ...
- DL之Attention-ED:基于TF NMT利用带有Attention的 ED模型训练、测试(中英文平行语料库)实现将英文翻译为中文的LSTM翻译模型过程全记录
DL之Attention-ED:基于TF NMT利用带有Attention的 ED模型训练(中英文平行语料库)实现将英文翻译为中文的LSTM翻译模型过程全记录 目录 测试输出结果 模型监控 训练过程全 ...
- 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监控)全记录 目 ...
- 神经网络学习小记录19——微调VGG分类模型训练自己的数据(猫狗数据集)
神经网络学习小记录19--微调VGG分类模型训练自己的数据(猫狗数据集) 注意事项 学习前言 什么是VGG16模型 VGG模型的复杂程度 训练前准备 1.数据集处理 2.创建Keras的VGG模型 3 ...
- 神经网络学习小记录17——使用AlexNet分类模型训练自己的数据(猫狗数据集)
神经网络学习小记录17--使用AlexNet分类模型训练自己的数据(猫狗数据集) 学习前言 什么是AlexNet模型 训练前准备 1.数据集处理 2.创建Keras的AlexNet模型 开始训练 1. ...
- YOLOv5模型训练可视化wandb使用
作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 可视化需求背景 在训练的服务器上安装wandb: 在终端(例如有网的window ...
- YOLOv5s的模型训练与使用(纯小白入门)
YOLOv5s的模型训练与使用(纯小白入门) 文章目录 YOLOv5s的模型训练与使用(纯小白入门) 概要 下载yolov5与安装依赖 训练 检测 检测图片 实时检测视频 概要 本文主要面向第一次使用 ...
- 腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验
整理 | 琥珀 出品 | AI 科技大本营 对腾讯优图的发展历程,吴永坚表示,优图是非常幸运的,幸运的同时也知道优图选对了方向,只要坚持,还是会有收获的. 12 月 15 日,以"新趋势.新 ...
- gpu处理信号_在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
先进的深度学习模型参数正以指数级速度增长:去年的GPT-2有大约7.5亿个参数,今年的GPT-3有1750亿个参数.虽然GPT是一个比较极端的例子但是各种SOTA模型正在推动越来越大的模型进入生产应用 ...
最新文章
- QCOW2 — Overview
- I2C 总线原理与架构
- 构件图(Component Diagram)
- python扩展库安装
- 填空题C语言,c语言填空题试卷.doc
- 翻动100万级的数据
- shell 调用 sqlplus 各种情况示例
- 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
- 笔记:《幸福的方法》
- Java并发编程实战~volatile
- 32个机械动图,揭秘生活中制造原理
- Tyepcho超好看大前端模板
- A + B Problem II
- 【转】VMware虚拟机三种网络模式超详解
- Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别
- 有趣的计算机黑科技,6个让你欲罢不能的电脑黑科技软件,我一定要分享出来!...
- H5调用摄像头实现视频拍摄及iOS兼容性问题
- 直插电阻的分类和区别
- pr导入srt字幕显示因文件头错误而不能打开,或pr导入字幕乱码
- html加密文件夹,怎么给文件夹加密