使用Wandbwatch()函数跟踪您的神经网络训练
发布时间:2024-01-10 16:45:39
Wandbwatch()是一个Wandb PyTorch库的函数,它用于跟踪神经网络的训练过程并将结果记录在W&B(Weights & Biases)平台上。在本文中,我将演示如何使用Wandbwatch()函数来跟踪神经网络的训练,并将其与示例结合起来。
首先,我们需要安装Wandb库并导入所需的库和模块:
# 安装Wandb库 !pip install wandb # 导入所需的库和模块 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms import wandb from torch.utils.data import DataLoader
接下来,我们可以定义我们的神经网络模型。在本例中,我定义了一个简单的卷积神经网络模型:
# 定义神经网络模型
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3)
self.fc1 = nn.Linear(1600, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = nn.functional.relu(self.conv1(x))
x = nn.functional.relu(self.conv2(x))
x = x.view(-1, 1600)
x = nn.functional.relu(self.fc1(x))
x = self.fc2(x)
return x
然后,我们可以定义训练函数,其中使用Wandbwatch()函数跟踪训练过程:
# 定义训练函数
def train(model, device, train_loader, criterion, optimizer, epoch):
model.train()
wandb.watch(model, log="all")
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
wandb.log({"Train Loss": loss.item()})
if batch_idx % 100 == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.item()))
在训练函数中,我们首先将模型设置为训练模式,并使用Wandbwatch()函数对模型进行跟踪。然后,我们循环遍历训练加载器中的数据批次,将输入数据和目标标签移动到设备上,然后进行前向传播,计算损失,反向传播并优化模型。在每个批次中,我们使用wandb.log()函数将训练损失记录到W&B平台上,以便后续分析和可视化。
最后,我们可以定义主函数来加载数据集、初始化模型和优化器,并调用训练函数进行训练:
# 定义主函数
def main():
# 设置Wandb
wandb.init(project='example-project', name='example-run')
# 设置设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 加载数据集
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
train_dataset = datasets.MNIST('data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
# 初始化模型和优化器
model = CNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
# 进行训练
for epoch in range(1, 10 + 1):
train(model, device, train_loader, criterion, optimizer, epoch)
# 保存模型
torch.save(model.state_dict(), "model.pt")
# 结束Wandb
wandb.finish()
在主函数中,我们首先设置W&B项目和运行的名称,然后设置设备,并加载数据集。接下来,我们初始化模型和优化器,并通过调用训练函数来进行训练。最后,我们保存模型,并使用wandb.finish()函数结束W&B记录。
要运行这个示例,只需调用主函数即可:
if __name__ == '__main__':
main()
这就是使用Wandbwatch()函数跟踪神经网络训练的例子。通过将模型跟踪到W&B平台上,我们可以获得更详细的训练指标和可视化结果,以更好地了解和改进我们的模型。
