乐趣区

关于pytorch:让你的代码动起来Python进度条神器tqdm详解及应用实例

各位 Python 高手,明天我要给大家介绍一个好用的库,它就是:tqdm

tqdm 在阿拉伯语中的意思是 “ 停顿 ”,所以这个库也被称为 “ 疾速停顿条 ”。不得不说,这个名字真的很有创意!

让咱们设想一下,你正在运行一个耗时的数据处理工作或者训练一个简单的深度学习模型。你坐在那里,盯着屏幕,着急地期待程序实现。这种期待的苦楚,我想你我都有切身体会。这时候,有个可视化的进度条会不会让你感觉好很多呢?这就是咱们明天要举荐的 tqdm 库的性能。

tqdm 是一个 Python 疾速、可扩大的进度条工具库,它有很多长处:

易于应用:只需在 Python 循环中包裹你的迭代器,一行代码就能产生一个精美的进度条。

灵便:它能够和 for 循环、pandas dataframe 的 apply 函数以及 Python 的 map 函数等等配合应用。

高效:tqdm 应用了智能算法,即便在数据流十分快的状况下,也不会拖慢你的代码速度。

让咱们看一下 tqdm 在机器学习工作中的利用示例:

from tqdm import tqdm
import time
for i in tqdm(range(100)):
    # 假如咱们正在进行一些耗时的操作,比方训练深度学习模型
    time.sleep(0.01)

运行这段代码,你会看到一个动静更新的进度条。tqdm 会通知你还有多少项须要解决,预计剩余时间,以及以后的处理速度。

你会看到一个动静更新的进度条。tqdm 会通知你还有多少项须要解决,预计剩余时间,以及以后的处理速度。

100%|██████████| 100/100 [00:01<00:00, 97.31it/s]

咱们持续深刻到 tqdm 的更多应用场景和用法。

01

你是否曾在下载大文件时,想要晓得下载的进度呢?tqdm 能够很好地满足你的需要。看看上面的代码:

import requests
from tqdm import tqdm
response = requests.get(url, stream=True)  # 把 stream 参数设置为 True
file_size = int(response.headers['Content-Length'])
chunk = 1
chunk_size = 1024
num_bars = int(file_size / chunk_size)
with open(filename, 'wb') as fp:
    for chunk in tqdm(response.iter_content(chunk_size=chunk_size), total=num_bars, unit='KB', desc=filename, leave=True): 
        fp.write(chunk)

在下面的代码中,咱们首先获取到要下载文件的大小。而后,咱们在 tqdm 中设置总的进度条数目为文件大小除以每个进度条代表的字节数。这样,当咱们下载每一个字节块并写入文件时,tqdm 就会自动更新进度条。

02

在机器学习中,咱们常常须要对大规模的数据进行预处理。应用 tqdm,咱们能够很直观地看到数据预处理的进度。

import pandas as pd
from tqdm import tqdm
tqdm.pandas()
# 假如咱们有一个大的 dataframe,咱们想要对其 'text' 列进行一些预处理
df['processed_text'] = df['text'].progress_apply(lambda x: preprocess(x))

在下面的代码中,咱们首先通过 tqdm.pandas() 办法对 pandas 进行 patch。而后,咱们就能够在 pandas 的 apply 办法中应用 progress_apply,这样就能够在数据处理的同时显示进度条。

03

在训练深度学习模型时,咱们常常须要迭代大量的 epochs。应用 tqdm,咱们能够清晰地看到模型训练的进度。

from tqdm import tqdm
# 假如咱们有一个训练数据集 train_dataloader 和一个模型 model
for epoch in range(num_epochs):
    epoch_iterator 
= tqdm(train_dataloader, desc=
"Training (Epoch %d)"
 % epoch)
    
    for step, batch in enumerate(epoch_iterator):
        # 模型训练的代码
        # ...

04

在许多状况下,咱们的代码可能蕴含嵌套循环。在这种状况下,咱们能够应用 tqdm 创立多个进度条。

from tqdm import tqdm
import time
for i in tqdm(range(100), desc="Outer loop"):
    for j in tqdm(range(10), desc="Inner loop", leave=False):
        # 执行一些耗时的操作
        time.sleep(0.01)

在这段代码中,咱们创立了两个进度条,一个用于内部循环,一个用于外部循环。leave=False 选项将在外部循环完结后删除外部循环的进度条。

05

有时候,咱们可能须要手动更新进度条。例如,当咱们在下载文件或解决批量数据时,咱们可能一次解决多个我的项目。在这种状况下,咱们能够应用 update 办法。

from tqdm import tqdm
import time
with tqdm(total=100) as pbar:
    for i in range(10):
        # 执行一些耗时的操作
        time.sleep(0.1)
        pbar.update(10)

在这段代码中,咱们首先创立了一个进度条,而后在循环中应用 update 办法手动更新进度条的值。

以上就是 tqdm 的一些更深刻的用法。你应该能够看出 tqdm 是一个十分弱小的工具,无论你在做什么,只有你须要期待,就能够应用 tqdm。心愿你能够在你的代码中尝试应用 tqdm,看看它如何晋升你的编程体验。

咱们的公众号会始终举荐有用的 Python 库和编程技巧,如果你感觉咱们的文章有用,请记得关注咱们,以便获取更多的内容。让咱们一起成为更好的 Python 程序员!

退出移动版