# tqdm库
tqdm是 python的一个关于进度条的扩展包,在深度学习进程中可以将训练过程用进度条的形式展现出来,会让训练界面更加的美观。
```bash
__init__(self, iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=None, lock_args=None, nrows=None, colour=None, delay=0, gui=False, **kwargs)
| Parameters
| ----------
| iterable : iterable, optional
| Iterable to decorate with a progressbar.
| Leave blank to manually manage the updates.
| desc : str, optional
| Prefix for the progressbar.
| total : int or float, optional
| The number of expected iterations. If unspecified,
| len(iterable) is used if possible. If float("inf") or as a last
| resort, only basic progress statistics are displayed
| (no ETA, no progressbar).
| If `gui` is True and this parameter needs subsequent updating,
| specify an initial arbitrary large positive number,
| e.g. 9e9.
| leave : bool, optional
| If [default: True], keeps all traces of the progressbar
| upon termination of iteration.
| If `None`, will leave only if `position` is `0`.
| file : `io.TextIOWrapper` or `io.StringIO`, optional
| Specifies where to output the progress messages
| (default: sys.stderr). Uses `file.write(str)` and `file.flush()`
| methods. For encoding, see `write_bytes`.
| ncols : int, optional
| The width of the entire output message. If specified,
| dynamically resizes the progressbar to stay within this bound.
| If unspecified, attempts to use environment width. The
| fallback is a meter width of 10 and no limit for the counter and
| statistics. If 0, will not print any meter (only stats).
| mininterval : float, optional
| Minimum progress display update interval [default: 0.1] seconds.
| maxinterval : float, optional
| Minimum progress display update interval [default: 0.1] seconds.
| maxinterval : float, optional
| Maximum progress display update interval [default: 10] seconds.
| Automatically adjusts `miniters` to correspond to `mininterval`
| after long display update lag. Only works if `dynamic_miniters`
| or monitor thread is enabled.
| miniters : int or float, optional
| Minimum progress display update interval, in iterations.
| If 0 and `dynamic_miniters`, will automatically adjust to equal
| `mininterval` (more CPU efficient, good for tight loops).
| If > 0, will skip display of specified number of iterations.
| Tweak this and `mininterval` to get very efficient loops.
| If your progress is erratic with both fast and slow iterations
| (network, skipping items, etc) you should set miniters=1.
| ascii : bool or str, optional
| If unspecified or False, use unicode (smooth blocks) to fill
| the meter. The fallback is to use ASCII characters " 123456789#".
| disable : bool, optional
| Whether to disable the entire progressbar wrapper
| [default: False]. If set to None, disable on non-TTY.
| unit : str, optional
| String that will be used to define the unit of each iteration
| [default: it].
| unit_scale : bool or int or float, optional
| If 1 or True, the number of iterations will be reduced/scaled
| automatically and a metric prefix following the
| International System of Units standard will be added
| (kilo, mega, etc.) [default: False]. If any other non-zero
| number, will scale `total` and `n`.
| dynamic_ncols : bool, optional
| If set, constantly alters `ncols` and `nrows` to the
| environment (allowing for window resizes) [default: False].
| smoothing : float, optional
| Exponential moving average smoothing factor for speed estimates
| (ignored in GUI mode). Ranges from 0 (average speed) to 1
| (current/instantaneous speed) [default: 0.3].
| bar_format : str, optional
| 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, eta.
| Note that a trailing ": " is automatically removed after {desc}
| if the latter is empty.
| initial : int or float, optional
| The initial counter value. Useful when restarting a progress
| bar [default: 0]. If using float, consider specifying `{n:.3f}`
| or similar in `bar_format`, or specifying `unit_scale`.
| position : int, optional
| Specify the line offset to print this bar (starting from 0)
| Automatic if unspecified.
| Useful to manage multiple bars at once (eg, from threads).
| postfix : dict or *, optional
| Specify additional stats to display at the end of the bar.
| Calls `set_postfix(**postfix)` if possible (dict).
| unit_divisor : float, optional
| [default: 1000], ignored unless `unit_scale` is True.
| write_bytes : bool, optional
| If (default: None) and `file` is unspecified,
| bytes will be written in Python 2. If `True` will also write
| bytes. In all other cases will default to unicode.
| lock_args : tuple, optional
| Passed to `refresh` for intermediate output
| (initialisation, iterating, and updating).
| nrows : int, optional
| The screen height. If specified, hides nested bars outside this
| bound. If unspecified, attempts to use environment height.
| The fallback is 20.
| colour : str, optional
| Bar colour (e.g. 'green', '#00ff00').
| delay : float, optional
| Don't display until [default: 0] seconds have elapsed.
| gui : bool, optional
| WARNING: internal parameter - do not use.
| Use tqdm.gui.tqdm(...) instead. If set, will attempt to use
| matplotlib animations for a graphical output [default: False].
|
| Returns
| -------
| out : decorated iterator.
```
## 参数说明
- iterable:一个可迭代的参数,进度条就是根据这个可迭代参数来进行进度显示;
- desc:进度条之前的显示内容,在自定义循环的训练中一般将训练的epoch显示在开始处;
- total:进度条迭代的总数,如果没有指定则等于iterable的长度;
- ncols:进度条整个输出信息的宽度。
## 自定义训练
```python
from tqdm import tqdm
for epoch in tf.range(EPOCH):
# 进度条
with tqdm(total=batch_num, desc=f'Epoch {epoch+1}/{EPOCH}', unit='it') as pbar:
for batch_idx in tf.range(batch_num):
...
pbar.set_postfix({'batch_loss': loss})
pbar.update(1)
```