programming language/Python

[Python] enumerate 함수

눈곱만큼도모름 2023. 7. 24. 17:07
728x90
반응형
data_alpha = ['A','B','C','D','E']

for i in enumerate(data_alpha ):
	print(i)
    
-----------------
(0, 'A')
(1, 'B')
(2, 'C')
(3, 'D')
(4, 'E')

enumerate는 '열거하다'라는 뜻을 가진 단어이다.

enumerate 함수를 사용하면 for 문에서 (index, data)같은 튜플 형태로 데이터가 들어온다.

아래와같은 형태로도 받을 수 있다.

data_alpha = ['A','B','C','D','E']

for idx, i in enumerate(data_alpha ):
	print(f"인덱스:{idx}, data:{i}")
    
--------------------
인덱스:0, data:A
인덱스:1, data:B
인덱스:2, data:C
인덱스:3, data:D
인덱스:4, data:E

아래의 경우 pytorch에서의 활용 예이다.

start = time()
from tqdm.auto import tqdm

# for문을 이용하여 epoch마다 학습을 수행하는 코드를 작성합니다.
for epoch in tqdm(range(epochs)):
    # dataloader로 데이터를 불러와서, batch 단위로 데이터를 가져다줌.
    correct = 0
    total_loss = 0.0
    for idx, data in enumerate(trainloader):   #enumerate 
        images, labels = data[0].to(device), data[1].to(device)
        # optimizer의 gradient 초기화.
        optimizer.zero_grad()
        # 모델에 feed-forward를 한 뒤, forward 함수를 실행함.
        outputs = model(images)
        preds = torch.max(outputs, dim=1)[1] # argmax 128개
        correct += (preds == labels).sum() # 전체 iterations에 대해서 몇 개나 맞았는지 보려고.
        # loss를 계산하고
        loss = criterion(outputs, labels)
        total_loss += loss.item()
        if idx == len(trainloader)-1:111111
            print(loss.item())  # 128개에 대한 loss
        # weight update를 합니다. (back-propagation)
        loss.backward()  # gradient 계산
        optimizer.step() # weight update

    print(f"Epoch {epoch+1} | Train Accuracy : {correct/len(trainset):.4f} | Train loss : {total_loss / len(trainloader):.4f}")

end = time()

print("Training Done.")
print(f"Elasped Time : {end-start:.4f} secs.")

 

728x90
반응형