PyTorch与Weights & Biases:使用wandb训练与评估的日志和实操【附代码!】

“PyTorch与Weights & Biases:使用wandb训练与评估的日志和实操”

使用 Weights & Biases (wandb) 来记录 PyTorch 中的损失变化和模型测试指标非常方便。以下是一个简单的示例代码,展示了如何在训练和评估过程中使用 wandb 进行日志记录。

安装 wandb

首先,需要安装 wandb:

pip install wandb

初始化 wandb

在你的脚本或 notebook 中,先导入 wandb 并初始化一个新项目:

import wandb

# 初始化 wandb
wandb.init(project="your_project_name", entity="your_wandb_username")

记录训练和验证过程

在训练和验证过程中,可以使用 wandb.log 方法来记录损失和其他指标的变化。以下是一个完整的示例:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# 示例数据集和模型
x_train = torch.randn(100, 10)
y_train = torch.randn(100, 1)
train_dataset = TensorDataset(x_train, y_train)
train_loader = DataLoader(train_dataset, batch_size=10, shuffle=True)

class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 1)
    
    def forward(self, x):
        return self.fc(x)

model = SimpleModel()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 初始化 wandb
wandb.init(project="your_project_name", entity="your_wandb_username")

# 训练和验证循环
for epoch in range(10):  # 假设训练10个epoch
    model.train()
    running_loss = 0.0
    for i, (inputs, targets) in enumerate(train_loader):
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    
    # 平均损失
    avg_loss = running_loss / len(train_loader)
    
    # 记录损失
    wandb.log({"Train Loss": avg_loss, "Epoch": epoch})

    # 验证模型(这里使用训练数据作为示例)
    model.eval()
    with torch.no_grad():
        val_outputs = model(x_train)
        val_loss = criterion(val_outputs, y_train)
    
    # 记录验证损失
    wandb.log({"Validation Loss": val_loss.item(), "Epoch": epoch})

    print(f"Epoch [{epoch+1}/10], Train Loss: {avg_loss:.4f}, Validation Loss: {val_loss.item():.4f}")

# 保存模型
torch.save(model.state_dict(), "model.pth")
wandb.save("model.pth")

记录其他指标

除了损失,还可以记录其他指标,例如精度、召回率等。代码中实现了一个计算准确率的函数,那么接下来就可以在验证步骤中记录准确率:

def calculate_accuracy(outputs, targets):
    # 假设是二分类任务
    preds = torch.round(torch.sigmoid(outputs))
    correct = (preds == targets).sum().float()
    accuracy = correct / targets.numel()
    return accuracy

# 在验证步骤中
with torch.no_grad():
    val_outputs = model(x_train)
    val_loss = criterion(val_outputs, y_train)
    val_accuracy = calculate_accuracy(val_outputs, y_train)

# 记录验证损失和准确率
wandb.log({"Validation Loss": val_loss.item(), "Validation Accuracy": val_accuracy.item(), "Epoch": epoch})

在这里插入图片描述

完整示例

以上代码展示了如何在 PyTorch 训练循环中集成 wandb 以记录训练和验证损失,以及其他可能的评估指标。你可以根据自己的需要进行调整和扩展,例如增加更多的指标或记录更多的信息(如模型超参数、训练时间等)。然后登陆自己的账号就可以在线看到训练过程,值得注意的是,如果报错,有可能是梯子的原因,导致同步出现问题。

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值