46

Python常用库—tqdm

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI3MzQ3NDMzNw%3D%3D&%3Bmid=2247483915&%3Bidx=1&%3Bsn=89fd6743f6b4962efd83e3667548d323
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

tqdm

Tqdm库比较常用,用于显示进度条。

简单用法:

from tqdm import tqdm

 for i in tqdm(range(2)):
 pass

100%|███████████████████| 2/2 [00:00<00:00, 1998.72it/s]

从上面可以看到生成一个长度为2的列表传入tqdm中,在for中迭代,此时输出了进度,这里tqdm全部使用了默认参数,默认进度条样式就是如上所示; 通常默认进度条所输出的信息并不满足我们的需求,tqdm还可以定制进度条样式;

tdqm数据参数支持的数据类型是可迭代的对象iterable,在Python中默认的可迭代对象有:

list、str、tuple、dict、file、xrange等,当然还有自定义可迭代对象;

tqdm参数

desc=None,          str类型,作为进度条说明
total=None,         预期的迭代次数
file=None,          输出方式,默认为sys.stderr
ncols=None,        进度条长度
mininterval=0.1,     进度条最小的更新间隔,单位秒,默认:0.1
maxinterval=10.0,    进度条最大更新间隔,单位秒,默认:10
unit='it',            单位,默认it每秒迭代数
bar_format=None,   进度条格式
postfix             字典形式信息,例如:速度=5

这些参数为相对比较常用的参数,并且全部都是可选参数;在自定义进度条当中比较重要的的一个参数为:bar_format,用于定义进度条的具体格式,所包含的具体数据信息;

下面主要介绍这个参数的具体用法;

Specify a custom bar string formatting. May impact performance.
    [default: '{l_bar}{bar}{r_bar}'], where
    l_bar='{desc}: {percentage:3.0f}%|' and
    r_bar='| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, '
      '{rate_fmt}{postfix}]'
    Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt,
      percentage, elapsed, elapsed_s, ncols, nrows, desc, unit,
      rate, rate_fmt, rate_noinv, rate_noinv_fmt,
      rate_inv, rate_inv_fmt, postfix, unit_divisor,
      remaining, remaining_s.
    Note that a trailing ": " is automatically removed after {desc}
    if the latter is empty.


上面为tqdm对bar_format的参数描述;从中可看出:

进度条默认格式为 {l_bar}{bar}{r_bar}

进度条分为三部分:中间的图形(bar),图形左边(l_bar)、图形右边(r_bar)

l_bar:{desc}: {percentage:3.0f}%|

bar:进度条

r_bar:|{n_fmt}/{total_fmt}[{elapsed}<{remaining},{rate_fmt}{postfix}]

100%|█████████████████| 3/3 [00:03<00:00, 1.00s/it]

percentage:百分比
n_fmt:当前数
total_fmt:总数
elapsed:消耗的时间
remaining:剩余时间
rate_fmt:速率
postifx:后缀字典描述
desc、postfix默认为空;

自定义进度条:

1、bar_format=

'进度:{percentage:3.0f}%|{bar}|{n}/{total}[{elapsed}<{remaining},{rate_fmt}{postfix}]'

进度:100%|████████████████████|3/3[00:03<00:00, 1.00s/it]

2、bar_format='进度:{percentage:3.0f}%|{bar}|{n}/{total}[{rate_fmt}{postfix}]'

进度:100%|████████████████████|3/3[ 1.00s/it]

批量数据进度条

import numpy as np
from torch.utils.data import DataLoader
import time
from tqdm import tqdm, tqdm_notebook
from random import random

data =np.array([1,2,3,4])
data_loader = DataLoader(data, batch_size=2, num_workers=0, shuffle=False)

iterator = tqdm(data_loader,maxinterval=10,
                mininterval=2, ncols=80,
               bar_format='{l_bar}|{bar}| {n_fmt}/{total_fmt} [{rate_fmt}{postfix}|{elapsed}<{remaining}]',
               nrows=10,smoothing=0.1)
epoch =0
for d in iterator:
    time.sleep(2)
    epoch +=1
    print(d)
    iterator.set_description('epoch %d' %epoch)
    iterator.set_postfix_str('loss={:^7.3f}'.format(random()))

jYjmqyF.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK