当前位置: 首页 > ai >正文

python打卡day45@浙大疏锦行

知识点回顾:

  1. tensorboard的发展历史和原理
  2. tensorboard的常见操作
  3. tensorboard在cifar上的实战:MLP和CNN模型

效果展示如下,很适合拿去组会汇报撑页数:

作业:对resnet18在cifar10上采用微调策略下,用tensorboard监控训练过程。

一、TensorBoard的发展历史和原理

- 发展历史 :TensorBoard 最初是 TensorFlow 框架的可视化工具,随着深度学习的发展,它逐渐成为了一个独立且强大的可视化库,现在也支持 PyTorch 等其他深度学习框架。它帮助开发者更直观地理解、调试和优化深度学习模型。
- 原理 :TensorBoard 通过记录模型训练过程中的各种数据(如损失值、准确率、梯度等)到日志文件中,然后在本地启动一个 Web 服务器,读取这些日志文件并将数据以可视化的方式呈现出来。常见的可视化形式包括折线图、直方图、图像展示等。

二、TensorBoard的常见操作

- 记录标量数据 :用于记录训练过程中的损失值、准确率等标量指标。
- 记录图像数据 :可以展示训练数据、生成的图像等。
- 记录直方图 :用于可视化模型参数、梯度的分布。
- 启动 TensorBoard :在命令行中运行 tensorboard --logdir=path/to/logs ,然后在浏览器中访问相应的地址。

三、TensorBoard在 CIFAR 上的实战:MLP 和 CNN 模型

在训练 MLP 和 CNN 模型时,可以使用 torch.utils.tensorboard.SummaryWriter 来记录训练过程中的各种数据,然后使用 TensorBoard 进行可视化。以下是一个简单示例:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.tensorboard import SummaryWriter# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 加载 CIFAR10 数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2)# 定义简单的 CNN 模型
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 6, 5)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(6, 16, 5)self.fc1 = nn.Linear(16 * 5 * 5, 120)self.fc2 = nn.Linear(120, 84)self.fc3 = nn.Linear(84, 10)def forward(self, x):x = self.pool(torch.relu(self.conv1(x)))x = self.pool(torch.relu(self.conv2(x)))x = x.view(-1, 16 * 5 * 5)x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return xmodel = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)# 创建 SummaryWriter
writer = SummaryWriter('runs/cifar_experiment')for epoch in range(2):  # 训练 2 个 epochrunning_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = dataoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()if i % 2000 == 1999:    # 每 2000 个 mini-batches 记录一次writer.add_scalar('Training Loss', running_loss / 2000, epoch * len(trainloader) + i)running_loss = 0.0writer.close()

作业:对 ResNet18 在 CIFAR10 上采用微调策略下,用 TensorBoard 监控训练过程

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torchvision.models import resnet18
from torch.utils.tensorboard import SummaryWriter
from config import Config  # 假设使用当前工作区的 Config 类# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 加载 CIFAR10 数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=Config.BATCH_SIZE,shuffle=True, num_workers=2)testset = torchvision.datasets.CIFAR10(root='./data', train=False,download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=Config.BATCH_SIZE,shuffle=False, num_workers=2)# 加载预训练的 ResNet18 模型
model = resnet18(pretrained=Config.PRETRAINED)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, Config.NUM_CLASSES)# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=Config.LR, momentum=0.9)# 创建 SummaryWriter
writer = SummaryWriter('runs/resnet18_cifar10_experiment')device = torch.device(Config.DEVICE)
model.to(device)for epoch in range(Config.EPOCHS):running_loss = 0.0model.train()for i, data in enumerate(trainloader, 0):inputs, labels = data[0].to(device), data[1].to(device)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()if i % 100 == 99:  # 每 100 个 mini-batches 记录一次writer.add_scalar('Training Loss', running_loss / 100, epoch * len(trainloader) + i)running_loss = 0.0# 在测试集上验证model.eval()correct = 0total = 0with torch.no_grad():for data in testloader:images, labels = data[0].to(device), data[1].to(device)outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()accuracy = 100 * correct / totalwriter.add_scalar('Test Accuracy', accuracy, epoch)writer.close()

在命令行中运行以下命令启动 TensorBoard

tensorboard --logdir=runs

然后查看可视化结果

http://www.xdnf.cn/news/12206.html

相关文章:

  • Vehicle HAL(5)--vhal 实现设置属性的流程
  • Silicon EFR32xG22 错误问题和解决办法汇总
  • Linux目录结构
  • ROS2里面与话题 /move_base_simple/goal 和 /move_base/status 相对应的话题名字及其含义
  • 整理几个概念:DCU DTK HIP hipcc ROCm LLVM Triton MIGraphX 怎么增加GStreamer插件
  • 可穿戴设备:健康监测的未来之眼
  • 2025年阿里最新软件测试面试题:Web 测试+接口测试+App 测试
  • DAY 22 复习日
  • 获取第三方图片接口文件流并保存服务器
  • 8天Python从入门到精通【itheima】-71~72(数据容器“序列”+案例练习)
  • 串:BF算法(朴素的魔术匹配算法)
  • 【深度学习-Day 23】框架实战:模型训练与评估核心环节详解 (MNIST实战)
  • MQTTX连接移动云的例子
  • JMeter 实现 MQTT 协议压力测试 !
  • 云服务器Xshell登录拒绝访问排查
  • 使用 Deleaker 精准定位内存与 GDI 资源泄漏
  • Matplotlib 库来可视化频谱泄漏和加窗的效果
  • 【如何做好应用架构?】
  • RTOS:创建队列(含源码分析)
  • 搭建DNS域名解析服务器(正向解析资源文件)
  • 数据结构:递归:泰勒展开式(Taylor Series Expansion)
  • 如何搭建自动化测试框架?
  • simulink有无现成模块可以实现将三个分开的输入合并为一个[1*3]的行向量输出?
  • nginx 服务启动失败问题记录
  • 华新精科IPO“上会” 四大疑惑待解
  • LeetCode | 滑动窗口的原理及真题解析
  • JavaScript 数组与流程控制:从基础操作到实战应用
  • 八皇后问题深度解析
  • 05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
  • 深入浅出工厂模式:从入门到精通(2025最新版)