使用tensorboard_logger在Python中展示神经网络模型不同层级的参数分布图
发布时间:2024-01-09 09:35:10
Tensorboard_logger是一个用于在Python中展示Tensorboard日志的库。它可以帮助我们可视化神经网络模型的不同层级的参数的分布,以及其他各种指标。
首先,我们需要安装tensorboard_logger库。可以使用pip命令来安装:
pip install tensorboard_logger
现在,让我们来看一个展示神经网络模型不同层级参数分布的例子。假设我们有一个简单的多层感知机(MLP)的模型,用于分类MNIST数据集的手写数字。
import torch
import torch.nn as nn
import torchvision.datasets as datasets
import torchvision.transforms as transforms
from tensorboard_logger import log_histogram, log_value
# 定义MLP模型
class MLP(nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 128)
self.fc3 = nn.Linear(128, 10)
def forward(self, x):
x = x.view(-1, 784)
x = self.fc1(x)
x = torch.relu(x)
x = self.fc2(x)
x = torch.relu(x)
x = self.fc3(x)
return x
# 加载MNIST数据集
train_dataset = datasets.MNIST(root="./data", train=True, transform=transforms.ToTensor(), download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
# 实例化MLP模型
model = MLP()
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
# 训练模型
for epoch in range(10):
for i, (images, labels) in enumerate(train_loader):
# 前向传播
outputs = model(images)
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 计算准确率
_, predicted = torch.max(outputs.data, 1)
total = labels.size(0)
correct = (predicted == labels).sum().item()
accuracy = correct / total
# 打印相关信息
print('[Epoch: {}/{}], [Batch: {}], [Loss: {:.4f}], [Accuracy: {:.2f}%]'
.format(epoch+1, 10, i+1, loss.item(), accuracy * 100))
# 将参数分布和相关指标记录到tensorboard日志中
log_histogram("fc1/weight", model.fc1.weight.data, epoch)
log_histogram("fc1/bias", model.fc1.bias.data, epoch)
log_histogram("fc2/weight", model.fc2.weight.data, epoch)
log_histogram("fc2/bias", model.fc2.bias.data, epoch)
log_histogram("fc3/weight", model.fc3.weight.data, epoch)
log_histogram("fc3/bias", model.fc3.bias.data, epoch)
log_value("loss", loss.item(), epoch)
log_value("accuracy", accuracy * 100, epoch)
在上述例子中,我们首先定义了一个MLP模型,它有三个全连接层。然后我们加载MNIST数据集,并进行相应的数据转换。接下来,我们定义了损失函数和优化器。
在模型训练的每个epoch的每个batch中,我们进行了前向传播、反向传播、优化和计算准确率。我们还使用tensorboard_logger库的log_histogram函数将模型不同层级的权重和偏置参数的分布记录到tensorboard日志中。同时,我们也使用log_value函数将损失和准确率记录到日志中。
最后,我们可以使用以下命令在终端中启动tensorboard来查看模型的参数分布图表:
tensorboard --logdir=path_to_log_folder
其中,path_to_log_folder是你保存tensorboard日志的文件夹的路径。
通过运行上述代码和tensorboard命令,我们将获得一个可视化的界面,其中包含了模型各个层级参数的分布图表,以及损失和准确率的曲线图。这些图表将帮助我们更好地了解模型的性能和参数分布情况,从而优化和调试我们的模型。
