TensorBoard在pytorch训练过程中如何使用,及数据读取问题解决方法

TensorBoard

    • 模块导入
    • 日志记录文件的创建
    • 训练中如何写入数据
    • 如何提取保存的数据调用TensorBoard面板
    • 可能会遇到的问题

模块导入

首先从torch中导入tensorboard的SummaryWriter日志记录模块

from torch.utils.tensorboard import SummaryWriter

然后导入要用到的os库,当然你们也要导入自己模型训练需要用到的库

import os

日志记录文件的创建

import os

log_dir = 'runs/EfficientNet_B3_experiment2'

# 检查目录是否存在
if os.path.exists(log_dir):
    # 如果目录存在,获取目录下的所有文件和子目录列表
    files = os.listdir(log_dir)

    # 遍历目录下的文件和子目录
    for file in files:
        # 拼接文件的完整路径
        file_path = os.path.join(log_dir, file)

        # 判断是否为文件
        if os.path.isfile(file_path):
            # 如果是文件,删除该文件
            os.remove(file_path)
        elif os.path.isdir(file_path):
            # 如果是目录,递归地删除目录及其下的所有文件和子目录
            for root, dirs, files in os.walk(file_path, topdown=False):
                for name in files:
                    os.remove(os.path.join(root, name))
                for name in dirs:
                    os.rmdir(os.path.join(root, name))
            os.rmdir(file_path)

# 创建新的SummaryWriter
writer = SummaryWriter(log_dir)

这个代码会自动创建并更新日志文件目录,请谨慎使用,记得改
log_dir = 'runs/EfficientNet_B3_experiment2'路径名字小心把之前保存好的数据删除了
之后模型训练的数据将会写入到log_dir这个路径文件中,在由TensorBoard张量板调用显示数据

训练中如何写入数据

for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    correct = 0
    total = 0
    start_time = time.time()

    for images, labels in train_loader:
        images, labels = images.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # 记录学习率
        current_lr = optimizer.param_groups[0]['lr']
        writer.add_scalar('Learning Rate', current_lr, epoch)

        # 记录梯度范数
        total_norm = 0
        for p in model.parameters():
            param_norm = p.grad.data.norm(2)
            total_norm += param_norm.item() ** 2
        total_norm = total_norm ** 0.5
        writer.add_scalar('Gradient Norm', total_norm, epoch)

        running_loss += loss.item()
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    train_loss = running_loss / len(train_loader)
    train_accuracy = 100 * correct / total

    # 记录训练损失和准确率
    writer.add_scalar('Training Loss', train_loss, epoch)
    writer.add_scalar('Training Accuracy', train_accuracy, epoch)

    # 记录模型参数的直方图
    for name, param in model.named_parameters():
        writer.add_histogram(name, param, epoch)

    # 记录网络结构(通常只需要记录一次)
    if epoch == 0:
        writer.add_graph(model, images.to(device))

    # 记录输入图片
    img_grid = torchvision.utils.make_grid(images)
    writer.add_image('train_images', img_grid, epoch)

    # 使用matplotlib记录渲染的图片
    fig, ax = plt.subplots()
    ax.plot(np.arange(len(labels)), labels.cpu().numpy(), 'b', label='True')
    ax.plot(np.arange(len(predicted)), predicted.cpu().numpy(), 'r', label='Predicted')
    ax.legend()
    writer.add_figure('predictions vs. actuals', fig, epoch)
        # 验证模型
    model.eval()
    val_loss = 0.0
    correct = 0
    total = 0
    
    all_preds = []
    all_labels = []
    
    with torch.no_grad():
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            loss = criterion(outputs, labels)
            val_loss += loss.item()
            _, predicted = torch.max(outputs.data, 1)
            all_preds.extend(predicted.cpu().numpy())
            all_labels.extend(labels.cpu().numpy())
            total += labels.size(0)
            correct += (predicted == labels).sum().item()

    val_loss /= len(test_loader)
    val_accuracy = 100 * correct / total

    if val_accuracy > best_val_accuracy:
        # 当新的最佳验证准确率出现时,保存模型状态字典
        best_val_accuracy = val_accuracy
        best_model_state_dict = model.state_dict()

    # 记录验证损失和准确率
    writer.add_scalar('Validation Loss', val_loss, epoch)
    writer.add_scalar('Validation Accuracy', val_accuracy, epoch)

    # 记录多条曲线
    writer.add_scalars('Loss', {'train': train_loss, 'val': val_loss}, epoch)
    writer.add_scalars('Accuracy', {'train': train_accuracy, 'val': val_accuracy}, epoch)

    # 打印每个epoch的训练和验证结果
    print(f'Epoch [{epoch+1}/{num_epochs}], '
          f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.2f}%, '
          f'Validation Loss: {val_loss:.4f}, Validation Accuracy: {val_accuracy:.2f}%, '
          f'Time: {time.time() - start_time:.2f}s')

以上代码分别记录了
在这里插入图片描述
在这里插入图片描述

如何提取保存的数据调用TensorBoard面板

在终端输入以下代码

tensorboard --logdir='修改为自己的log_dir路径'

在这里插入图片描述
然后点击 http://localhost:6006/就可以成功加载面板了
在这里插入图片描述

可能会遇到的问题

如果数据读取失败那么请检查数据路径是否正确
注意数据文件中不能有任何中文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/684206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STAT313 Chap5 多变量核密度估计带宽选择(下)

本文原创笔记,禁止转载。有问题可私信付费找我咨询。 直接插入法的基本步骤 步骤1:计算初始估计(Pilot Estimate) 选择一个初始的带宽矩阵 G \mathbf{G} G 和核函数 L L L 。计算初始密度估计: f ~ ( x , G ) 1 …

机器人舵机:关键要素解析与选择指南

在机器人技术日新月异的今天,舵机作为机器人的核心部件之一,扮演着至关重要的角色。它的性能直接关系到机器人的运动控制、稳定性以及精度等方面。那么,在选择和使用机器人舵机时,我们需要关注哪些关键要素呢?本文将为…

锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞复现(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务,使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice/module/sc…

Nat Commun|直捣黄龙!空间单细胞组学发现外周血靶细胞亚群的组织落脚点

溃疡性结肠炎(Ulcerative colitis,UC)是一种慢性炎症性肠道疾病,其特征是免疫介导的黏膜炎症和上皮损伤。目前UC的治疗策略已经从单纯的症状缓解转变为更精准的靶向治疗。Vedolizumab(VDZ)作为一种抗整合素…

微信原生小程序开发,引入vant-weapp报错,构建npm报错

引入组件报错,构建npm也报错 message: NPM packages not found. Please confirm npm packages which need to build are… 解决方法:把 miniprogram 文件夹里的东西全部拿出来,文件夹目录变成下图所示,再把project.config.json …

FundationPose4090

https://github.com/NVlabs/FoundationPose.git 1.下载数据 参照官方指导下载。权重,测试数据 2.修改代码将c14改为c17 3.获取docker docker pull shingarey/foundationpose_custom_cuda121:latest 然后进入docker,再执行 bash build_all.sh 4.可能…

【探索全球精彩瞬间,尽享海外短剧魅力!海外短剧系统,您的专属观影平台】

🌟 海外短剧系统,带您走进一个全新的视界,让您随时随地欣赏到来自世界各地的精选短剧。在这里,您可以感受到不同文化的碰撞,品味到各种题材的精髓,让您的生活更加丰富多彩! 🎬 精选…

推荐系统三十六式学习笔记:原理篇.内容推荐06|超越标签的内容推荐系统

目录 为什么要做好内容推荐?内容源内容分析和用户分析内容推荐算法总结: 基于内容的推荐系统,有个误区,衡量其性能优劣,评判标准是标签数量够不够。其实标签只是很小一部分。而且即便是标签,衡量质量的方式…

解析Pinterest公司的系统架构设计

最近我偶然发现了一个优秀的 YouTube 视频,“Pinterest 是如何在只有 6 名工程师的情况下扩展到 1100 万用户”(https://www.youtube.com/watch?sicoeqLRKu5i1nnpbI&vQRlP6BI1PFA&featureyoutu.be)以及以下参考文章,“Pinterest 的扩展之路 ——…

Foxmail邮箱的简单实用

Foxmail邮箱是我们办公邮箱中比较有代表性和使用性的一款邮箱软件,今天笔者为大家介绍一下Foxmail邮箱的功能和使用方法。 1、首先我们从安装Foxmail邮箱开始 2、点击安装等待安装成功 3、双击打开 ,出现邮箱设置界面输入我们的账号密码,点击…

wpf工程中加入Hardcodet.NotifyIcon.Wpf生成托盘

1、在项目中用nuget引入Hardcodet.NotifyIcon.Wpf。如下图所示。 2、在App.xaml中创建托盘界面&#xff0c;代码是写在 App.xaml 里面 注意在application中一定要加入这一行代码&#xff1a; xmlns:tb"http://www.hardcodet.net/taskbar" 然后在<Application.R…

关于三极管的理解

三极管工作时出现三个状态&#xff1a;截止、放大、饱和 1. 截止状态&#xff1a;三极管处于关断状态&#xff0c;Vce约等于电源电压 2. 放大状态&#xff1a;三极管处于电流放大状态&#xff0c;0V 3. 饱和状态&#xff1a;三极管处于完全导通状态&#xff0c;Vce≈0V 放大电…

【深度学习入门篇一】阿里云服务器(不需要配环境直接上手跟学代码)

前言 博主刚刚开始学深度学习&#xff0c;配环境配的心力交瘁&#xff0c;一塌糊涂&#xff0c;不想配环境的刚入门的同伴们可以直接选择阿里云服务器 阿里云天池实验室&#xff0c;在入门阶段跑个小项目完全没有问题&#xff0c;不要自己傻傻的在那配环境配了半天还不匹配&a…

汇总!7种大模型的部署方法!

我们如何在本地部署运行私有的开源大型语言模型&#xff08;LLMs&#xff09;呢&#xff1f;本文将向您梳理七种实用的方法及如何选择。 Hugging Face的Transformers 这是一个强大的Python库&#xff0c;专为简化本地运行LLM而设计。其优势在于自动模型下载、提供丰富的代码片段…

【学习笔记】Vue3(Ⅱ)

Vue3(Ⅱ) 3、 进阶 —— 路由 3.1、示例 3.2、to 的两种写法 3.3、命令路由 3.4、嵌套路由 3.5、query 参数 3.6、params 参数 3.7、路由的 props 配置 3.8、replace 属性 3.9、编程式导航 3.10、重定向4、 进阶 —— Pin…

Mac系统使用COLMAP

安装教程 如有出入&#xff0c;参照官网手册最新版 Installation — COLMAP 3.9-dev documentation 首先确保mac上安装了Homebrew 1.安装依赖项 brew install \cmake \ninja \boost \eigen \flann \freeimage \metis \glog \googletest \ceres-solver \qt5 \glew \cgal \s…

AI论文:一键生成论文的高效工具

说到这个问题&#xff0c;那真的得看你对“靠谱”的定义是怎样的啦&#xff1f; 众所周知&#xff0c;写论文是一项极其耗时间的事情&#xff0c;从开始的选题到文献资料搜索查阅&#xff0c;大纲整理等等一大堆的繁杂工作是极艰辛的。用AI写论文就不一样了&#xff0c;自动化…

加密算法详解

对称加密 加密方和解密方都使用了相同的密钥,只要保证密钥不会泄露给第三方, 整个通信过程就是安全的。 ​ (对称加密算法流程) 因为对称加密算法整个过程共享同一个密钥,所以使用特点也比较明显。 优点:算法简单,加密速度快;</

白酒:茅台镇白酒的醇厚口感与细腻层次

茅台镇&#xff0c;中国白酒的璀璨明珠&#xff0c;以其与众不同的自然环境和杰出的酿造技艺&#xff0c;孕育出了无数上好白酒。云仓酒庄豪迈白酒作为茅台镇的杰出品牌&#xff0c;以其醇厚口感和细腻层次&#xff0c;赢得了无数消费者的喜爱。 茅台镇地处赤水河畔&#xff0c…

借助 Aspose.Words,将 Word DOC/DOCX 转换为 TXT

在某些情况下&#xff0c;我们可能需要将数据从一种格式导出为另一种格式。一个常见的要求是将 Word 文档 ( DOC或DOCX ) 转换为纯文本 ( TXT ) 文件。在本文中&#xff0c;我们将学习如何使用 Java Word 到文本转换器库将 Word 转换为 TXT。 Aspose.Words 是一种高级Word文档…