tqdm高级使用方法(类keras进度条)(代码片段)

Scc_hy Scc_hy     2022-10-22     180

关键词:

简介

在很多场景,我们希望对一个进度条标识其运行的内容(set_description),同时也希望在进度条中增加一些信息,如模型训练的精度等。本文就将基于tqdm,在实际应用中充实进度条。

一、简单示例

from tqdm import tqdm

tq_bar = tqdm(range(10))
for idx, i in enumerate(tq_bar):
    acc_ = i*10
    loss = 1/((i+1)*10)
    tq_bar.set_description(f'SimpleLoop [idx+1]')
    tq_bar.set_postfix(dict(acc=f'acc_%', loss=f'loss:.3f'))

  • 结果
SimpleLoop [10]: 100%|██████████████████████████████████| 10/10 [00:01<00:00,  8.30it/s, acc=90%, loss=0.010]

二、在深度学习训练中使用(pytorch 类似 keras)


import torch
from torch import nn
from torch.nn import functional as F
from torch.optim import AdamW, Adam
from torch.utils.data import Dataset, TensorDataset, DataLoader
import torchvision as tv
from torchvision import transforms

class simpleCNN(nn.Module):
    def __init__(self, input_dim=3, n_class=10):
        super(simpleCNN, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(input_dim, 32, kernel_size=7, padding=2,dilation=2, bias=False),
            nn.BatchNorm2d(32),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(3, 2, 1)
        )
        self.clf = nn.Sequential(
            nn.Linear(4608, 128),
            nn.ReLU(inplace=True),
            nn.Dropout(0.2),
            nn.Linear(128, 64),
            nn.ReLU(inplace=True),
            nn.Dropout(0.2),
            nn.Linear(64, n_class)
        )

    def forward(self, x):
        out = self.features(x)
        out = out.view(out.size(0), -1)
        return self.clf(out)


transform = transforms.Compose([transforms.ToTensor(),#转为tensor
                                transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),#归一化
                                ])
dt = tv.datasets.CIFAR10(train=True, download=True, root=r'D:\\work\\my_project\\play_data', transform=transform)
# dt = tv.datasets.CIFAR10(train=True, download=False, root=r'D:\\work\\my_project\\play_data', transform=transform)
dt_loader = DataLoader(dt, batch_size=256)

model = simpleCNN(3, 10)
loss_func = nn.CrossEntropyLoss()
optm = AdamW(model.parameters(), lr=1e-3)

for ep in range(5):
    one_batch_bar = tqdm(dt_loader)
    one_batch_bar.set_description(f'[ epoch: ep+1 ]')
    step_counts = 0
    step_loss_sum = 0
    step_right = 0
    step_samples = 0
    for tmp_x, tmp_y in one_batch_bar:
        # forward
        optm.zero_grad()
        step_pred = model(tmp_x)
        step_loss = loss_func(step_pred, tmp_y)
        loss_print = step_loss.detach().numpy()
        step_right_i = (torch.argmax(step_pred, dim=1) == tmp_y).detach().numpy().sum()
        
        # backword
        step_loss.backward()
        optm.step()
        
        # info
        step_counts += 1
        step_loss_sum += loss_print
        step_right += step_right_i
        step_samples += len(tmp_y)
        one_batch_bar.set_postfix(dict(
            loss=f'step_loss_sum/step_counts:.5f',
            acc=f'step_right/step_samples*100:.2f%'
        ))

  • 结果
[ epoch: 1 ]: 100%|██████████████████████████████████████████████████████| 196/196 [00:39<00:00,  4.95it/s, loss=1.73634, acc=36.93%] 
[ epoch: 2 ]: 100%|██████████████████████████████████████████████████████| 196/196 [00:38<00:00,  5.13it/s, loss=1.43507, acc=48.46%] 
[ epoch: 3 ]: 100%|██████████████████████████████████████████████████████| 196/196 [00:45<00:00,  4.34it/s, loss=1.30025, acc=53.85%] 
[ epoch: 4 ]: 100%|██████████████████████████████████████████████████████| 196/196 [00:37<00:00,  5.28it/s, loss=1.22050, acc=57.06%] 
[ epoch: 5 ]: 100%|██████████████████████████████████████████████████████| 196/196 [00:42<00:00,  4.65it/s, loss=1.16387, acc=58.78%]

多处理:使用 tqdm 显示进度条

】多处理:使用tqdm显示进度条【英文标题】:Multiprocessing:usetqdmtodisplayaprogressbar【发布时间】:2017-06-1416:17:20【问题描述】:为了使我的代码更“pythonic”和更快,我使用“多处理”和一个映射函数来发送它a)函数和b)迭代范... 查看详情

python使用tqdm实现程序运行进度条(代码片段)

python使用tqdm实现程序进度条tqdm源自阿拉伯语单词taqaddum()意思是“进步”,是西班牙语中“我非常爱你”的缩写。tqdmderivesfromtheArabicwordtaqaddum()whichcanmean“progress,”andisanabbreviationfor“Iloveyousomuch”inSpanish(tequierodemasiado) 查看详情

如何使用 tqdm 在 python 中添加进度条

】如何使用tqdm在python中添加进度条【英文标题】:howtoaddprogressbarinpythonusingtqdm【发布时间】:2020-06-2420:44:05【问题描述】:我有一个列出文件和目录并复制所需的脚本。现在我需要添加一个进度条来显示使用tqdm包的复制进度问... 查看详情

python进度条tqdm的用法(代码片段)

Python进度条tqdm详细介绍前言1.用tqdm子模块2.用trange子模块,效果和用tqdm子模块一样3.手动设置处理进度前言有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进... 查看详情

tqdm库,给你的python代码加个进度条

参考技术Atqdm在阿拉伯语中的意思是“进展”,是一个快速、扩展性强的进度条工具库,用户只需要封装任意的迭代器tqdm(iterator)。在迭代器上直接使用tqdm库trange(i)是对tqdm(range(i))特殊优化过的实例。 查看详情

python进度条(tqdm)(代码片段)

查看详情

进度条模块tqdm介绍(代码片段)

tqdm安装pipinstalltqdm代码示例:fromtqdmimporttqdmtotal=10000#总迭代次数loss=totalwithtqdm(total=total,desc="进度条")aspbar:foriinrange(total):loss-=1pbar.set_postfix('loss 查看详情

进度条模块tqdm介绍(代码片段)

tqdm安装pipinstalltqdm代码示例:fromtqdmimporttqdmtotal=10000#总迭代次数loss=totalwithtqdm(total=total,desc="进度条")aspbar:foriinrange(total):loss-=1pbar.set_postfix('loss 查看详情

tqdm任务进度条模块(代码片段)

tqdm模块用于在迭代任务中,显示任务进度条,并记录每次迭代耗时; 不是很常用的模块,这里做简单记录; tqdm常用的有两个方法:tqdm.tqdm和tqdm.trange tqdm.tqdm(iterable)fromtqdmimporttqdmimporttimea=[1,2,3]foriintqdm(a):print(‘打印a... 查看详情

Python enumerate() tqdm 读取文件时的进度条?

】Pythonenumerate()tqdm读取文件时的进度条?【英文标题】:Pythonenumerate()tqdmprogress-barwhenreadingafile?【发布时间】:2018-07-0408:47:52【问题描述】:当我使用此代码迭代打开的文件时,我看不到tqdm进度条:withopen(file_path,\'r\')asf:fori,linei... 查看详情

python超方便的迭代进度条(tqdm)(代码片段)

Tqdm是一个智能进度表。它能够显示所有可迭代对象当前执行的进度。你只需要用tqdm对可迭代对象进行封装后再遍历即可实现进度条功能,比如说:fromtqdmimporttqdmforiintqdm(range(10000)):...显示效果如下:76%|██████... 查看详情

带 tqdm 的 asyncio aiohttp 进度条

】带tqdm的asyncioaiohttp进度条【英文标题】:asyncioaiohttpprogressbarwithtqdm【发布时间】:2016-06-1820:21:04【问题描述】:我正在尝试集成tqdm进度条来监控在Python3.5中使用aiohttp生成的POST请求。我有一个工作进度条,但似乎无法使用as_com... 查看详情

给python添加进度条|给小白的tqdm精炼实例!(代码片段)

tqdm包教包会!给Python添加进度条|给小白的tqdm精炼实例!假设我们有一个循环:foriinrange(100):do_something()#这里做某些事假设do_something()很慢,且运行时间不稳定,当我们运行时,我们并不知道运行到哪里了。我们引入一个进度条... 查看详情

复制文件时在控制台中显示进度条。在 python 中使用 tqdm

】复制文件时在控制台中显示进度条。在python中使用tqdm【英文标题】:displayprogressbarinconsolewhilecopyingfiles.usingtqdminpython【发布时间】:2020-10-0203:47:49【问题描述】:我有一个python脚本,它从源文件夹读取并使用shutil包将现有文件... 查看详情

为啥每次迭代我的 tqdm 进度条都显示在新行上?

】为啥每次迭代我的tqdm进度条都显示在新行上?【英文标题】:Whydoesmytqdmprogressbardisplayonanewlineforeveryiteration?为什么每次迭代我的tqdm进度条都显示在新行上?【发布时间】:2020-06-2410:44:59【问题描述】:我正在从事一个个人项... 查看详情

python和selenium怎么判断进度条

...,添加一个tdqm()即可。执行上一步的操作,就可以观察到进度条。selenium:拿到浏览器滚动条的js代码,然后执行,就可以看到进度条.通过模拟键盘的形式去滚动屏幕,就可以看到进度条其中通过driver.execute_script()执行js代码... 查看详情

使用 jupyterlab 在 Jupiter 笔记本中使用 read_csv 时如何使用 tqdm 显示进度条

...用jupyterlab在Jupiter笔记本中使用read_csv时如何使用tqdm显示进度条【英文标题】:HowdoIusetqdmtoshowprogressbarswhenusingread_csvinaJupiternotebookusingjupyterlab【发布时间】:2021-07-0302:54:04【问题描述】:我想使用read_csv和pandas读取一个巨大的csv... 查看详情

python进度条:tqdm

...为epoch数或者一个epoch中迭代的次数desc传入str类型,作为进度条标题(类似于说明)leave在迭代结束时保留进度条的所有痕迹,否则结束后会消失。默认为true,默认就可以dynamic_ncols进度条的宽高随着显示窗口同步改变,默认为fal... 查看详情