AI 부트캠프/챕터2(10.14~11.08)

TIL 22

musukie 2024. 10. 25. 12:28

도전 과제를 진행하면서 만난 다양한 오류들

  • NameError: name 'device' is not defined

코드에서 device라는 변수가 정의되지 않았기 때문에 발생한다. device는 보통 PyTorch에서 모델과 데이터를 CPU 또는 GPU로 이동시키기 위해 사용된다. 아래 코드는 GPU가 사용 가능한 경우, GPU를 사용하고 그렇지 않으면 CPU를 사용한다는 뜻이다.

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')


그러고 나면 이제 모델과 데이터를 지정한 device로 이동시켜야 한다.

# 모델 초기화
model = LSTMModel(vocab_size, embed_dim, hidden_dim, output_dim).to(device)  # 모델을 device로 이동

 

학습 루프 부분에는 to(device)로 데이터를 이동시키는 코드를 쓸 수 있다.

# 모델 학습 루프
num_epochs = 100
for epoch in range(num_epochs):
    for X_batch, y_batch in train_dataloader:
        X_batch, y_batch = X_batch.to(device), y_batch.to(device)  # 데이터 장치 이동
        outputs = model(X_batch)
        optimizer.zero_grad()
        loss = criterion(outputs, y_batch)  # y_batch 사용
        loss.backward()
        optimizer.step()

    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')

print('Finished Training')

 

  • IndexError: index out of range in self

주로 nn.Embedding 레이어에서 입력으로 제공된 인덱스가 임베딩의 크기를 초과할 때 발생한다. 단어 집합 크기(vocab_size)가 잘못 설정됐을 경우에는 vocab_size는 어휘의 총 크기를 반영해야 한다. build_vocab_from_iterator로 생성한 어휘의 크기를 확인해야 한다. vocab_size를 어휘에서 동적으로 가져오도록 수정해야 한다. 아래의 코드로 어휘 사전을 생성한 후 그 크기를 설정하면 된다.

# vocab_size를 어휘의 크기로 설정
vocab_size = len(vocab)  # 어휘의 크기를 동적으로 설정

 

  • RuntimeError: Expected tensor for argument #1 'indices' to have one of the following scalar types: Long, Int; but got torch.FloatTensor instead

nn.Embedding에 전달된 인덱스 텐서의 데이터 타입이 잘못되었을 때 발생한다. nn.Embedding은 인덱스 값이 Long (또는 Int) 타입이어야 하지만, 현재 입력으로 제공된 텐서는 Float 타입이기 때문에 에러가 발생했다고 한다.

따라서  ReviewDataset 클래스의 __getitem__ 메서드에서 반환되는 review 텐서를 torch.tensor(review)로 생성할 때, 데이터 타입을 Long으로 지정해야 한다.

    def __getitem__(self, idx):
        review = self.text_pipeline(self.reviews[idx])
        rating = self.label_pipeline(self.ratings[idx])
        return torch.tensor(review, dtype=torch.long), torch.tensor(rating)
        # torch.tensor(review)을 torch.tensor(review, dtype=torch.long)으로 고쳤다.

강의 외부에서 추가로 알게 된 내용

value_counts()

Pandas 라이브러리에서 제공하는 함수로, 특정 Series 객체에서 각각의 고유 값이 몇 번 등장하는지를 계산해준다. 즉, 데이터의 분포를 파악할 때 유용한 함수다. 이 함수는 각 값과 그 값이 몇 번 나오는지를 내림차순으로 정리해서 보여준다. 기본적으로는 값을 기준으로 정렬하지 않고 빈도가 높은 순서대로 출력한다.

 

주요 옵션을 알아보자. 빈도 대신 비율을 계산하고 싶을 때 normalize=True를 사용한다. sort는 정렬 여부를 결정할 수 있다. 기본값은 True로 내림차순 정렬이지만, sort=False로 설정하면 정렬 없이 값의 빈도를 반환한다. 결과를 오름차순으로 정렬하려면 ascending=True를 사용다.

'AI 부트캠프 > 챕터2(10.14~11.08)' 카테고리의 다른 글

TIL 23  (0) 2024.10.28
WIL 4  (0) 2024.10.25
TIL 21  (0) 2024.10.24
TIL 20  (0) 2024.10.23
TIL 19  (1) 2024.10.22