【PyTorch总结】tqdm的使用

article/2025/9/21 7:30:45

文章目录

      • 介绍
      • 安装
      • 使用方法
        • 1.传入可迭代对象
        • 使用`trange`
        • 2.为进度条设置描述
        • 3.手动控制进度
        • 4.tqdm的write方法
        • 5.手动设置处理的进度
        • 6.自定义进度条显示信息
      • 在深度学习中如何使用

介绍

Tqdm Python 进度条库,可以在 Python 长循环中添加一个进度提示信息。用户只需要封装任意的迭代器,是一个快速、扩展性强的进度条工具库。

安装

pip install tqdm

使用方法

1.传入可迭代对象

import time
from tqdm import *
for i in tqdm(range(1000)):time.sleep(.01)   #进度条每0.01s前进一次,总时间为1000*0.01=10s # 运行结果如下
100%|██████████| 1000/1000 [00:10<00:00, 93.21it/s]  

使用trange

trange(i) tqdm(range(i)) 的简单写法

from tqdm import trangefor i in trange(1000):time.sleep(.01)# 运行结果如下
100%|██████████| 1000/1000 [00:10<00:00, 93.21it/s]  

2.为进度条设置描述

for循环外部初始化tqdm,可以打印其他信息:

import time
from tqdm import tqdmpbar = tqdm(["a","b","c","d"])for char in pbar:pbar.set_description("Processing %s" % char) # 设置描述time.sleep(1)  # 每个任务分配1s# 结果如下0%|          | 0/4 [00:00<?, ?it/s]Processing a:   0%|          | 0/4 [00:00<?, ?it/s]Processing a:  25%|██▌       | 1/4 [00:01<00:03,  1.01s/it]Processing b:  25%|██▌       | 1/4 [00:01<00:03,  1.01s/it]Processing b:  50%|█████     | 2/4 [00:02<00:02,  1.01s/it]Processing c:  50%|█████     | 2/4 [00:02<00:02,  1.01s/it]Processing c:  75%|███████▌  | 3/4 [00:03<00:01,  1.01s/it]Processing d:  75%|███████▌  | 3/4 [00:03<00:01,  1.01s/it]Processing d: 100%|██████████| 4/4 [00:04<00:00,  1.01s/it]

3.手动控制进度

import time
from tqdm import tqdmwith tqdm(total=200) as pbar:for i in range(20):pbar.update(10)time.sleep(.1)# 结果如下,一共更新了20次
0%|          | 0/200 [00:00<?, ?it/s]10%|| 20/200 [00:00<00:00, 199.48it/s]15%|█▌        | 30/200 [00:00<00:01, 150.95it/s]20%|██        | 40/200 [00:00<00:01, 128.76it/s]25%|██▌       | 50/200 [00:00<00:01, 115.72it/s]30%|███       | 60/200 [00:00<00:01, 108.84it/s]35%|███▌      | 70/200 [00:00<00:01, 104.22it/s]40%|████      | 80/200 [00:00<00:01, 101.42it/s]45%|████▌     | 90/200 [00:00<00:01, 98.83it/s] 50%|█████     | 100/200 [00:00<00:01, 97.75it/s]55%|█████▌    | 110/200 [00:01<00:00, 97.00it/s]60%|██████    | 120/200 [00:01<00:00, 96.48it/s]65%|██████▌   | 130/200 [00:01<00:00, 96.05it/s]70%|███████   | 140/200 [00:01<00:00, 95.25it/s]75%|███████▌  | 150/200 [00:01<00:00, 94.94it/s]80%|████████  | 160/200 [00:01<00:00, 95.08it/s]85%|████████▌ | 170/200 [00:01<00:00, 93.52it/s]90%|█████████ | 180/200 [00:01<00:00, 94.28it/s]95%|█████████▌| 190/200 [00:01<00:00, 94.43it/s]100%|██████████| 200/200 [00:02<00:00, 94.75it/s]

4.tqdm的write方法

bar = trange(10)
for i in bar:time.sleep(0.1)if not (i % 3):tqdm.write("Done task %i" % i)
# 结果如下Done task 0
0%|                                                                                           | 0/10 [00:10<?, ?it/s]0%|                                                                                           | 0/10 [00:00<?, ?it/s]10%|████████▎                                                                          | 1/10 [00:00<00:01,  8.77it/s]20%|████████████████▌                                                                  | 2/10 [00:00<00:00,  9.22it/s]Done task 30%|                                                                                           | 0/10 [00:10<?, ?it/s]30%|████████████████████████▉                                                          | 3/10 [00:00<00:01,  6.91it/s]40%|█████████████████████████████████▏                                                 | 4/10 [00:00<00:00,  9.17it/s]50%|█████████████████████████████████████████▌                                         | 5/10 [00:00<00:00,  9.28it/s]Done task 60%|                                                                                           | 0/10 [00:10<?, ?it/s]60%|█████████████████████████████████████████████████▊                                 | 6/10 [00:00<00:00,  7.97it/s]70%|██████████████████████████████████████████████████████████                         | 7/10 [00:00<00:00,  9.25it/s]80%|██████████████████████████████████████████████████████████████████▍                | 8/10 [00:00<00:00,  9.31it/s]Done task 90%|                                                                                           | 0/10 [00:11<?, ?it/s]90%|██████████████████████████████████████████████████████████████████████████▋        | 9/10 [00:01<00:00,  8.37it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00,  9.28it/s]

5.手动设置处理的进度

通过update方法可以控制每次进度条更新的进度:

from tqdm import tqdm 
import time
#total参数设置进度条的总长度
with tqdm(total=100) as pbar:for i in range(100):time.sleep(0.1)pbar.update(1)  #每次更新进度条的长度
#结果0%|          | 0/100 [00:00<?, ?it/s]1%|          | 1/100 [00:00<00:09,  9.98it/s]2%|| 2/100 [00:00<00:09,  9.83it/s]3%|| 3/100 [00:00<00:10,  9.65it/s]4%|| 4/100 [00:00<00:10,  9.53it/s]5%|| 5/100 [00:00<00:09,  9.55it/s]...100%|██████████| 100/100 [00:10<00:00,  9.45it/s]

除了使用with之外,还可以使用另外一种方法实现上面的效果:

from tqdm import tqdm
import time#total参数设置进度条的总长度
pbar = tqdm(total=100)
for i in range(100):time.sleep(0.05)#每次更新进度条的长度pbar.update(1)
#别忘了关闭占用的资源
pbar.close()

6.自定义进度条显示信息

通过set_descriptionset_postfix方法设置进度条显示信息:

from tqdm import trange
from random import random,randint
import timewith trange(10) as t:for i in t:#设置进度条左边显示的信息t.set_description("GEN %i"%i)#设置进度条右边显示的信息t.set_postfix(loss=random(),gen=randint(1,999),str="h",lst=[1,2])time.sleep(0.1)

在深度学习中如何使用

下面是一段手写数字识别代码

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.data import DataLoader
import torchvision.datasets as datasets
import torchvision.transforms as transforms
from tqdm import tqdm
class CNN(nn.Module):def __init__(self,in_channels=1,num_classes=10):super().__init__()self.conv1 = nn.Conv2d(in_channels=1,out_channels=8,kernel_size=(3,3),stride=(1,1),padding=(1,1))self.pool = nn.MaxPool2d(kernel_size=(2,2),stride=(2,2))self.conv2 = nn.Conv2d(in_channels=8,out_channels=16,kernel_size=(3,3),stride=(1,1),padding=(1,1))self.fc1 = nn.Linear(16*7*7,num_classes)def forward(self,x):x = F.relu(self.conv1(x))x = self.pool(x)x = F.relu(self.conv2(x))x = self.pool(x)x = x.reshape(x.shape[0],-1)x = self.fc1(x)return x# Set device
device = torch.device("cuda"if torch.cuda.is_available() else "cpu")
print(device)
# Hyperparameters
in_channels = 1
num_classes = 10
learning_rate = 0.001
batch_size = 64
num_epochs = 5# Load Data
train_dataset = datasets.MNIST(root="dataset/",train=True,transform=transforms.ToTensor(),download=True)
train_loader = DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)test_dataset = datasets.MNIST(root="dataset/",train=False,transform=transforms.ToTensor(),download=True)
test_loader = DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)# Initialize network
model = CNN().to(device)# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(),lr=learning_rate)# Train Networkfor epoch in range(num_epochs):# for data,targets in tqdm(train_loadr,leave=False) # 进度显示在一行for data,targets in tqdm(train_loader):# Get data to cuda if possibledata = data.to(device=device)targets = targets.to(device=device)# forwardscores = model(data)loss = criterion(scores,targets)# backwardoptimizer.zero_grad()loss.backward()# gardient descent or adam stepoptimizer.step()

如果不给train_loader加上tqdm会什么也不现实,加入后显示如下:

100%|██████████| 938/938 [00:06<00:00, 152.23it/s]
100%|██████████| 938/938 [00:06<00:00, 153.74it/s]
100%|██████████| 938/938 [00:06<00:00, 155.11it/s]
100%|██████████| 938/938 [00:06<00:00, 153.08it/s]
100%|██████████| 938/938 [00:06<00:00, 153.57it/s]

对应5个eopch的5个进度显示
如果我们想要它显示在一行,在tqdm中添加leave=False参数即可

for data,targets in tqdm(train_loadr,leave=False) # 进度显示在一行

注意
我们将tqdm加到train_loader无法得到索引,要如何得到索引呢?可以使用下面的代码

for index,(data,targets) in tqdm(enumerate(train_loader),total=len(train_loader),leave = True):

我们觉得还有点不太满足现在的进度条,我们得给他加上我们需要的信息,比如准确率,loss值,如何加呢?

for epoch in range(num_epochs):losses = []accuracy = []# for data,targets in tqdm(train_loadr,leave=False) # 进度显示在一行loop = tqdm((train_loader), total = len(train_loader))for data,targets in loop:# Get data to cuda if possibledata = data.to(device=device)targets = targets.to(device=device)# forwardscores = model(data)loss = criterion(scores,targets)losses.append(loss)# backwardoptimizer.zero_grad()loss.backward()_,predictions = scores.max(1)num_correct = (predictions == targets).sum()running_train_acc = float(num_correct) / float(data.shape[0])accuracy.append(running_train_acc)# gardient descent or adam stepoptimizer.step()loop.set_description(f'Epoch [{epoch}/{num_epochs}]')loop.set_postfix(loss = loss.item(),acc = running_train_acc)

在这里插入图片描述
可以看到我们的acc和epoch 还有loss都打在了控制台中。以上就是相关tqdm的使用


http://chatgpt.dhexx.cn/article/OV3PbFrC.shtml

相关文章

Python的Tqdm模块——进度条配置

tqdm官网地址&#xff1a;https://pypi.org/project/tqdm/ Github地址&#xff1a;https://github.com/tqdm/tqdm 简介 Tqdm 是一个快速&#xff0c;可扩展的Python进度条&#xff0c;可以在 Python 长循环中添加一个进度提示信息&#xff0c;用户只需要封装任意的迭代器 tqd…

tqdm 简介及正确的打开方式

tqdm 简介及正确的打开方式 查遍了网上资料&#xff0c;发现绝大中文的讲解全都是一手带过&#xff0c;还称详细&#xff0c;真是醉了&#xff0c;于是有该文&#xff0c;也算给自己做个笔记 1. 什么是tqdm&#xff1f; tqdm是一个快速的&#xff0c;易扩展的进度条提示模块&a…

tqdm库

tqdm库 文章目录 tqdm库如何安装如何使用1.基于迭代的进度条2.手动设置进度条 如何在Pandas中使用进度条如何在keras中使用进度条如何使用Notebook优化的进度条和层级进度条如何为文件存储设置进度条 简要介绍&#xff1a; tqdm是一个进度条可视化库&#xff0c;可以帮助我们监…

tqdm的使用和例子

1. tqdm的介绍 有时候在使用Python处理比较耗时操作的时候&#xff0c;为了便于观察处理进度&#xff0c;这时候就需要通过进度条将处理情况进行可视化展示&#xff0c;以便我们能够及时了解情况。 tqdm就能非常完美的支持和解决这些问题&#xff0c;可以实时输出处理进度而且…

一个被忽视的Python神器 - Tqdm

1. 什么是Tqdm 在日常工作和学习中&#xff0c;经常需要观察当前任务的执行进度&#xff0c;尤其是一个执行时间很长的任务&#xff0c;如果能够有进度条实时的显示当前的任务进度&#xff0c;那么将非常方便。 Tqdm 是一个快速&#xff0c;可扩展的Python进度条&#xff0c;…

tqdm 详解

文章目录 1. 简介2. 使用方法3. 实例 - 手写数字识别 1. 简介 tqdm是 Python 进度条库&#xff0c;可以在 Python长循环中添加一个进度提示信息。用户只需要封装任意的迭代器&#xff0c;是一个快速、扩展性强的进度条工具库。 2. 使用方法 传入可迭代对象 import time from…

idea方法注释的快捷键设置idea自定义注释设置

作者: yibox_qcby目录 效果展示配置步骤第一步第二步第三步第四步第五步第六步 完成 效果展示 配置步骤 第一步 第二步 第三步 第四步 注意第一行不是/** *** ClassName $className$* Description : 功能说明* $params$* Return : $return$* Author : 作者* Date : $DATE$ $…

idea中使用注释快捷键的问题及解决办法

问题描述 在idea中&#xff0c;使用注释快捷键会产生在注释前面会有缩进&#xff0c;这种缩进对于有着强迫症的我简直受不了 在按照网上其他的教程进行相关设置之后还是出现这样的问题 解决方法 我在使用中偶然发现idea注释的快捷键除了行注释&#xff08;Ctrl/&#xff…

idea文档注释的快捷键带参数

注意&#xff1a;为了大家能逐步了解 对这个小功能有个熟悉的过程 &#xff08;其实是作者比较懒 不想从头到尾重新截图 ) 发现问题会在文章未陆续更新 建议把整篇文章都看完 如果懒得看过程 看完开头后 文章最后代码直接复制进去就好了 输入 /** 按回车&#xff0c;当然这肯定…

IDEA设置类和方法的注释快捷键

一、设置类的注释快捷键 1.打开file->setting->Editor->Filr and Code Templates->Includes->File Header&#xff0c;如下图所示&#xff1a; 2.注释模板参考&#xff1a; /**1. description: 2. author: ManolinCoder3. time: ${DATE} */ 3.创建类时候自动…

修改idea快捷键注释样式

打开设置 找到Editor -> Code Style -> Java 以修改xxx.java文件注释样式&#xff0c;点击其它位置&#xff0c;修改其它语言注释样式 找到Code Generation 取消Line comment at first column和Block comment at first column&#xff0c;勾上Add a space at line commen…

idea 方法注释的快捷键设置

1.打开设置setting->Editor->Live Templates 2.然后点击号&#xff0c;选择第二个&#xff0c;设置一个自定义的组&#xff0c;输入名字&#xff0c;这里我叫mytemp 3.选定刚才创建的组&#xff0c;再次点击号&#xff0c;创建一个模板&#xff0c;重点&#xff0c;写模板…

IDEA的三种注释快捷键

一.行注释 1.1快捷键&#xff1a;Ctrl/ 1.2效果演示&#xff1a; 二.块注释 2.1快捷键&#xff1a;CtrlShift/ 2.2效果演示&#xff1a; 三.方法说明注释 3.1快捷键&#xff1a;输入/** ,点击“Enter”&#xff0c;自动根据参数和返回值生成注释模板

【IDEA】idea注释快捷键不生效

文章目录 配置注释快捷键1. 新建 template Group&#xff0c;我这里创建了一个名为 user 的模板组2.创建这个模板组里的快捷键3. 验证4. 成功啦 配置注释快捷键 1. 新建 template Group&#xff0c;我这里创建了一个名为 user 的模板组 2.创建这个模板组里的快捷键 3. 验证 发…

mac下 idea 注释快捷键冲突

你好&#xff0c;我是悦创。 博客首发&#xff1a;https://bornforthis.cn/posts/28.html 打开偏好设置&#xff0c;将冲突的快捷键关掉&#xff0c;就可以解决 idea 使用注释快捷键&#xff0c;会打开 help 页面的问题: 欢迎关注我公众号&#xff1a;AI悦创&#xff0c;有…

idea注释快捷键(三种)

①单行注释 ctrl/ ②多行注释 ctrlshift/ ③文档注释&#xff0c;方法或者累说明注释 /** enter键 扩展&#xff1a;eclipse企业版xml文件注释&#xff1a;

IDEA注释快捷键

IDEA可以使用快捷键添加行注释Ctrl/、块注释CtrlShift/&#xff0c;还可以快速生成类注释、方法注释等,下面就介绍这几种快捷键的用法. 1、Ctrl/ 行注释 2、ctrl shift / 块注释 3、方法或类注释 在一个方法或类的开头&#xff0c;输入/**&#xff0c;然后按回车,自动根据…

idea注释的快捷键三种方式

1、第一种 单行注释&#xff08;ctrl/ &#xff09; 光标处于当前需要写注释的这一行&#xff0c;在这行任何位置都可以&#xff0c;可以调整的&#xff0c;ctrl/ 即可实现单行注释&#xff0c;如图&#xff0c;当想取消时&#xff0c;也可以使用ctrl/取消行注释 2、第二种&a…

IntelliJ IDEA添加注释常用的快捷键

IDEA可以使用快捷键添加行注释Ctrl/、块注释CtrlShift/&#xff0c;还可以快速生成类注释、方法注释等,下面就介绍这几种快捷键的用法. [1]行注释Ctrl/ 首先你的光标要处于这一行&#xff0c;处于这行的哪个位置都可以,按Ctrl/&#xff0c;就可以往行首添加"//"&am…

IDEA中注解注释快捷键及模板

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录 单行注释多行注释文档注释(块注释)方法说明注解自动…