在 PyTorch 训练中使用 `tqdm` 显示进度条


在 PyTorch 训练中使用 tqdm 显示进度条

在深度学习的训练过程中,实时查看训练进度是非常重要的,它可以帮助我们更好地理解训练的效率,并及时调整模型或优化参数。使用 tqdm 库来为训练过程添加进度条是一个非常有效的方式,本文将介绍如何在 PyTorch 中结合 tqdm 来动态显示训练进度。

1. 安装 tqdm

首先,如果你还没有安装 tqdm,可以通过 pip 命令进行安装:

pip install tqdm

tqdm 是一个非常轻量级的 Python 库,它可以快速地为循环加上进度条,并提供非常友好的终端显示效果。

2. 如何在训练循环中使用 tqdm

2.1 包装 train_loader 和显示进度条

在训练过程中,最常见的任务是通过数据加载器(train_loader)来批量读取训练数据并进行前向传播、反向传播、优化等操作。为了显示训练的进度条,我们可以使用 tqdm 来包装 train_loader。这样,我们就能在每次读取数据时自动更新进度条。

示例代码:

from tqdm import tqdm
import torch
import torch.nn as nn
import torch.optim as optim# 假设模型、损失函数、优化器等已经定义好
model = MyModel().to(device)
optimizer = optim.Adam(model.parameters())
criterion = nn.CrossEntropyLoss()# 假设 train_loader 已经定义好
train_loader = ...num_epochs = 10# 训练循环
for epoch in range(num_epochs):model.train()  # 设置模型为训练模式running_loss = 0.0correct = 0total = 0# 使用 tqdm 包装 train_loader,自动显示进度条for batch_idx, (audio, labels) in enumerate(tqdm(train_loader, desc=f"Epoch {epoch+1}/{num_epochs}", ncols=100)):audio = audio.to(device)labels = labels.to(device)# 前向传播optimizer.zero_grad()outputs = model(audio)# 计算损失loss = criterion(outputs, labels)# 反向传播loss.backward()optimizer.step()# 更新统计信息running_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()# 输出每个 epoch 的总结信息print(f"\nEpoch {epoch+1} complete. Loss: {running_loss/len(train_loader):.4f}, Accuracy: {100 * correct / total:.2f}%")

2.2 进度条的显示效果

当你使用 tqdm 包装 train_loader 时,进度条会自动显示。每个 epoch 内,tqdm 会根据 train_loader 的批次数量动态更新进度条。显示的内容通常包括:

  • 当前 epoch 和 batch 的编号
  • 已完成的批次数量
  • 当前 batch 的损失值
  • 进度百分比
  • 剩余时间估计
进度条示例:
Epoch 1/10: 100%|█████████████████████████████████████████████████████████████████████| 2043/2043 [03:30<00:00,  9.70it/s]

进度条字段说明:

  • Epoch 1/10: 表示当前是第 1 个 epoch,总共有 10 个 epoch。
  • 100%: 表示该 epoch 的训练已经完成。
  • █████████████████████████████████████████████████████████████████████: 代表进度条,显示当前训练的进度。
  • 2043/2043: 当前 epoch 中处理的 batch 数,表示已处理 2043 个 batch,总共有 2043 个。
  • 03:30<00:00: 训练已经花费的时间(03:30)和预计剩余时间(<00:00)。
  • 9.70it/s: 表示每秒处理的批次数(即训练速度)。

2.3 进度条中的其他信息

TQDM 还可以显示更多的训练相关信息,例如:

  • 损失(Loss):当前 batch 的损失值。
  • 训练速度(it/s):每秒处理的批次数。
  • 估算剩余时间:根据当前训练速度估算的剩余时间。

这些信息可以帮助你在训练过程中更好地评估模型的学习情况。

3. 总结

使用 tqdm 包装 train_loader 可以极大地提高训练过程中的可视化效果,使得我们能够实时了解训练的进展。进度条的显示不仅可以告诉我们当前 epoch 的训练进度,还能够实时更新损失、准确率等信息,帮助我们更加高效地调试和优化模型。

如果你在进行长期训练时,tqdm 显示的剩余时间可以帮助你更好地掌控时间管理。在大规模训练时,动态显示进度条也能有效提升训练的可操作性和可视化体验。

4. 常见错误:TypeError: 'module' object is not callable

解决方法看: 我的另一篇博客

5. 参考文献

  • tqdm 官方文档
  • PyTorch 官方文档

文章包含了 tqdm 的基本用法以及在 PyTorch 训练中如何集成它,应该能帮助你快速理解如何提高训练过程的可视化效果。如果你有其他细节需要补充或修改,评论区告诉我!

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

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

相关文章

java:aqs实现自定义锁

aqs采用模板方式设计模式&#xff0c;需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

day11_JS初识_语法

day11_JS初识_语法 今日学习目标 : 入门HarmonyOS生态中 , ArkTS最基础的语法 JavaScript , 今天最主要的学习内容了解和掌握JavaScript的基础语法 , 并灵活的再后面开发过程进行使用 今日学习目标 什么是JavaScript JavaScript组成 JavaScript执行环境 JavaScript代码的书…

[C++]:IO流

1. IO 流 1.1 流的概念 在C中&#xff0c;存在一种被称为“流”的概念&#xff0c;它描述的是信息流动的过程&#xff0c;具体来说就是信息从外部输入设备&#xff08;比如常见的键盘&#xff09;传输到计算机内部&#xff08;像内存区域&#xff09;&#xff0c;以及信息从内…

基于Kubernetes编排部署EFK日志收集系统

基于K8S编排部署EFK日志收集系统 案例分析 1. 规划节点 节点规划&#xff0c;见表1。 表1 节点规划 IP主机名k8s版本信息192.168.100.3masterv1.25.2192.168.100.4nodev1.25.2 2. 基础准备 Kubernete环境已安装完成&#xff0c;将提供的软件包efk-img.tar.gz上传至master…

Kubernetes 还是 SpringCloud?

前些年&#xff0c;随着微服务的概念提出以及落地&#xff0c;不断有很多的公司都加入到了这场技术革新中&#xff0c;现在可谓是人人都在做和说微服务。 提到微服务&#xff0c;Java栈内&#xff0c;就不得不提SpringBoot、SpringCloud、Dubbo。 近几年&#xff0c;随着Cloud …

ChatGPT如何辅助academic writing?

今天想和大家分享一篇来自《Nature》杂志的文章《Three ways ChatGPT helps me in my academic writing》&#xff0c;如果您的日常涉及到学术论文的写作&#xff08;writing&#xff09;、编辑&#xff08;editing&#xff09;或者审稿&#xff08; peer review&#xff09;&a…

101.【C语言】数据结构之二叉树的堆实现(顺序结构) 2

目录 1.堆删除函数HeapPop 一个常见的错误想法:挪动删除 正确方法 设计堆顶删除函数HeapPop 解析向下调整函数AdjustDown 核心思想 向下调整最多次数 向下调整的前提 代码实现 提问 细节分析 2.测试堆删除函数 运行结果 3.引申问题 运行结果 4.练习 分析 代码…

【机器学习chp8】统计学习理论

前言 本文遗留问题&#xff1a;无 目录 前言 一、结构风险最小化 1、最小化风险决策 2、分类与回归中的最小化风险决策 3、统计学习的基本目标 4、无免费午餐定理 5、Hoeffding不等式 &#xff08;1&#xff09;背景及定义 &#xff08;2&#xff09;Hoeffding不等式…

Springboot启动报错’javax.management.MBeanServer’ that could not be found.

报错信息如下图&#xff1a; 解决办法&#xff1a; 1.在你的.yml文件或者.properties文件里加上如下配置&#xff1a; properties: management.endpoints.jmx.enabledfalseyml: management:endpoints:jmx:enabled: false2.如果以上方法行不通&#xff0c;在springboot启动类…

英语知识网站:Spring Boot技术构建

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

英伟达推出了全新的小型语言模型家族——Hymba 1.5B

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

spring boot2.7集成OpenFeign 3.1.7

1.Feign Feign是一个声明式web服务客户端。它使编写web服务客户端更容易。要使用Feign&#xff0c;请创建一个接口并对其进行注释。它具有可插入注释支持&#xff0c;包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持&…

Jmeter中的前置处理器

5&#xff09;前置处理器 1--JSR223 PreProcessor 功能特点 自定义数据处理&#xff1a;使用脚本语言处理请求数据&#xff0c;实现高度定制化的数据处理和生成。动态数据生成&#xff1a;在请求发送前生成动态数据&#xff0c;如随机数、时间戳等。变量设置&#xff1a;设置…

git(Linux)

1.git 三板斧 基本准备工作&#xff1a; 把远端仓库拉拉取到本地了 .git --> 本地仓库 git在提交的时候&#xff0c;只会提交变化的部分 就可以在当前目录下新增代码了 test.c 并没有被仓库管理起来 怎么添加&#xff1f; 1.1 git add test.c 也不算完全添加到仓库里面&…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解&#xff1a;池就是容器&#xff0c;容器中存放了多个连接对象 使用原因&#xff1a; 1.优化创建和销毁连接的时间&#xff08;在项目启动时创建连接池&#xff0c;项目销毁时关闭连接池&#xff09; 2.提高连接对象的复用率 3.有效控制项目中连接的…

Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1

Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后&#xff0c;打开mac终端&#xff0c;进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…

Envoy 源码解析(一):Envoy 整体架构、Envoy 的初始化

本文基于 Envoy 1.31.0 版本进行源码学习 1、Envoy 整体架构 1&#xff09;、核心组件 Envoy 包含以下四个核心组件&#xff1a; Listener&#xff08;监听器&#xff09;&#xff1a;定义了 Envoy 如何处理入站请求。一旦连接建立&#xff0c;请求会被传递给一组过滤器进行处…

【VUE3】VUE组合式(响应式)API常见语法

pnpm常用命令 pnpm i //pnpm安装VUE3常见语法汇总 ref() //const count ref(0) //count.value&#xff08;访问值&#xff0c;包括对象要加.value&#xff09; //任何类型的值&#xff0c;包括深层嵌套的对象或则JS内置数据结构 await nextTick() //要等待 DOM 更新完成后…

CGAL CGAL::Polygon_mesh_processing::self_intersections解析

CGAL::Polygon_mesh_processing::self_intersections 是用于检测多边形网格&#xff08;Polygon Mesh&#xff09;中的自相交的函数。自相交是指网格中的某些面&#xff08;例如三角形&#xff09;与同一网格中的其他面交叉的情况。这种情况通常是不期望的&#xff0c;因为它会…

⭐ Unity 资源管理解决方案:Addressable_ Demo演示

一、使用Addressable插件的好处&#xff1a; 1.自动管理依赖关系 2.方便资源卸载 3.自带整合好的资源管理界面 4.支持远程资源加载和热更新 二、使用步骤 安装组件 1.创建资源分组 2.将资源加入资源组 3.打包资源 4.加载资源 三种方式可以加载 using System.Collections…