欢迎访问宙启技术站
智能推送

利用TensorBoardX实时监测模型训练过程中的学习率和损失值

发布时间:2024-01-16 06:37:19

TensorBoardX是一个用于可视化PyTorch模型的扩展包,可以实时监测模型的训练过程中的学习率和损失值,方便我们了解模型的训练情况和调整超参数。

首先,需要在项目中安装TensorBoardX:

pip install tensorboardX

接下来,我们可以使用一个简单的神经网络模型进行示例。首先,导入必要的库:

import torch
import torch.nn as nn
import torch.optim as optim
from tensorboardX import SummaryWriter

然后,定义一个简单的神经网络模型:

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

接下来,我们可以定义一些超参数和数据:

# 超参数
learning_rate = 0.01
num_epochs = 100

# 数据
inputs = torch.randn(100, 10)
labels = torch.randn(100, 1)

然后,创建一个模型实例、定义损失函数和优化器:

# 创建模型实例
model = Net()

# 定义损失函数
criterion = nn.MSELoss()

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

接下来,我们可以创建一个SummaryWriter对象来记录训练过程中的学习率和损失值:

# 创建SummaryWriter对象,指定保存的路径
writer = SummaryWriter('logs')

# 开始训练
for epoch in range(num_epochs):
    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, labels)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    # 记录当前的学习率和损失值
    writer.add_scalar('Training Loss', loss.item(), epoch)
    writer.add_scalar('Learning Rate', optimizer.state_dict()['param_groups'][0]['lr'], epoch)

    # 输出当前的训练信息
    if (epoch+1) % 10 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

最后,打开终端,使用如下命令启动TensorBoard:

tensorboard --logdir=logs

然后,打开浏览器,访问http://localhost:6006,即可看到TensorBoard的界面。

在TensorBoard界面的"Scalars"标签下,可以看到学习率和损失值随训练步骤的变化曲线。

通过这个例子,你可以使用TensorBoardX实时监测模型训练过程中的学习率和损失值,以便更好地了解模型的训练情况和调整超参数。同时,你还可以通过TensorBoardX可视化模型的图结构、参数分布、梯度分布等信息,帮助你更好地理解和调试模型。