Tensorboard使用教程

news/2024/12/2 6:57:56/

Tensorboard是TensorFlow官方提供的一个可视化工具,用于帮助开发者更好地理解和调试自己的模型。以下是使用Tensorboard的一些基本步骤:

  1. 在代码中引入Tensorboard库:

    from torch.utils.tensorboard import SummaryWriter
    
  2. 在代码中实例化SummaryWriter对象,并指定保存日志文件的目录:

    writer = SummaryWriter('logs')
    
  3. 在模型训练的过程中,将相关的指标写入SummaryWriter对象,例如:

    writer.add_scalar('Train/Loss', train_loss, global_step=epoch)
    writer.add_scalar('Train/Accuracy', train_acc, global_step=epoch)
    writer.add_scalar('Val/Loss', val_loss, global_step=epoch)
    writer.add_scalar('Val/Accuracy', val_acc, global_step=epoch)
    

    这些指标可以分别表示模型在训练集和验证集上的损失和准确率,global_step参数用于表示当前的epoch数。

  4. 在模型训练完成后,使用命令行工具进入日志文件目录,并执行以下命令:

    tensorboard --logdir=./
    

    这个命令将会启动Tensorboard服务器,并将日志文件目录作为参数传入。

  5. 在浏览器中打开http://localhost:6006,就可以看到Tensorboard的界面了。在这里,你可以查看训练过程中指标的变化、模型的结构、模型权重的直方图等等信息。

以下是一个使用Tensorboard的完整示例代码,以MNIST数据集为例:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim.lr_scheduler import ReduceLROnPlateau
from torch.utils.data import DataLoader
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
from torch.utils.tensorboard import SummaryWriter
from tqdm import tqdm# 数据准备
train_dataset = MNIST(root='./data', train=True, transform=ToTensor())
val_dataset = MNIST(root='./data', train=False, transform=ToTensor())
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False, num_workers=4)# 定义模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 32, kernel_size=3)self.conv2 = nn.Conv2d(32, 64, kernel_size=3)self.fc1 = nn.Linear(64*5*5, 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, 64*5*5)x = nn.functional.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()# 定义优化器和调度器
optimizer = optim.SGD(model.parameters(), lr=0.1)
scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10)# 定义日志记录器
writer = SummaryWriter('logs')# 训练模型
num_epochs = 20
for epoch in range(num_epochs):# 训练train_loss = 0.0train_correct = 0model.train()for images, labels in tqdm(train_loader, desc='Train'):optimizer.zero_grad()outputs = model(images)loss = nn.functional.cross_entropy(outputs, labels)loss.backward()optimizer.step()train_loss += loss.item() * images.size(0)_, preds = torch.max(outputs, 1)train_correct += torch.sum(preds == labels)train_loss /= len(train_loader.dataset)train_acc = train_correct.double() / len(train_loader.dataset)# 验证val_loss = 0.0val_correct = 0model.eval()with torch.no_grad():for images, labels in tqdm(val_loader, desc='Val'):outputs = model(images)loss = nn.functional.cross_entropy(outputs, labels)val_loss += loss.item() * images.size(0)_, preds = torch.max(outputs, 1)val_correct += torch.sum(preds == labels)val_loss /= len(val_loader.dataset)val_acc = val_correct.double() / len(val_loader.dataset)# 更新学习率scheduler.step(val_loss)# 输出结果并记录日志print('Epoch [{}/{}], Train Loss: {:.4f}, Train Acc: {:.4f}, Val Loss: {:.4f}, Val Acc: {:.4f}'.format(epoch+1, num_epochs, train_loss, train_acc, val_loss, val_acc))writer.add_scalar('Train/Loss', train_loss, global_step=epoch)writer.add_scalar('Train/Accuracy', train_acc, global_step=epoch)writer.add_scalar('Val/Loss', val_loss, global_step=epoch)writer.add_scalar('Val/Accuracy', val_acc, global_step=epoch)# 记录权重直方图for name, param in model.named_parameters():writer.add_histogram(name, param.clone().cpu().data.numpy(), global_step=epoch)# 关闭日志记录器
writer.close()

在这个示例代码中,我们首先引入了SummaryWriter类,并在代码中实例化了一个对象writer,指定了日志文件保存的目录。在模型训练的过程中,我们将相关的指标和权重直方图写入writer对象中,

train_loss, global_step=epoch)
writer.add_scalar('Train/Accuracy', train_acc, global_step=epoch)
writer.add_scalar('Val/Loss', val_loss, global_step=epoch)
writer.add_scalar('Val/Accuracy', val_acc, global_step=epoch)

这些指标将会被记录在日志文件中,供后续使用。另外,我们还使用了writer.add_histogram方法记录了模型权重的直方图。

在代码最后,我们调用writer.close()方法关闭日志记录器。

在模型训练完成后,我们可以使用命令行工具进入日志文件目录,并执行以下命令启动Tensorboard服务器.

在服务器训练时如何在本地电脑查看tensorboard

可以在本地电脑上通过远程连接服务器的方式查看Tensorboard。具体步骤如下:

  1. 在服务器上启动Tensorboard,可以使用以下命令:
tensorboard --logdir=/path/to/log/directory --port=6006

其中,/path/to/log/directory是保存Tensorboard日志文件的目录,--port是指定Tensorboard运行的端口号,默认为6006

  1. 在本地电脑上通过SSH连接服务器,命令如下:
ssh username@server_address

其中,username是服务器的用户名,server_address是服务器的IP地址或域名。

  1. 在SSH连接中启动端口转发,命令如下:
ssh -L 16006:127.0.0.1:6006 username@server_address

其中,-L参数指定本地端口和远程服务器端口的映射关系,16006是本地端口号,127.0.0.1:6006是远程服务器的IP地址和端口号。

  1. 在本地电脑上打开浏览器,访问http://localhost:16006,即可查看Tensorboard。

http://www.ppmy.cn/news/79538.html

相关文章

软件测试分类: 你需要知道的不同类型测试

文章目录 一. 按测试对象进行划分1. 界面测试2. 可靠性测试3. 容错性4. 文档测试5. 兼容性测试6. 易用性测试7. 安装卸载的测试8. 安全测试9. 性能测试10. 内存泄漏测试 二. 按是否查看代码划分1. 黑盒测试(Black-box Testing)2. 白盒测试(White-box Testing)冒泡排序测试用例进…

6.4.6拓扑排序

用DAG&#xff08;有向无环图&#xff09;表示一个工程。顶点表示活动&#xff0c;有向边<Vi&#xff0c;Vj>表示活动Vi活动必须先与Vj活动进行。 所谓的拓扑排序&#xff1a;找到做事的先后顺序 以上根据拓扑排序的实现&#xff1a; 加入对有回路的图进行拓扑排序&#…

【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的WOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富

【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的QOWOA优化LSTM时间序列预测模型&#xff0c;优势明显&#xff0c;注释详细&#xff0c;绘图丰富 一、代码优势 1.使用优化后的QOWOA算法优化LSTM超参数&#xff08;学习率&#xff0c;隐藏层节点&#xff0c;…

小学妹刚毕业没地方住想来借宿,于是我连夜用Python给她找了个好房子,我真是太机智了

事情是这样的&#xff0c;小学妹刚毕业参加工作&#xff0c;人生地不熟的&#xff0c;因为就在我附近上班&#xff0c;所以想找我借宿。。。 想什么呢&#xff0c;都不给住宿费&#xff0c;想免费住&#xff1f;于是我用Python连夜给她找了个单间&#xff0c;自己去住吧&#…

我3年前写的博客,又被别人抄去发论文了,该论文整个正文部分几乎直接照抄我的博客

我想说每一篇原创博客都是作者的心血&#xff0c;有时候写一篇博客也许会花一天&#xff0c;甚至好几天的时间&#xff0c;尊重原创&#xff0c;营造好的环境&#xff0c;才有可能出现更多优质的博文&#xff0c;而不是到处都是抄来抄去的低质量水文。 前几天接到来自粉丝的私信…

pdf怎么拆分成一页一页的?办公常备工具说明

PDF&#xff08;Portable Document Format&#xff09;是一种用于创建和共享文档的文件格式。它由Adobe Systems开发&#xff0c;并已成为电子文档的通用格式。PDF文件可以包含文本、图像、表格、超链接和其他多媒体内容&#xff0c;使其成为一种非常方便的文件格式。 然而&…

Vulkan Tutorial 4

目录 11 framebuffer 12 命令缓冲区 13 Rendering and presentation 信号量 栅栏 创建同步对象 等待上一帧 从交换链获取图像 提交命令缓冲区 子通道依赖 Presentation 14 Frames in flight 15 Swap chain recreation 重新创建交换链 11 framebuffer 我们已经将…

【1377. T 秒后青蛙的位置】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵由 n 个顶点组成的无向树&#xff0c;顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下&#xff1a; 在一秒内&#xff0c;青蛙从它所在的当前顶点跳到另一个 未访问 过的顶点&#xf…