큰 tqdm 사용법

10696 단어 Python3tqdmPython
이 기사는 파이썬 3입니다.여섯 개 이상 될 것 같습니다.
Pytohon에서 일정 시간이 걸리는 처리를 할 때, 진도표를 쉽게 표시할 수 있는 프로그램 라이브러리로 tqdm가 존재합니다.
tqdm/tqdm: A Fast, Extensible Progress Bar for Python and CLI

제가 이 좋은 용법을 소개하겠습니다.

가져오기

pip install tqdm

우선 사용해 보자

from tqdm import tqdm

for i in tqdm(range(1000000)):
    pass
100%|████████████████████████████| 1000000/1000000 [00:00<00:00, 5139706.81it/s]
아마 곧 끝날 것이다.
아니어도range 균형기에는 사용할 수 있다(그렇죠).
from time import sleep

lines = ["a", "b", "c", "d", "e"]    # "abcde"でも動作します
for line in tqdm(lines):
    sleep(1)
100%|████████████████████████████| 5/5 [00:05<00:00,  1.00s/it]
enumerate와도 함께 사용할 수 있습니다.
이 경우 바깥쪽에 사용됩니다.
for i, line in enumerate(tqdm(lines)):
    sleep(1)

생성기 사용 시


생성기에도 tqdm를 사용할 수 있습니다.

"""
適当なジェネレータを作成
"""
def gen():
    text = "abcde"
    for ch in text:
        yield ch

for ch in tqdm(gen()):
    sleep(1)
5it [00:05,  1.00s/it]
그러나 이런 표시로 바뀌어 관건적인 진도표가 나오지 않았다.
생성기가 없기 때문에__len__ 이런 결과가 나올 수 있다.
생성기라지만 사이즈를 미리 알면 많을 것 같아요.
예를 들어 데이터 집합에서 소량을 제작할 때(データセットのサイズ) // (バッチサイズ)를 계산할 수 있다.
이 경우 다음과 같습니다.

"""
適当なジェネレータを作成
"""
text = "abcde"

def gen():
    for ch in text:
        yield ch

for ch in tqdm(gen(), total=len(text)):
    sleep(1)
100%|████████████████████████████| 5/5 [00:05<00:00,  1.00s/it]
total에 치수를 지정하면 이퀄라이저의 경우와 같습니다.

print 기타 정보를 생각하는 경우


진행 표시줄 앞뒤에 정보를 추가할 수도 있습니다.

prefix


나는 기계 학습은 통상적으로train과valid로 나누어 오차를 계산한다고 생각한다.
이때 현재 어느 순환이 돌아가고 있는지 알면 정신적인 안심을 얻을 수 있다.

for ch in tqdm(text, desc="[train]"):
    sleep(0.1)
이렇게 지정하면descprefix를 설정할 수 있습니다.
주기에서 동적으로 변경하려면 다음과 같이 하십시오.
이번에train/valid에 대해 말씀드리자면 설명 편의를 위해 Epoch를 표시하였습니다.
with tqdm(text) as pbar:
    for i, ch in enumerate(pbar):
        pbar.set_description("[Epoch %d]" % (i + 1))
        sleep(0.1)
[Epoch 5]: 100%|████████████████████████████| 5/5 [00:00<00:00,  9.98it/s]
느낌 좋다.

postfix(suffix)


그나저나 포스픽스는 정확한 영어가 아닌 것 같아요.
정확한 표현은 Suffix입니다.
그럼 본론입니다.
진행률 막대 뒤에는 오차와 Acuracy를 표시하려는 경우도 있습니다.
이 경우 다음과 같습니다.
for ch in tqdm(text, postfix="loss=1.0"):
    sleep(0.1)
100%|████████████████████████████| 5/5 [00:00<00:00,  9.72it/s, loss=1.0]
나 이렇게 안 써.
아마도 뒤에 정보를 추가하고 싶을 때 어떤 값이 변하는 것에 사용될 것이다.
따라서 동적 변동을 원하는 경우는 다음과 같다.
from collections import OrderedDict

with tqdm(text) as pbar:
    for i, ch in enumerate(pbar):
        pbar.set_postfix(OrderedDict(loss=1-i/5, acc=i/10))
        sleep(0.1)
100%|████████████████████████████| 5/5 [00:00<00:00,  9.71it/s, loss=0.2, acc=0.4]
OrderedDict를 사용하여 순서대로 표시할 수 있습니다.
또한, 파이썬 3.6 이후dict에는 기준에 따라 순서가 유지된다고 한다.
다만, 시행 방식이 다르기 때문에 순서를 유지하려는 강한 의지가 있는 사람은 이용할 수 있다OrderedDict.
자신의 환경에서 결과pbar.set_postfix({"loss": 1-i/5, "acc": i/10})pbar.set_postfix({"acc": i/10, "loss": 1-i/5})의 변화는 순서가 확실히 유지되고 있다.OrderedDict를 사용하려면 작성이 필요하기 때문에 번거로우니 직접 사용하세요dict.

궁극

with tqdm(text) as pbar:
    for i, ch in enumerate(pbar):
        pbar.set_description("[train] Epoch %d" % i)
        pbar.set_postfix(OrderedDict(loss=1-i/5, acc=i/10))
        sleep(0.1)
다 넣으면...
[train] Epoch 4: 100%|████████████████████████████| 5/5 [00:00<00:00,  9.71it/s, loss=0.2, acc=0.4]
읊다, 읊조리다너무 좋아요!
이렇게 하면 안심하고 파이톤 생활을 할 수 있다.
또한 진도표의 폭을 지정하고 업데이트 주파수를 지정하며 진도표를 수동으로 이동할 수 있지만 개인이 별로 사용하지 않기 때문에 사랑을 끊어야 한다.

좋은 웹페이지 즐겨찾기