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

TensorBoard

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

模块导入

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

from torch.utils.tensorboard import SummaryWriter

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

import os

日志记录文件的创建

import oslog_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.0correct = 0total = 0start_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 = 0for p in model.parameters():param_norm = p.grad.data.norm(2)total_norm += param_norm.item() ** 2total_norm = total_norm ** 0.5writer.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.0correct = 0total = 0all_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 / totalif val_accuracy > best_val_accuracy:# 当新的最佳验证准确率出现时,保存模型状态字典best_val_accuracy = val_accuracybest_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/就可以成功加载面板了
在这里插入图片描述

可能会遇到的问题

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

方案设计|汽车轮胎数显胎压计方案

一、引言 数显轮胎胎压计是一个专门测量车辆轮胎气压的工具,它具有高精度测量的功能,能够帮助快速准确获取轮胎气压正确数值,保证轮胎使用安全。本文将对数显轮胎胎压计的方案技术进行分析,包括其基本原理、硬件构成、软件设计等方…

架构学习:什么是业务架构图?如何画业务架构图?

6.1~6.18,艾威618年中大促,钜惠来袭!想报课但还没下手的小伙伴,都可以行动起来啦!活动规则还是一如既往的简单、粗暴——直接立减、返现、抽奖以及送礼品!了解活动详情,请点击这里》》 业务架构…

实验9 浮动静态路由配置

--名称-- 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 浮动静态路由也是一种特殊的静态路由,主要考虑链路冗余。浮动静态路由通过配置一条比主路由优先级低的静态路由,用于保证在主路由失效的情况下,…

代码随想录 day27|day28|day29

回溯2 切割问题:是在每个节点判断是否是要剪枝收割元素。 startidx 是切割起点,i是本次切割终点 分割回文串 复原ip地址 非递减子序列 都是在树的节点依照题意判断,之后决定是否剪枝。 也就是都有if判断来剪枝 。 下面是非递减子序列。 下…

前端将xlsx转成json

第一种方式,用js方式 1.1先安装插件 万事都离不开插件的支持首先要安装两个插件 1.2. 安装xlsx cnpm install xlsx --save注:这块我用的cnpm,原生的是npm,因为镜像的问题安装了cnpm,至于怎么装网上一搜一大堆 1.3安…

用langchain搭配最新模型ollama打造属于自己的gpt

langchain 前段时间去玩了一下langchain,熟悉了一下大模型的基本概念,使用等。前段时间meta的ollama模型发布了3.0,感觉还是比较强大的,在了解过后,自己去用前后端代码,调用ollama模型搭建了一个本地的gpt应用。 核心逻辑 开始搭…

Vue 封装elementUI的el-popover

1.封装公共组件 <template><div class"confirm-popover disInlineBlock ml10"><el-popover placement"bottom" v-model"visible" :trigger"triggerType"><div class"confirm-popover-popover"><…

vue3中进度条上加高亮圆点

实现效果 小圆点基于进度条定位&#xff08;left&#xff09;。 实现代码 <template><!-- 这块代码实现的功能&#xff1a;progressData遍历的年份进度数组&#xff0c;展示每年完成的进度--><ul><li v-for"(item, index) in progressData" :k…

Unity VR 零基础开发之 Pico4 MR

一、新建Unity2021.3.37 3D工程 二、切换到Android安卓平台 1、点击Unity编辑器左上角的Flie后&#xff0c;选择Build Setting选项。 2、弹出弹窗后&#xff0c;点击Android选项&#xff0c;然后再点击Switch Platform按钮切换成安卓平台。 3、切换完成后Android选项后面会显示…

3. QGis二次开发项目实践一之解决“无法定位程序输入点“

前言 本章讲述实现本项目实现过程中遇到的QGis二次开发库版本和Qt以及其他动态库的版本匹配问题问题复现 本项目是要作为一个子模块集成到用户的项目中本项目最初的开发环境为QGis3.28+Qt5.15.2,而当时并未问清楚用户开发环境所以交付给用户之后,出现了类似下图的问题 出现该…

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

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

php7.3安装phalcon扩展

php7安装3.4版本的phalcon扩展 适用于Centos6.x和Centos7.x系统&#xff0c;php使用7.1版本&#xff0c;wlnmp一键包已支持该扩展 phalcon扩展包地址&#xff1a;https://github.com/phalcon/cphalcon &#xff08;git clone 有可能连接不上&#xff09; 1、安装所需依赖&a…

Linux Kernel nf_tables 本地权限提升漏洞(CVE-2024-1086)

文章目录 前言声明一、netfilter介绍二、漏洞成因三、漏洞危害四、影响范围五、漏洞复现六、修复方案临时解决方案升级修复方案 前言 2024年1月&#xff0c;各Linux发行版官方发布漏洞公告&#xff0c;修复了一个 netfilter:nf_tables 模块中的释放后重用漏洞&#xff08;CVE-…

基于语音识别的智能电子病历(其他)CC、HPI、ROS案例分析

门诊使用基于语音识别的智能电子病历相对要少一些。很多系统的门诊系统包含了丰富的模版&#xff0c;美国退伍军人医院在非常早的时候&#xff08;2010年之前&#xff09;就通过使用大量的模版来进行处理门诊的数据录入。下面分析中的截图也是来自一些美国退伍军人医院的系统。…

网络高频攻击手段与基本防护措施总结

主要攻击手段 一、云平台攻击 云平台攻击是指针对云服务器的恶意行为&#xff0c;旨在获取非法访问权限、窃取敏感数据或者破坏服务器的正常运行。云平台攻击的形式多样&#xff0c;以下是对云平台攻击的一些主要类型和特点的详细分析&#xff1a; 攻击类型&#xff1a; 凭据…

idea修改国际化语言教程

教程背景 第一种&#xff0c;如果以前的项目已经有国际化语言了&#xff0c;现在的项目是导入的。 第二种&#xff0c;你中途把idea删除卸载了&#xff0c;在安装了别的版本&#xff0c;把这个项目导入进来后的。 第三种&#xff0c;你下载或复制的别人的项目。 以上这三种…

如何实现vue项目不同屏幕适配(2024最新)

文章目录 1.下载插件&#xff0c;修改px单位为rem单位2.配置vue.config.js(如下图位置所示)3.屏幕自适应4.项目实际使用 1.下载插件&#xff0c;修改px单位为rem单位 npm i postcss-plugin-px2rem2.配置vue.config.js(如下图位置所示) 注意在根目录下&#xff0c;如果没有该文…

MySQL深分页,limit 100000,10 优化

文章目录 一、limit深分页为什么会变慢二、优化方案2.1 通过子查询优化&#xff08;覆盖索引&#xff09;回顾B树结构覆盖索引把条件转移到主键索引树 2.2 INNER JOIN 延迟关联2.3 标签记录法&#xff08;要求id是有序的&#xff09;2.4 使用between...and... 我们日常做分页需…

引擎:UI

一、控件介绍 Button 按钮 创建一个按钮 按钮禁用 精灵模式 颜色模式 缩放模式 绑定点击事件 EditBox 输入框 Layout 布局 支持水平排列、垂直排列、背包排列 PageView 页面视图 ProgressBar 进度条 RichText 富文本 绑定点击事件 事件可以被其它标签包裹 图文混排 Scroll…

AG32 MCU+FPGA 使用感受

前言&#xff1a; 笔者35了&#xff0c;10多年前开始玩单片机/FPGA啥的&#xff0c;从现在回想过去&#xff0c;眼下真的是我们国家微电子发展的好时候。各种各样的国产单片机&#xff0c;FPGA啥的&#xff0c;想想本科的时候用的Freescale&#xff0c;后来用的STM32&#xff0…